1

我得到了 aSyntaxTreeAnalysisContext context但我需要的是 aSyntaxNodeAnalysisContext及其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;
  }
}

有没有办法从SyntaxTreeAnalysisContextSyntaxNodeAnalysisContext

(编辑)举个例子:我想增强一些规则(它们都使用 ; 的ReportDiagnostics方法,SyntaxTreeAnalysisContext例如SA1027从 StyleCop 分析器中正确使用选项卡),以便我可以在封闭类型上放置一个属性并检测它的存在和然后省略报告诊断,如

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

1 回答 1

1

SemanticModelAnalysis在您的Initialize方法中注册 a 。语法仅用于语法,没有语义影响。

于 2016-05-20T23:31:19.017 回答