Files
SQLLint/SQLLinter/Infrastructure/Configuration/Overrides/OverrideFinder.cs

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;
}
}