Share via


Utforska kod med Roslyn-syntaxvisualiseraren i Visual Studio

Den här artikeln innehåller en översikt över verktyget Syntax Visualizer som levereras som en del av .NET Compiler Platform ("Roslyn") SDK. Syntaxvisualiseraren är ett verktygsfönster som hjälper dig att inspektera och utforska syntaxträd. Det är ett viktigt verktyg för att förstå de modeller för kod som du vill analysera. Det är också ett felsökningshjälpmedel när du utvecklar egna program med hjälp av .NET Compiler Platform ("Roslyn") SDK. Öppna det här verktyget när du skapar dina första analysverktyg. Visualiseraren hjälper dig att förstå de modeller som används av API:erna. Du kan också använda verktyg som SharpLab eller LINQPad för att inspektera kod och förstå syntaxträd.

Installationsanvisningar – Installationsprogram för Visual Studio

Det finns två olika sätt att hitta .NET Compiler Platform SDK i Installationsprogrammet för Visual Studio:

Installera med hjälp av vyn Installationsprogram för Visual Studio – arbetsbelastningar

.NET Compiler Platform SDK väljs inte automatiskt som en del av arbetsbelastningen för Utveckling av Visual Studio-tillägg. Du måste välja den som en valfri komponent.

  1. Kör Installationsprogrammet för Visual Studio
  2. Välj Ändra
  3. Kontrollera arbetsbelastningen för Utveckling av Visual Studio-tillägg .
  4. Öppna noden för Visual Studio-tilläggsutveckling i sammanfattningsträdet.
  5. Markera kryssrutan för .NET Compiler Platform SDK. Du hittar den sist under de valfria komponenterna.

Du kan också vilja att DGML-redigeraren visar grafer i visualiseraren:

  1. Öppna noden Enskilda komponenter i sammanfattningsträdet.
  2. Markera kryssrutan för DGML-redigeraren

Installera med hjälp av fliken Installationsprogram för Visual Studio – enskilda komponenter

  1. Kör Installationsprogrammet för Visual Studio
  2. Välj Ändra
  3. Välj fliken Enskilda komponenter
  4. Markera kryssrutan för .NET Compiler Platform SDK. Du hittar den längst upp i avsnittet Kompilatorer, byggverktyg och körningsmiljöer .

Du kan också vilja att DGML-redigeraren visar grafer i visualiseraren:

  1. Markera kryssrutan för DGML-redigeraren. Du hittar den under avsnittet Kodverktyg .

Bekanta dig med de begrepp som används i .NET Compiler Platform SDK genom att läsa översiktsartikeln . Den ger en introduktion till syntaxträd, noder, token och trivia.

Syntaxvisualiserare

Syntaxvisualiseraren gör det möjligt att inspektera syntaxträdet för C#- eller Visual Basic-kodfilen i det aktuella aktiva redigeringsfönstret i Visual Studio IDE. Visualiseraren kan startas genom att klicka på Visa>annanWindows-syntaxvisualiserare>. Du kan också använda verktygsfältet Snabbstart i det övre högra hörnet. Skriv "syntax" så ska kommandot för att öppna syntaxvisualiseraren visas.

Det här kommandot öppnar syntaxvisualiseraren som ett flytande verktygsfönster. Om du inte har ett fönster för kodredigeraren öppet är visningen tom, som du ser i följande bild.

Verktygsfönstret syntaxvisualiserare

Docka det här verktygsfönstret på en lämplig plats i Visual Studio, till exempel på vänster sida. Visualiseraren visar information om den aktuella kodfilen.

Skapa ett nytt projekt med kommandot Arkiv>nytt projekt . Du kan skapa antingen ett Visual Basic- eller C#-projekt. När Visual Studio öppnar huvudkodfilen för det här projektet visar visualiseraren syntaxträdet för det. Du kan öppna en befintlig C#-/Visual Basic-fil i den här Visual Studio-instansen och visualiseraren visar filens syntaxträd. Om du har flera kodfiler öppna i Visual Studio visar visualiseraren syntaxträdet för den aktuella aktiva kodfilen (den kodfil som har tangentbordsfokus.)

Som du ser i föregående bilder visar visualiseringsverktygsfönstret syntaxträdet högst upp och ett egenskapsrutnät längst ned. Egenskapsrutnätet visar egenskaperna för det objekt som för närvarande är markerat i trädet, inklusive . NET-typ och Typ (SyntaxKind) för objektet.

Syntaxträd består av tre typer av objekt – noder, token och trivia. Du kan läsa mer om dessa typer i artikeln Arbeta med syntax . Objekt av varje typ representeras med olika färger. Klicka på knappen Förklaring för att få en översikt över de färger som används.

Varje objekt i trädet visar också sitt eget spann. Intervallet är indexen (start- och slutpositionen) för noden i textfilen. I föregående C#-exempel har den valda token "UsingKeyword [0..5)" ett spann som är fem tecken brett, [0..5). Notationen "[..)" innebär att startindexet är en del av intervallet, men det sista indexet är det inte.

Det finns två sätt att navigera i trädet:

  • Expandera eller klicka på objekt i trädet. Visualiseraren väljer automatiskt den text som motsvarar det här objektets intervall i kodredigeraren.
  • Klicka eller välj text i kodredigeraren. Om du i föregående Visual Basic-exempel väljer raden som innehåller Modulmodul1 i kodredigeraren navigerar visualiseraren automatiskt till motsvarande ModuleStatement-nod i trädet.

Visualiseraren markerar objektet i trädet vars intervall bäst matchar intervallet för den text som valts i redigeraren.

Visualiseraren uppdaterar trädet så att det matchar ändringarna i den aktiva kodfilen. Lägg till ett anrop i Console.WriteLine() inuti Main(). När du skriver uppdaterar visualiseraren trädet.

Pausa skrivningen när du har skrivit Console.. Trädet har vissa objekt färgade i rosa. I det här läget finns det fel (kallas även "Diagnostik") i den skrivna koden. Dessa fel är kopplade till noder, token och trivia i syntaxträdet. Visualiseraren visar vilka objekt som har fel kopplade till dem som visar bakgrunden i rosa. Du kan kontrollera felen på ett objekt som är rosafärgat genom att hovra över objektet. Visualiseraren visar endast syntaktiska fel (de fel som är relaterade till syntaxen för den typifierade koden); det inte visar några semantiska fel.

Syntaxdiagram

Högerklicka på ett objekt i trädet och klicka på Visa riktad syntaxdiagram.

Visualiseraren visar en grafisk representation av underträdet som är rotat på det valda objektet. Prova de här stegen för noden MethodDeclaration som motsvarar Main() metoden i C#-exemplet. Visualiseraren visar ett syntaxdiagram som ser ut så här:

Visa ett C#-syntaxdiagram

Visningsprogrammet för syntaxdiagram har ett alternativ för att visa en förklaring för dess färgschema. Du kan också hovra över enskilda objekt i syntaxdiagrammet med musen för att visa de egenskaper som motsvarar det objektet.

Du kan visa syntaxdiagram för olika objekt i trädet upprepade gånger och graferna visas alltid i samma fönster i Visual Studio. Du kan docka det här fönstret på en lämplig plats i Visual Studio så att du inte behöver växla mellan flikar för att visa ett nytt syntaxdiagram. Längst ned, under kodredigerarens fönster, är det ofta praktiskt.

Här är dockningslayouten som ska användas med visualiserarverktygets fönster och syntaxdiagramfönstret:

En dockningslayout för fönstret visualiserare och syntaxdiagram

Ett annat alternativ är att placera syntaxdiagramfönstret på en andra bildskärm, i en dubbel bildskärmskonfiguration.

Inspektera semantik

Syntaxvisualiseraren möjliggör rudimentär kontroll av symboler och semantisk information. Skriv double x = 1 + 1; i Main() i C#-exemplet. Välj sedan uttrycket 1 + 1 i kodredigerarens fönster. Visualiseraren markerar noden AddExpression i visualiseraren. Högerklicka på denna AddExpression och klicka på Visa symbol (om någon). Observera att de flesta menyalternativ har kvalificeraren "om någon". Syntaxvisualiseraren kontrollerar egenskaperna för en nod, inklusive egenskaper som kanske inte finns för alla noder.

Egenskapsrutnätet i visualiseraren uppdateras enligt följande bild: Symbolen för uttrycket är en SynthesizedIntrinsicOperatorSymbol med Kind = Method.

Symbolegenskaper i SyntaxVisualiserare

Prova Visa TypeSymbol (om det finns) för samma AddExpression-nod . Egenskapsrutnätet i visualiseraren uppdateras enligt följande bild, vilket indikerar att typen av det valda uttrycket är Int32.

TypeSymbol-egenskaper

Prova Visa konverterad TypeSymbol (om det finns) för samma AddExpression-nod . Egenskapsrutnätet uppdateras som anger att även om typen av uttryck är Int32, är Double den konverterade typen av uttrycket som visas i följande bild. Den här noden innehåller information om konverterad typsymbol eftersom Int32 uttrycket inträffar i en kontext där den måste konverteras till en Double. Den här konverteringen uppfyller den Double typ som angetts för variabeln x till vänster om tilldelningsoperatorn.

Konverterade TypeSymbol-egenskaper

Prova slutligen Visa konstant värde (om det finns) för samma AddExpression-nod . Egenskapsrutnätet visar att värdet för uttrycket är en kompileringstidskonstant med värdet 2.

Ett konstant värde

Föregående exempel kan också replikeras i Visual Basic. Skriv Dim x As Double = 1 + 1 in en Visual Basic-fil. Välj uttrycket 1 + 1 i kodredigerarens fönster. Visualiseraren markerar motsvarande AddExpression-nod i visualiseraren. Upprepa föregående steg för detta AddExpression så bör du se identiska resultat.

Granska mer kod i Visual Basic. Uppdatera visual basic-huvudfilen med följande kod:

Imports C = System.Console

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

Den här koden introducerar ett alias med namnet C som mappar till typen System.Console överst i filen och använder det här aliaset i Main(). Välj användning av det här aliaset C , i , C.WriteLine()inuti Main() -metoden. Visualiseraren väljer motsvarande IdentifierName-nod i visualiseraren. Högerklicka på den här noden och klicka på Visa symbol (om någon). Egenskapsrutnätet anger att den här identifieraren är bunden till typen System.Console enligt följande bild:

Egenskaper för symbolen C i Syntaxvisualiserare

Prova Att visa AliasSymbol (om det finns) för samma IdentifierName-nod . Egenskapsrutnätet anger att identifieraren är ett alias med ett namn C som är bundet System.Console till målet. Med andra ord innehåller egenskapsrutnätet information om aliassymbolen som motsvarar identifieraren C.

AliasSymbol-egenskaper

Granska symbolen som motsvarar en deklarerad typ, metod, egenskap. Välj motsvarande nod i visualiseraren och klicka på Visa symbol (om någon). Välj metoden Sub Main(), inklusive metodens brödtext. Klicka på Visa symbol (om någon) för motsvarande SubBlock-nod i visualiseraren. I egenskapsrutnätet visas MethodSymbol för det här SubBlock-namnetMain med returtypen Void.

Visningssymbol för en metoddeklaration

Visual Basic-exemplen ovan kan enkelt replikeras i C#. Skriv using C = System.Console; i stället Imports C = System.Console för aliaset. Föregående steg i C# ger identiska resultat i visualiseringsfönstret.

Semantiska inspektionsåtgärder är bara tillgängliga på noder. De är inte tillgängliga för token eller trivia. Alla noder har inte intressant semantisk information att inspektera. När en nod inte har intressant semantisk information visas ett tomt egenskapsrutnät genom att klicka på Visa * symbol (om någon).

Du kan läsa mer om API:er för att utföra semantisk analys i översiktsdokumentet Arbeta med semantik .

Stänga syntaxvisualiseraren

Du kan stänga visualiseringsfönstret när du inte använder det för att undersöka källkoden. Syntaxvisualiseraren uppdaterar sin visning när du navigerar genom kod, redigerar och ändrar källan. Det kan bli distraherande när du inte använder det.