Condividi tramite


Esplorare il codice con il visualizzatore di sintassi Roslyn in Visual Studio

Questo articolo offre una panoramica dello strumento Visualizzatore di sintassi fornito come parte dell'SDK della piattaforma del compilatore .NET ("Roslyn"). Il visualizzatore di sintassi è una finestra degli strumenti che consente di esaminare ed esplorare gli alberi della sintassi. È uno strumento essenziale per comprendere i modelli per il codice da analizzare. È anche un supporto per il debug quando si sviluppano applicazioni personalizzate usando .NET Compiler Platform ("Roslyn") SDK. Aprire questo strumento durante la creazione dei primi analizzatori. Il visualizzatore consente di comprendere i modelli usati dalle API. È anche possibile usare strumenti come SharpLab o LINQPad per esaminare il codice e comprendere gli alberi della sintassi.

Istruzioni di installazione - Programma di installazione di Visual Studio

Esistono due modi diversi per trovare .NET Compiler Platform SDK nel programma di installazione di Visual Studio:

Eseguire l'installazione con il programma di installazione di Visual Studio - Visualizzazione Carichi di lavoro

Il .NET Compiler Platform SDK non viene selezionato automaticamente come parte del carico di lavoro per lo sviluppo di estensioni di Visual Studio. È necessario selezionarlo come componente facoltativo.

  1. Eseguire il programma di installazione di Visual Studio
  2. Selezionare Modifica
  3. Controllare il carico di lavoro sviluppo delle estensioni di Visual Studio .
  4. Aprire il nodo di sviluppo dell'estensione di Visual Studio nell'albero di riepilogo.
  5. Selezionare la casella .NET Compiler Platform SDK. Lo troverai per ultimo sotto i componenti facoltativi.

Facoltativamente, è anche necessario che l'editor DGML visualizzi i grafici nel visualizzatore:

  1. Aprire il nodo Singoli componenti nell'albero di riepilogo.
  2. Selezionare la casella per l'editor DGML

Eseguire l'installazione usando la scheda Programma di installazione di Visual Studio - Singoli componenti

  1. Eseguire il programma di installazione di Visual Studio
  2. Selezionare Modifica
  3. Selezionare la scheda Singoli componenti
  4. Selezionare la casella .NET Compiler Platform SDK. È disponibile nella parte superiore della sezione Compilatori, strumenti di compilazione e runtime .

Facoltativamente, è anche necessario che l'editor DGML visualizzi i grafici nel visualizzatore:

  1. Selezionare la casella per l'editor DGML. È disponibile nella sezione Strumenti di codice .

Acquisire familiarità con i concetti usati in .NET Compiler Platform SDK leggendo l'articolo di panoramica . Fornisce un'introduzione agli alberi della sintassi, ai nodi, ai token e agli elementi semplici.

Visualizzatore di sintassi

Il visualizzatore di sintassi consente di esaminare l'albero della sintassi per il file di codice C# o Visual Basic nella finestra dell'editor attivo corrente all'interno dell'IDE di Visual Studio. Il visualizzatore può essere avviato facendo clic su Visualizza>Altre finestre>Visualizzatore di sintassi. È anche possibile usare la barra degli strumenti Avvio veloce nell'angolo superiore destro. Digitare "sintassi" e verrà visualizzato il comando per aprire il visualizzatore di sintassi .

Questo comando apre il visualizzatore di sintassi come finestra degli strumenti mobile. Se non è aperta una finestra dell'editor di codice, la visualizzazione è vuota, come illustrato nella figura seguente.

Finestra dello strumento Visualizzatore di sintassi

Fissare questa finestra degli strumenti in una posizione comoda all'interno di Visual Studio, ad esempio sul lato sinistro. Il visualizzatore mostra informazioni sul file di codice corrente.

Creare un nuovo progetto usando il comando File New Project .Create a new project using the File>New Project command. È possibile creare un progetto Visual Basic o C#. Quando Visual Studio apre il file di codice principale per questo progetto, il visualizzatore visualizza l'albero della sintassi. È possibile aprire qualsiasi file C#/Visual Basic esistente in questa istanza di Visual Studio e il visualizzatore visualizza l'albero della sintassi del file. Se sono aperti più file di codice all'interno di Visual Studio, il visualizzatore visualizza l'albero della sintassi per il file di codice attualmente attivo(il file di codice con lo stato attivo della tastiera).

Come illustrato nelle immagini precedenti, la finestra degli strumenti del visualizzatore visualizza l'albero della sintassi nella parte superiore e una griglia delle proprietà nella parte inferiore. Nella griglia delle proprietà vengono visualizzate le proprietà dell'elemento attualmente selezionato nell'albero, inclusi il tipo .NET e il tipo (SyntaxKind) dell'elemento.

Gli alberi della sintassi includono tre tipi di elementi: nodi, token e semplicità. Per altre informazioni su questi tipi, vedere l'articolo Usare la sintassi . Gli elementi di ogni tipo sono rappresentati utilizzando un colore diverso. Fare clic sul pulsante "Legenda" per una panoramica dei colori usati.

Ogni elemento dell'albero visualizza anche il proprio intervallo. L'intervallo è costituito dagli indici (la posizione iniziale e finale) del nodo nel file di testo. Nell'esempio C# precedente, il token "UsingKeyword [0..5)" selezionato ha un valore Span largo cinque caratteri[ 0..5). La notazione "[..)" indica che l'indice iniziale fa parte dell'intervallo, ma l'indice finale non è.

Esistono due modi per spostarsi nell'albero:

  • Espandere o fare clic sugli elementi nell'albero. Il visualizzatore seleziona automaticamente il testo corrispondente all'intervallo di questo elemento nell'editor di codice.
  • Fare clic o selezionare il testo nell'editor di codice. Nell'esempio precedente di Visual Basic, se si seleziona la riga contenente "Module Module1" nell'editor di codice, il visualizzatore passa automaticamente al nodo ModuleStatement corrispondente nell'albero.

Il visualizzatore evidenzia l'elemento nell'albero il cui intervallo corrisponde meglio all'intervallo del testo selezionato nell'editor.

Il visualizzatore aggiorna l'albero in modo che corrisponda alle modifiche nel file di codice attivo. Aggiungere una chiamata a Console.WriteLine() all'interno di Main(). Durante la digitazione, il visualizzatore aggiorna l'albero.

Sospendere la digitazione dopo aver digitato Console.. L'albero ha alcuni elementi colorati in rosa. A questo punto, nel codice tipizzato sono presenti errori (detti anche "Diagnostica". Questi errori vengono collegati a nodi, token e dettagli nell'albero della sintassi. Il visualizzatore mostra quali elementi hanno errori associati a essi evidenziando lo sfondo in rosa. È possibile controllare gli errori su qualsiasi elemento colorato rosa passando il puntatore del mouse sull'elemento. Il visualizzatore visualizza solo gli errori sintattici (quelli correlati alla sintassi del codice tipizzato); non visualizza errori semantici.

Grafici della sintassi

Fare clic con il pulsante destro del mouse su qualsiasi elemento nell'albero e fare clic su Visualizza grafico sintassi diretta.

Il visualizzatore mostra una rappresentazione grafica del sottoalbero radicato nell'elemento selezionato. Provare questi passaggi per il nodo MethodDeclaration corrispondente al Main() metodo nell'esempio C#. Il visualizzatore visualizza un grafico della sintassi simile al seguente:

Visualizzazione di un grafico della sintassi C#

Il visualizzatore grafico della sintassi offre un'opzione per visualizzare una legenda per la combinazione di colori. È anche possibile passare il puntatore del mouse sui singoli elementi nel grafico della sintassi per visualizzare le proprietà corrispondenti all'elemento.

È possibile visualizzare i grafici della sintassi per elementi diversi nell'albero ripetutamente e i grafici verranno sempre visualizzati nella stessa finestra all'interno di Visual Studio. È possibile ancorare questa finestra in una posizione comoda all'interno di Visual Studio in modo che non sia necessario passare da una scheda all'altra per visualizzare un nuovo grafico della sintassi. La parte inferiore, sotto le finestre dell'editor di codice, è spesso utile.

Ecco il layout di ancoraggio da usare con la finestra degli strumenti del visualizzatore e la finestra del grafico della sintassi:

Un layout di ancoraggio per il visualizzatore e la finestra del grafico della sintassi

Un'altra opzione consiste nell'inserire la finestra del grafico della sintassi in un secondo monitor, in una configurazione a doppio monitor.

Controllo della semantica

Il visualizzatore di sintassi consente l'ispezione rudimentale dei simboli e delle informazioni semantiche. Digitare double x = 1 + 1; all'interno di Main() nell'esempio C#. Selezionare quindi l'espressione 1 + 1 nella finestra dell'editor di codice. Il visualizzatore evidenzia il nodo AddExpression nel visualizzatore. Fare clic con il pulsante destro del mouse su addExpression e scegliere Visualizza simbolo (se presente). Si noti che la maggior parte delle voci di menu ha il qualificatore "if any". Il visualizzatore di sintassi controlla le proprietà di un nodo, incluse le proprietà che potrebbero non essere presenti per tutti i nodi.

La griglia delle proprietà nel visualizzatore viene aggiornata come illustrato nella figura seguente: il simbolo per l'espressione è SynthesizedIntrinsicOperatorSymbol con Kind = Method.

Proprietà dei simboli nel visualizzatore di sintassi

Fare clic con il pulsante destro del mouse sullo stesso nodo AddExpression e selezionare Visualizza tipoSymbol (se presente). La griglia delle proprietà nel visualizzatore viene aggiornata come illustrato nella figura seguente, a indicare che il tipo dell'espressione selezionata è Int32.

Proprietà TypeSymbol

Fare clic con il pulsante destro del mouse sullo stesso nodo AddExpression e scegliere Visualizza TypeSymbol convertito (se presente). La griglia delle proprietà viene aggiornata a indicare che, anche se il tipo dell'espressione è Int32, il tipo convertito dell'espressione è Double come illustrato nella figura seguente. Questo nodo include informazioni sul simbolo del tipo convertito perché l'espressione Int32 si verifica in un contesto in cui deve essere convertita in un oggetto Double. Questa conversione soddisfa il Double tipo specificato per la variabile x sul lato sinistro dell'operatore di assegnazione.

Proprietà convertite del TypeSymbol

Infine, fare clic con il pulsante destro del mouse sullo stesso nodo AddExpression e selezionare Visualizza valore costante (se presente). La griglia delle proprietà mostra che il valore dell'espressione è una costante in fase di compilazione con valore 2.

Valore costante

L'esempio precedente può anche essere replicato in Visual Basic. Digitare Dim x As Double = 1 + 1 in un file di Visual Basic. Selezionare l'espressione 1 + 1 nella finestra dell'editor di codice. Il visualizzatore evidenzia il nodo AddExpression corrispondente nel visualizzatore. Ripetere i passaggi precedenti per questo addExpression e verranno visualizzati risultati identici.

Esaminare più codice in Visual Basic. Aggiornare il file visual Basic principale con il codice seguente:

Imports C = System.Console

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

Questo codice introduce un alias chiamato C che mappa al tipo System.Console all'inizio del file e usa questo alias all'interno di Main(). Selezionare l'uso di questo alias, il C in C.WriteLine(), nel metodo Main(). Il visualizzatore seleziona il nodo IdentifierName corrispondente nel visualizzatore. Fare clic con il pulsante destro del mouse su questo nodo e scegliere Visualizza simbolo (se presente). La griglia delle proprietà indica che questo identificatore è associato al tipo System.Console , come illustrato nella figura seguente:

Proprietà per il simbolo C nel visualizzatore di sintassi

Fare clic con il pulsante destro del mouse sullo stesso nodo IdentifierName e scegliere Visualizza aliasSymbol (se presente). La griglia delle proprietà indica che l'identificatore è un alias con nome C associato alla System.Console destinazione. In altre parole, la griglia delle proprietà fornisce informazioni relative all'aliasSymbol corrispondente all'identificatore C.

Proprietà di Alias Symbol

Esaminare il simbolo corrispondente a qualsiasi tipo, metodo, proprietà dichiarato. Selezionare il nodo corrispondente nel visualizzatore e fare clic con il pulsante destro del mouse per accedere al simbolo di visualizzazione (se presente). Selezionare il metodo Sub Main(), incluso il corpo del metodo . Fare clic con il pulsante destro del mouse sul nodo SubBlock corrispondente nel visualizzatore e selezionare Visualizza simbolo (se presente). La griglia delle proprietà mostra il MethodSymbol per questo SubBlock ha il nome Main con tipo restituito Void.

Visualizzazione del simbolo per una dichiarazione di metodo

Gli esempi di Visual Basic precedenti possono essere facilmente replicati in C#. Digitare using C = System.Console; al posto di Imports C = System.Console per l'alias. I passaggi precedenti in C# producono risultati identici nella finestra del visualizzatore.

Le operazioni di ispezione semantica sono disponibili solo nei nodi. Non sono disponibili nei token o nei trivia. Non tutti i nodi hanno informazioni semantiche interessanti da esaminare. Quando un nodo non dispone di informazioni semantiche interessanti, fare clic con il pulsante destro del mouse e scegliere Visualizza * Simbolo (se disponibile) mostra una griglia delle proprietà vuota.

Per altre informazioni sulle API per l'esecuzione dell'analisi semantica, vedere il documento Di panoramica sull'uso della semantica .

Chiusura del visualizzatore di sintassi

È possibile chiudere la finestra del visualizzatore quando non viene usata per esaminare il codice sorgente. Il visualizzatore di sintassi aggiorna la visualizzazione mentre navighi attraverso il codice, modificandolo e cambiando l'origine. Può distrarre quando non lo usi.