Я изменяю проект анализатора по умолчанию, который исходит из шаблона анализатора кода, чтобы попытаться заставить его сообщать обо всех объявлениях для частичного класса.
Я изменил код на:
public override void Initialize(AnalysisContext context)
{
context.RegisterSymbolAction(AnalyzeSymbol, SymbolKind.NamedType);
}
private static void AnalyzeSymbol(SymbolAnalysisContext context)
{
var namedTypeSymbol = (INamedTypeSymbol)context.Symbol;
// Find just those named type symbols with names containing lowercase letters.
if (namedTypeSymbol.Name.ToCharArray().Any(char.IsLower))
{
foreach (var location in namedTypeSymbol.Locations)
{
// For all such symbols, produce a diagnostic.
var diagnostic = Diagnostic.Create(Rule, location, namedTypeSymbol.Name);
context.ReportDiagnostic(diagnostic);
}
}
}
В двух отдельных файлах у меня есть частичные классы:
// File1.cs
partial class Foo
{
public string BarString;
}
// File2.cs
partial class Foo
{
public string FooBarString;
}
Я поставил контрольные точки в ReportDiagnostic и вижу, что он вызвал для каждого местоположения, но в Visual Studio он сообщает только диагностику в пределах одного файла.
Если я помещаю несколько реализаций Foo
в один файл (и, как представляется, это сообщение об объявлении этих файлов), я увижу, что сообщались обе диагностированные.
Я не понимаю, как должны сообщаться о диагностике или это ошибка? Если это ошибка, это проблема Roslyn или это проблема с потреблением Visual Studio Roslyn?