47 lines
1.5 KiB
C#
47 lines
1.5 KiB
C#
using SQLLinter.Core;
|
|
using SQLLinter.Core.Interfaces;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace SQLLinter.Infrastructure.Configuration.Overrides;
|
|
|
|
public class OverrideFinder
|
|
{
|
|
private static Regex _OverrideRegex = new Regex(@".*?sqllinter-override ?(.* += +.*)+.*", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
|
|
|
public IEnumerable<IOverride> GetOverrideList(Stream fileStream)
|
|
{
|
|
var overrideList = new List<IOverride>();
|
|
TextReader reader = new StreamReader(fileStream);
|
|
|
|
string line;
|
|
while ((line = reader.ReadLine()) != null)
|
|
{
|
|
if (line.Length > Constants.MaxLineWidthForRegexEval || !line.Contains("sqllinter-override"))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var match = _OverrideRegex.Match(line);
|
|
if (!match.Success)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var overrideDetails = match.Groups[1].Value.Split(',').Select(p => p.Trim()).ToList();
|
|
foreach (var overrideDetail in overrideDetails)
|
|
{
|
|
var details = overrideDetail.Split(' ').Select(p => p.Trim()).ToList();
|
|
if (OverrideTypeMap.List.ContainsKey(details[0]))
|
|
{
|
|
var overrideType = OverrideTypeMap.List.GetValueOrDefault(details[0]);
|
|
overrideList.Add((IOverride)Activator.CreateInstance(overrideType, details[2]));
|
|
}
|
|
}
|
|
}
|
|
|
|
fileStream.Seek(0, SeekOrigin.Begin);
|
|
|
|
return overrideList;
|
|
}
|
|
}
|