我开发了我的第一个诊断分析器,并通过 NuGet 将其安装到测试项目中。 一切正常,除了问题下没有显示红线。 我正在使用
context.Node.GetLocation()
,其中 context
是 SyntaxNodeAnalysisContext
。
我更新了诊断以在消息中写入位置,以便我可以尝试使用
context.ReportDiagnostic(Diagnostic.Create(DD_INVALID_PARAM_TYPE, location, methodSymbol.Name, location.ToString(), propertyType));
确定位置,我在错误窗口中看到该位置是 SourceFile(C:\..\..\..\Program.cs[275..276))
但 Program.cs 文件只有 27 行长。
这是目前所讨论的完整方法:
private static void AnalyzeParameters(SyntaxNodeAnalysisContext context, IMethodSymbol methodSymbol)
{
var parameters = methodSymbol.Parameters;
if (parameters.Length != 1)
{
context.ReportDiagnostic(Diagnostic.Create(DD_INVALID_PARAM_COUNT, context.Node.GetLocation(), methodSymbol.Name, parameters.Length));
return;
}
var propertyType = ((PropertyDeclarationSyntax)context.Node).Type.ToString();
var methodInputType = parameters.First().Type.ToString();
if (propertyType != methodInputType)
{
context.ReportDiagnostic(Diagnostic.Create(DD_INVALID_PARAM_TYPE, context.Node.GetLocation(), methodSymbol.Name, methodInputType, propertyType));
}
}
我正在分析属性声明及其关联的属性。
该位置是“基于跨度”的,即,它位于从文件开头算起的字符索引 275 处。