Udostępnij za pośrednictwem


Eksplorowanie kodu za pomocą wizualizatora składni Roslyn w programie Visual Studio

Ten artykuł zawiera omówienie narzędzia wizualizatora składni, które jest dostarczane jako część zestawu SDK .NET Compiler Platform ("Roslyn"). Wizualizator składni to okno narzędzi, które ułatwia inspekcję i eksplorowanie drzew składniowych. Jest to podstawowe narzędzie do zrozumienia modeli dla kodu, który chcesz przeanalizować. Jest to również pomoc debugowania podczas tworzenia własnych aplikacji przy użyciu zestawu SDK .NET Compiler Platform ("Roslyn"). Otwórz to narzędzie podczas tworzenia pierwszych analizatorów. Wizualizator pomaga zrozumieć modele używane przez interfejsy API. Możesz również użyć narzędzi, takich jak SharpLab lub LINQPad , aby sprawdzić kod i zrozumieć drzewa składni.

Instrukcje instalacji — Instalator programu Visual Studio

Istnieją dwa różne sposoby znajdowania zestawu SDK .NET Compiler Platform w Instalator programu Visual Studio:

Instalowanie przy użyciu widoku Instalator programu Visual Studio — Obciążenia

Zestaw SDK .NET Compiler Platform nie jest automatycznie wybierany jako część obciążenia programistycznego rozszerzenia programu Visual Studio. Musisz wybrać go jako składnik opcjonalny.

  1. Uruchamianie Instalator programu Visual Studio
  2. Wybierz pozycję Modyfikuj
  3. Sprawdź obciążenie programistyczne rozszerzenia programu Visual Studio .
  4. Otwórz węzeł dewelopera rozszerzenia programu Visual Studio w drzewie podsumowania.
  5. Zaznacz pole wyboru zestawu SDK .NET Compiler Platform. Znajdziesz go ostatnio w obszarze opcjonalnych składników.

Opcjonalnie chcesz również , aby edytor DGML wyświetlał grafy w wizualizatorze:

  1. Otwórz węzeł Poszczególne składniki w drzewie podsumowania.
  2. Zaznacz pole wyboru edytora DGML

Instalowanie przy użyciu karty Instalator programu Visual Studio — poszczególne składniki

  1. Uruchamianie Instalator programu Visual Studio
  2. Wybierz pozycję Modyfikuj
  3. Wybierz kartę Poszczególne składniki
  4. Zaznacz pole wyboru zestawu SDK .NET Compiler Platform. Znajdziesz ją u góry w sekcji Kompilatory, narzędzia kompilacji i środowiska uruchomieniowe .

Opcjonalnie chcesz również , aby edytor DGML wyświetlał grafy w wizualizatorze:

  1. Zaznacz pole wyboru edytora DGML. Znajdziesz go w sekcji Narzędzia kodu .

Zapoznaj się z pojęciami używanymi w zestawie SDK .NET Compiler Platform, czytając artykuł z omówieniem. Zawiera wprowadzenie do drzew składni, węzłów, tokenów i trywii.

Wizualizator składni

Program Syntax Visualizer umożliwia inspekcję drzewa składni dla pliku kodu C# lub Visual Basic w bieżącym aktywnym oknie edytora w środowisku IDE programu Visual Studio. Wizualizator można uruchomić, klikając pozycję Wyświetl> innewizualizator składni systemuWindows>. Możesz również użyć paska narzędzi Szybkiego uruchamiania w prawym górnym rogu. Wpisz "składnię", a polecenie , aby otworzyć wizualizator składni powinien zostać wyświetlony.

To polecenie otwiera wizualizator składni jako przestawne okno narzędzia. Jeśli nie masz otwartego okna edytora kodu, ekran jest pusty, jak pokazano na poniższej ilustracji.

Okno narzędzia Wizualizator składni

Zadokuj to okno narzędzia w dogodnej lokalizacji w programie Visual Studio, na przykład po lewej stronie. Wizualizator wyświetla informacje o bieżącym pliku kodu.

Utwórz nowy projekt przy użyciu polecenia Plik>nowy projekt . Możesz utworzyć projekt Visual Basic lub C#. Gdy program Visual Studio otworzy główny plik kodu dla tego projektu, wizualizator wyświetli dla niego drzewo składni. Możesz otworzyć dowolny istniejący plik C# /Visual Basic w tym wystąpieniu programu Visual Studio, a wizualizator wyświetla drzewo składni tego pliku. Jeśli w programie Visual Studio jest otwartych wiele plików kodu, wizualizator wyświetla drzewo składni dla aktualnie aktywnego pliku kodu (plik kodu, który ma fokus klawiatury).

Jak pokazano na poprzednich obrazach, okno narzędzia wizualizatora wyświetla drzewo składni u góry i siatkę właściwości u dołu. Siatka właściwości wyświetla właściwości elementu aktualnie wybranego w drzewie, w tym typ platformy .NET i rodzaj (SkładniaKind) elementu.

Drzewa składni składają się z trzech typów elementów — węzłów, tokenów i trywii. Więcej informacji o tych typach można przeczytać w artykule Praca ze składnią . Elementy każdego typu są reprezentowane przy użyciu innego koloru. Kliknij przycisk "Legenda", aby zapoznać się z omówieniem używanych kolorów.

Każdy element w drzewie wyświetla również własny zakres. Zakres to indeksy (pozycja początkowa i końcowa) tego węzła w pliku tekstowym. W poprzednim przykładzie języka C# wybrany token "UsingKeyword [0..5)" ma wartość Span o szerokości pięciu znaków [0..5). Notacja "[..)" oznacza, że indeks początkowy jest częścią zakresu, ale indeks końcowy nie jest.

Istnieją dwa sposoby nawigowania po drzewie:

  • Rozwiń lub kliknij elementy w drzewie. Wizualizator automatycznie wybiera tekst odpowiadający zakresowi tego elementu w edytorze kodu.
  • Kliknij lub wybierz tekst w edytorze kodu. W poprzednim przykładzie języka Visual Basic, jeśli wybierzesz wiersz zawierający ciąg "Module1" w edytorze kodu, wizualizator automatycznie przechodzi do odpowiedniego węzła ModuleStatement w drzewie.

Wizualizator wyróżnia element w drzewie, którego zakres najlepiej pasuje do zakresu tekstu wybranego w edytorze.

Wizualizator odświeża drzewo, aby pasować do modyfikacji w aktywnym pliku kodu. Dodaj wywołanie do Console.WriteLine() wewnątrz Main()elementu . Podczas wpisywania wizualizator odświeża drzewo.

Wstrzymaj wpisywanie po wpisaniu Console.. Drzewo ma kilka elementów kolorowanych na różowo. W tym momencie występują błędy (nazywane również "diagnostyką") w wpisanym kodzie. Te błędy są dołączane do węzłów, tokenów i trywii w drzewie składni. Wizualizator pokazuje, które elementy mają dołączone do nich błędy z wyróżnieniem tła na różowym kolorze. Błędy można sprawdzić na dowolnym elemencie kolorowym różowym, umieszczając wskaźnik myszy na elemencie. Wizualizator wyświetla tylko błędy składniowe (te błędy związane ze składnią typu kodu); nie wyświetla żadnych błędów semantycznych.

Wykresy składniowe

Kliknij prawym przyciskiem myszy dowolny element w drzewie i kliknij pozycję Wyświetl wykres składni skierowanej.

Wizualizator wyświetla graficzną reprezentację poddrzewa rooted w wybranym elemencie. Spróbuj wykonać te kroki dla węzła MethodDeclaration odpowiadającego Main() metodzie w przykładzie języka C#. Wizualizator wyświetla graf składniowy, który wygląda w następujący sposób:

Wyświetlanie wykresu składni języka C#

Przeglądarka grafów składni ma możliwość wyświetlenia legendy dla schematu kolorów. Możesz również umieścić wskaźnik myszy na poszczególnych elementach w grafie składni, aby wyświetlić właściwości odpowiadające temu elementowi.

Wykresy składniowe dla różnych elementów w drzewie można wyświetlać wielokrotnie, a wykresy będą zawsze wyświetlane w tym samym oknie w programie Visual Studio. To okno można zadokować w dogodnej lokalizacji w programie Visual Studio, aby nie trzeba było przełączać się między kartami, aby wyświetlić nowy graf składniowy. Dolne, poniżej okien edytora kodu, są często wygodne.

Oto układ dokowania do użycia z oknem narzędzia wizualizatora i oknem grafu składni:

Jeden układ dokowania dla okna wizualizatora i wykresu składniowego

Inną opcją jest umieszczenie okna grafu składni na drugim monitorze w konfiguracji podwójnej monitora.

Sprawdzanie semantyki

Wizualizator składni umożliwia podstawową inspekcję symboli i informacji semantycznych. Wpisz double x = 1 + 1; element Main() w przykładzie języka C#. Następnie wybierz wyrażenie 1 + 1 w oknie edytora kodu. Wizualizator wyróżnia węzeł AddExpression w wizualizatorze. Kliknij prawym przyciskiem myszy tę pozycję AddExpression i kliknij pozycję Wyświetl symbol (jeśli istnieje). Zwróć uwagę, że większość elementów menu ma kwalifikator "jeśli istnieje". Wizualizator składni sprawdza właściwości węzła, w tym właściwości, które mogą nie być obecne dla wszystkich węzłów.

Siatka właściwości w wizualizatorze aktualizuje się, jak pokazano na poniższej ilustracji: symbol wyrażenia jest syntetyzowanyIntrinsicOperatorSymbol z kind = Metoda.

Właściwości symboli w wizualizatorze składni

Spróbuj użyć polecenia View TypeSymbol (jeśli istnieje) dla tego samego węzła AddExpression . Siatka właściwości w wizualizatorze aktualizuje się, jak pokazano na poniższej ilustracji, wskazując, że typ wybranego wyrażenia to Int32.

Właściwości TypeSymbol

Spróbuj wyświetlić przekonwertowany typSymbol (jeśli istnieje) dla tego samego węzła AddExpression . Siatka właściwości aktualizuje, wskazując, że chociaż typ wyrażenia to Int32, przekonwertowany typ wyrażenia jest Double pokazany na poniższej ilustracji. Ten węzeł zawiera przekonwertowane informacje o symbolu typu, ponieważ Int32 wyrażenie występuje w kontekście, w którym musi zostać przekonwertowany na element Double. Ta konwersja spełnia Double typ określony dla zmiennej x po lewej stronie operatora przypisania.

Przekonwertowane właściwości TypeSymbol

Na koniec spróbuj wyświetlić wartość stałą (jeśli istnieje) dla tego samego węzła AddExpression . Siatka właściwości pokazuje, że wartość wyrażenia jest stałą czasu kompilacji z wartością 2.

Stała wartość

Powyższy przykład można również replikować w visual basic. Wpisz Dim x As Double = 1 + 1 plik Visual Basic. Wybierz wyrażenie 1 + 1 w oknie edytora kodu. Wizualizator wyróżnia odpowiedni węzeł AddExpression w wizualizatorze. Powtórz powyższe kroki dla tego dodatku AddExpression i powinny zostać wyświetlone identyczne wyniki.

Sprawdź więcej kodu w Visual Basic. Zaktualizuj główny plik Visual Basic przy użyciu następującego kodu:

Imports C = System.Console

Module Program
    Sub Main(args As String())
        C.WriteLine()
    End Sub
End Module

Ten kod wprowadza alias o nazwie C , który mapuje typ System.Console w górnej części pliku i używa tego aliasu wewnątrz Main(). Wybierz użycie tego aliasu , C w metodzie in C.WriteLine().Main() Wizualizator wybiera odpowiedni węzeł IdentifierName w wizualizatorze. Kliknij prawym przyciskiem myszy ten węzeł i kliknij pozycję Wyświetl symbol (jeśli istnieje). Siatka właściwości wskazuje, że ten identyfikator jest powiązany z typem System.Console , jak pokazano na poniższej ilustracji:

Właściwości symbolu C w wizualizatorze składni

Spróbuj wyświetlić aliasSymbol (jeśli istnieje) dla tego samego węzła IdentifierName . Siatka właściwości wskazuje, że identyfikator jest aliasem o nazwie C powiązanej z obiektem System.Console docelowym. Innymi słowy siatka właściwości zawiera informacje dotyczące aliasuSymbol odpowiadającego identyfikatorowi C.

Właściwości AliasSymbol

Sprawdź symbol odpowiadający dowolnemu zadeklarowanemu typowi, metodzie, właściwości. Wybierz odpowiedni węzeł w wizualizatorze i kliknij pozycję Wyświetl symbol (jeśli istnieje). Wybierz metodę , w tym treść metody Sub Main(). Kliknij pozycję Wyświetl symbol (jeśli istnieje) dla odpowiedniego węzła SubBlock w wizualizatorze. Siatka właściwości przedstawia właściwość MethodSymbol dla tego podblokowania ma nazwę Main o typie Voidzwracania .

Wyświetlanie symbolu deklaracji metody

Powyższe przykłady języka Visual Basic można łatwo replikować w języku C#. Wpisz using C = System.Console; wartość zamiast Imports C = System.Console aliasu. Powyższe kroki w języku C# dają identyczne wyniki w oknie wizualizatora.

Operacje inspekcji semantycznej są dostępne tylko w węzłach. Nie są one dostępne w tokenach lub trivia. Nie wszystkie węzły mają interesujące informacje semantyczne do sprawdzenia. Gdy węzeł nie ma interesujących informacji semantycznych, kliknij pozycję Widok * Symbol (jeśli istnieje) wyświetla pustą siatkę właściwości.

Więcej informacji na temat interfejsów API dotyczących przeprowadzania analizy semantycznej można przeczytać w dokumencie Omówienie pracy z semantykami .

Zamykanie wizualizatora składni

Możesz zamknąć okno wizualizatora, gdy nie używasz go do badania kodu źródłowego. Wizualizator składni aktualizuje jego wyświetlanie podczas przechodzenia przez kod, edytowanie i zmienianie źródła. Może to rozpraszać uwagę, gdy nie używasz go.