1

が与えられますが、クラス宣言である親ノードに上昇し、型にどの属性が配置されているかを確認するためSyntaxTreeAnalysisContext contextに必要なのは、SyntaxNodeAnalysisContextそのプロパティを持つ です。SemanticModel

SyntaxTreeAnalysisContext givenTreeContext
/// how to get to:
SyntaxNodeAnalysisContext context;

var n = context.Node;
ISymbol symbol = null;
bool hasAttributes = false;

while (n != null)
{
  if (n.IsKind(SyntaxKind.ClassDeclaration))
  {
    symbol = context.SemanticModel.GetDeclaredSymbol(n);        
    hasAttributes = symbol.GetAttributes().Any();
    break;
  }
  else
  {
    n = n.Parent;
  }
}

SyntaxTreeAnalysisContextからまで行く方法はありSyntaxNodeAnalysisContextますか?

(編集) 例を挙げてみましょう:囲んReportDiagnosticsいる型に属性を配置してその存在を検出し、次に、次のような診断の報告を省略しますSyntaxTreeAnalysisContext

if (!hasAttributes) // simplified
{ 
  context.ReportDiagnostic(...);
}
4

1 に答える 1

1

SemanticModelAnalysisメソッドに代わりにa を登録しますInitialize。シンタックス ワンは、セマンティックに影響を与えずにシンタックスのみを対象としています。

于 2016-05-20T23:31:19.017 に答える