2015-06-15 19 views
10

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?

+0

Avete entrambi i file aperti nell'IDE? – SLaks

+0

Sì, entrambi i file sono aperti. –

+0

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

risposta

0

Questa è una limitazione dell'implementazione V1 del servizio di diagnostica di Visual Studio.

Esiste un problema nel repository Roslyn seguire questo problema:

https://github.com/dotnet/roslyn/issues/3748#issuecomment-117231706

Dalla risposta nel numero Github:

Questo è un problema noto nella realizzazione v1 di il servizio di diagnostica IDE di Visual Studio . Al momento non gestisce l'analizzatore che segnala la diagnostica al di fuori del documento analizzato. Quindi, se File1.cs ha la definizione primaria di Foo per cui è stato richiamato AnalyzeSymbol , il servizio di diagnostica conserva solo la diagnostica riportata dall'analizzatore in questo file.