36 lines
1.2 KiB
C#
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);
|
|
}
|
|
}
|