Sto modificando il progetto dell'analizzatore predefinito proveniente dal modello dell'analizzatore di codice per provare a farlo riportare a tutte le dichiarazioni per una classe parziale.ReportDiagnostic on Partial Classes
ho modificato il codice per:
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);
}
}
}
In due file separati, non ho classi parziali in questo modo:
// File1.cs
partial class Foo
{
public string BarString;
}
// File2.cs
partial class Foo
{
public string FooBarString;
}
ho messo i punti di interruzione sul ReportDiagnostic e vedo che ha definito per ogni posizione, ma all'interno di Visual Studio riporta solo la diagnostica all'interno di un singolo file.
Se inserisco più implementazioni di Foo
in un singolo file (e capita di riportare in quella dichiarazione di file), vedrò entrambe le diagnosi riportate.
Sto fraintendendo come si suppone che la diagnostica sia segnalata o si tratti di un bug? Se si tratta di un bug, è un problema di Roslyn o è un problema con il consumo di Roslyn da parte di Visual Studio?
Avete entrambi i file aperti nell'IDE? – SLaks
Sì, entrambi i file sono aperti. –
Posso riprodurre questo. Mi sembra un insetto. Se non lo hai già, ti consiglio di aprire un problema a questo indirizzo: https://github.com/dotnet/roslyn/issues/ – JoshVarty