获取SyntaxTreeAnalysisContext上的语义模型



我得到了一个SyntaxTreeAnalysisContext context,但我需要的是一个具有SemanticModel属性的SyntaxNodeAnalysisContext,以便提升到作为类声明的父节点,然后检查类型上放置了哪些属性。

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

(编辑)举个例子:我想增强一些规则(它们都使用SyntaxTreeAnalysisContextReportDiagnostics方法;比如SA1027正确使用StyleCop Analyzers中的选项卡),这样我就可以在封闭类型上放置属性并检测其存在,然后省略像一样的诊断报告

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

Initialize方法中注册一个SemanticModelAnalysis。语法类仅用于语法,不具有语义影响。

最新更新