Modyfikuję domyślny projekt analizatora, który pochodzi z szablonu analizatora kodów, aby spróbować wygenerować raport dla wszystkich deklaracji dla klasy częściowej.ReportDiagnostic on Partial Classes
Mam zmodyfikowany kod do:
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);
}
}
}
W dwóch oddzielnych plikach, mam częściowe zajęcia tak:
// File1.cs
partial class Foo
{
public string BarString;
}
// File2.cs
partial class Foo
{
public string FooBarString;
}
umieścić punkty przerwania na ReportDiagnostic i widzę, że wezwał do siebie lokalizacja, ale w Visual Studio raportuje tylko diagnostykę w jednym pliku.
Jeśli umieściłem wiele implementacji Foo
w jednym pliku (i zdarza się, że raportuje się na deklaracji plików), to zobaczę oba raporty diagnostyczne.
Czy nie rozumiem, jak należy zgłaszać diagnostykę lub czy jest to błąd? Jeśli jest to błąd, czy jest to problem Roslyn, czy jest to problem z używaniem Roslyn przez Visual Studio?
Czy masz oba pliki otwarte w IDE? – SLaks
Tak, oba pliki są otwarte. –
Mogę to odtworzyć. Czuję się jak błąd dla mnie. Jeśli jeszcze tego nie zrobiłeś, polecam otwarcie problemu na: https://github.com/dotnet/roslyn/issues/ – JoshVarty