在SyntaxTreeAnalysisContext

时间:2016-05-03 09:02:42

标签: c# roslyn roslyn-code-analysis

我得到一个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;
  }
}

有没有办法从SyntaxTreeAnalysisContextSyntaxNodeAnalysisContext

(编辑)举个例子:我希望增强一些规则(所有规则都使用ReportDiagnostics的{​​{1}}方法;类似于StyleCop Analyzers的SA1027 Use tabs correctly)我可以在封闭类型上放置一个属性并检测其存在,然后省略报告诊断,如

SyntaxTreeAnalysisContext

1 个答案:

答案 0 :(得分:0)

SemanticModelAnalysis方法中注册Initialize。语法1仅用于语法而不会产生语义影响。