public void VisitRules(string sqlPath, IEnumerable <IRuleException> ignoredRules, Stream sqlFileStream) { var overrides = overrideFinder.GetOverrideList(sqlFileStream); var overrideArray = overrides as IOverride[] ?? overrides.ToArray(); var sqlFragment = fragmentBuilder.GetFragment(GetSqlTextReader(sqlFileStream), out var errors, overrideArray); // notify user of syntax errors var ruleExceptions = ignoredRules as IRuleException[] ?? ignoredRules.ToArray(); if (errors.Any()) { HandleParserErrors(sqlPath, errors, ruleExceptions); } // lint what can be linted, even if there are errors var ruleVisitors = ruleVisitorBuilder.BuildVisitors(sqlPath, ruleExceptions); foreach (var visitor in ruleVisitors) { VisitFragment(sqlFragment, visitor, overrideArray); } }
public void RuleVisitorEnforcesRule() { // arrange var mockReporter = Substitute.For <IReporter>(); mockReporter.ReportViolation(Arg.Any <IRuleViolation>()); var mockConfigReader = Substitute.For <IConfigReader>(); mockConfigReader.GetRuleSeverity("select-star").Returns(RuleViolationSeverity.Error); var ignoredRuleList = new List <IRuleException>(); var pathString = "DoesntExist.sql"; var RuleVisitorBuilder = new RuleVisitorBuilder(mockConfigReader, mockReporter); var ActiveRuleVisitors = RuleVisitorBuilder.BuildVisitors(pathString, ignoredRuleList); var testFileStream = ParsingUtility.GenerateStreamFromString("SELECT * FROM FOO;"); var textReader = new StreamReader(testFileStream); var sqlFragment = _fragmentBuilder.GetFragment(textReader, out _); // act foreach (var sqlFragmentVisitor in ActiveRuleVisitors) { sqlFragment.Accept(sqlFragmentVisitor); testFileStream.Seek(0, SeekOrigin.Begin); } // assert Assert.AreEqual(1, ActiveRuleVisitors.Count); Assert.IsTrue(ActiveRuleVisitors[0].GetType().Name == typeof(SelectStarRule).Name); mockReporter.Received().ReportViolation(Arg.Is <IRuleViolation>(x => x.FileName == pathString && x.RuleName == "select-star" && x.Line == 1 && x.Severity == RuleViolationSeverity.Error)); }
public void VisitRules(string sqlPath, IEnumerable <IRuleException> ignoredRules, Stream sqlFileStream) { TextReader sqlTextReader = new StreamReader(sqlFileStream); var sqlFragment = fragmentBuilder.GetFragment(sqlTextReader, out var errors); sqlFileStream.Seek(0, SeekOrigin.Begin); if (errors.Any()) { HandleParserErrors(sqlPath, errors, ignoredRules); } var ruleVisitors = ruleVisitorBuilder.BuildVisitors(sqlPath, ignoredRules); foreach (var visitor in ruleVisitors) { sqlFragment?.Accept(visitor); } }
public void VisitRules(string sqlPath, Stream sqlFileStream) { TextReader sqlTextReader = new StreamReader(sqlFileStream); var sqlFragment = fragmentBuilder.GetFragment(sqlTextReader, out var errors); if (errors.Count > 0) { reporter.ReportViolation(new RuleViolation(sqlPath, null, "TSQL not syntactically correct", 0, 0, RuleViolationSeverity.Error)); return; } sqlFileStream.Seek(0, SeekOrigin.Begin); var ignoredRules = ruleExceptionFinder.GetIgnoredRuleList(sqlFileStream).ToList(); var ruleVisitors = ruleVisitorBuilder.BuildVisitors(sqlPath, ignoredRules); foreach (var visitor in ruleVisitors) { sqlFragment.Accept(visitor); } }