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 GetOverrideList(Stream fileStream) { var overrideList = new List(); 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; } }