Files
SQLLint/SQLLinter/Infrastructure/Rules/AliasStyleConsistencyRule.cs

36 lines
1.2 KiB
C#

using Microsoft.SqlServer.TransactSql.ScriptDom;
using SQLLinter.Common;
namespace SQLLinter.Infrastructure.Rules;
public class AliasStyleConsistencyRule : BaseRuleVisitor
{
public override string Text => "Алиасы должны использовать единый стиль (AS): {0}";
public override void Visit(NamedTableReference node)
{
if (node.Alias != null && node.Alias.QuoteType == QuoteType.NotQuoted)
{
// ScriptDom не хранит явно "AS", но можно проверять TokenStream
var aliasToken = node.Alias;
var tokens = node.ScriptTokenStream;
if (tokens != null)
{
int idx = node.FirstTokenIndex;
bool hasAs = false;
for (int i = idx; i <= node.LastTokenIndex; i++)
{
if (tokens[i].Text.Equals("AS", System.StringComparison.OrdinalIgnoreCase))
{
hasAs = true;
break;
}
}
if (!hasAs)
AddViolation(node, $"[{node.Alias.Value}]");
}
}
base.Visit(node);
}
}