我得到了 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;
}
}
有没有办法从SyntaxTreeAnalysisContext
到SyntaxNodeAnalysisContext
?
(编辑)举个例子:我想增强一些规则(它们都使用 ; 的ReportDiagnostics
方法,SyntaxTreeAnalysisContext
例如SA1027从 StyleCop 分析器中正确使用选项卡),以便我可以在封闭类型上放置一个属性并检测它的存在和然后省略报告诊断,如
if (!hasAttributes) // simplified
{
context.ReportDiagnostic(...);
}