1

它需要在包含俄语字符的字符串下划线。

我已经为 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);
               }
            }
         }

      }

最后,截图: 在此处输入图像描述

在红色矩形中:当前字符串包含俄语字符

我需要帮助!

4

0 回答 0