using Microsoft.SqlServer.TransactSql.ScriptDom; using SQLLinter.Common; namespace SQLLinter.Infrastructure.Rules; public class SelectStarRule : BaseRuleVisitor, IRule { private int expressionCounter; public override string Text => "Ожидаются имена столбцов в SELECT"; public override void Visit(ExistsPredicate node) { var childVisitor = new ChildVisitor(); node.AcceptChildren(childVisitor); expressionCounter += childVisitor.SelectStarExpressionCount; } public override void Visit(SelectStarExpression node) { if (expressionCounter > 0) { expressionCounter--; return; } AddViolation(node); } public class ChildVisitor : TSqlFragmentVisitor { public int SelectStarExpressionCount { get; set; } public override void Visit(SelectStarExpression node) { SelectStarExpressionCount++; } } }