2015-06-15 20 views
10

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?

+0

Czy masz oba pliki otwarte w IDE? – SLaks

+0

Tak, oba pliki są otwarte. –

+0

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

Odpowiedz

0

Jest to ograniczenie implementacji V1 usługi diagnostycznej Visual Studio.

Występuje problem w repozytorium Roslyn śledzić ten problem:

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

Od odpowiedzi na GitHub wydania:

Jest to znany problem w realizacji V1 usługa diagnostyczna IDE Visual Studio . Obecnie nie obsługuje on analizatora zgłaszającego diagnostykę poza analizowanym dokumentem. Tak więc, jeśli File1.cs ma podstawową definicję, która została wywołana, usługa diagnostyczna zachowuje tylko diagnostykę zgłoszoną przez analizator w tym pliku diagnostycznym .