Необходимо подчеркнуть строку, содержащую русские символы.
Я написал расширение для Roslyn и в атрибутах для методов. Русский текст подчеркнут, но для атрибутов для классов и свойств я не понимаю.
Мой код:
1) происходит инициализация:
public override void Initialize(AnalysisContext context)
{
context.RegisterSymbolAction(AnalyzeRussianSymbols, SymbolKind.Parameter);
}
2) AnalyzeRussianSymbols
:
public void AnalyzeRussianSymbols(SymbolAnalysisContext context)
{
CompilationUnitSyntax root = (CompilationUnitSyntax)context.Symbol.Locations[0].SourceTree.GetRoot();
AttributeListVirtualizationVisitor attributeArgument = new AttributeListVirtualizationVisitor();
attributeArgument.Visit(root);
CheckAttributes(attributeArgument, context);
}
3) Проверить атрибуты:
private void CheckAttributes(AttributeListVirtualizationVisitor attributeArgument, SymbolAnalysisContext context)
{
foreach (AttributeArgumentListSyntax attributes in attributeArgument.AttributeArgumentsList)
{
foreach (AttributeArgumentSyntax attr in attributes.Arguments)
{
SyntaxKind syntaxKind = attr.Expression?.Kind() ?? SyntaxKind.None;
if(syntaxKind == SyntaxKind.StringLiteralExpression && Regex.IsMatch(attr.NormalizeWhitespace().Expression.ToString(), "[а-яА-ЯёЁ]"))
{
Diagnostic diagnostic = Diagnostic.Create(Rule, attr.GetLocation(), attr);
context.ReportDiagnostic(diagnostic);
}
}
}
}
Наконец, скриншот:
![enter image description here](https://i.stack.imgur.com/buhmY.png)
В красном прямоугольнике: текущая строка содержит русские символы
Мне нужна помощь!