Найти атрибут класса или свойства и подчеркнуть его параметры с помощью Roslyn - PullRequest
1 голос
/ 12 марта 2019

Необходимо подчеркнуть строку, содержащую русские символы.

Я написал расширение для 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

В красном прямоугольнике: текущая строка содержит русские символы

Мне нужна помощь!

...