Partilhar via


Explore o código com o visualizador de sintaxe Roslyn no Visual Studio

Este artigo fornece uma visão geral da ferramenta Visualizador de sintaxe que é fornecida como parte do SDK da plataforma de compilador .NET ("Roslyn"). O Visualizador de Sintaxe é uma janela de ferramenta que ajuda você a inspecionar e explorar árvores de sintaxe. É uma ferramenta essencial para entender os modelos de código que você deseja analisar. Também é um auxílio de depuração quando você desenvolve seus próprios aplicativos usando o SDK da plataforma de compilador .NET ("Roslyn"). Abra esta ferramenta ao criar seus primeiros analisadores. O visualizador ajuda você a entender os modelos usados pelas APIs. Você também pode usar ferramentas como SharpLab ou LINQPad para inspecionar o código e entender as árvores de sintaxe.

Instruções de instalação - Visual Studio Installer

Há duas maneiras diferentes de localizar o SDK da plataforma de compilador .NET no instalador do Visual Studio:

Instalar usando o Visual Studio Installer - modo de exibição Cargas de trabalho

O SDK da plataforma de compilador .NET não é selecionado automaticamente como parte da carga de trabalho de desenvolvimento de extensão do Visual Studio. Você deve selecioná-lo como um componente opcional.

  1. Executar o instalador do Visual Studio
  2. Selecione Modificar
  3. Verifique a tarefa de desenvolvimento de extensões do Visual Studio.
  4. Abra o nó de desenvolvimento de extensões do Visual Studio na estrutura de resumo.
  5. Marque a caixa de seleção para .NET Compiler Platform SDK. Você vai encontrá-lo por último sob os componentes opcionais.

Opcionalmente, você também desejará que o editor DGML exiba gráficos no visualizador:

  1. Abra o nó Componentes individuais na árvore de resumo.
  2. Marque a caixa para o editor DGML

Instalar usando o Visual Studio Installer - separador Componentes Individuais

  1. Executar o instalador do Visual Studio
  2. Selecione Modificar
  3. Selecione a guia Componentes individuais
  4. Marque a caixa de seleção para .NET Compiler Platform SDK. Você o encontrará na parte superior na seção Compiladores, ferramentas de compilação e tempos de execução .

Opcionalmente, você também desejará que o editor DGML exiba gráficos no visualizador:

  1. Assinale a caixa do editor DGML. Você vai encontrá-lo na seção Ferramentas de código .

Familiarize-se com os conceitos usados no .NET Compiler Platform SDK lendo o artigo de visão geral . Ele fornece uma introdução a árvores de sintaxe, nós, tokens e informações adicionais.

Visualizador de sintaxe

O Visualizador de Sintaxe permite a inspeção da árvore de sintaxe para o arquivo de código C# ou Visual Basic na janela atual do editor ativo dentro do IDE do Visual Studio. O visualizador pode ser iniciado clicando em Exibir>OutroVisualizador de Sintaxe do Windows>. Você também pode usar a barra de ferramentas 'Início Rápido' no canto superior direito. Digite "syntax" e o comando para abrir o Visualizador de Sintaxe deve aparecer.

Este comando abre o Visualizador de Sintaxe como uma janela de ferramenta flutuante. Se você não tiver uma janela do editor de código aberta, a exibição estará em branco, conforme mostrado na figura a seguir.

A janela da ferramenta Visualizador de Sintaxe

Encaixe essa janela de ferramenta em um local conveniente dentro do Visual Studio, como o lado esquerdo. O Visualizador mostra informações sobre o arquivo de código atual.

Crie um novo projeto usando o comando File>New Project . Você pode criar um projeto Visual Basic ou C#. Quando o Visual Studio abre o arquivo de código principal para este projeto, o visualizador exibe a árvore de sintaxe para ele. Você pode abrir qualquer arquivo C# / Visual Basic existente nesta instância do Visual Studio e o visualizador exibe a árvore de sintaxe desse arquivo. Se você tiver vários arquivos de código abertos dentro do Visual Studio, o visualizador exibirá a árvore de sintaxe para o arquivo de código atualmente ativo (o arquivo de código que tem foco no teclado.)

Como mostrado nas imagens anteriores, a janela da ferramenta do visualizador exibe a árvore de sintaxe na parte superior e uma grade de propriedades na parte inferior. A grade de propriedades exibe as propriedades do item atualmente selecionado na árvore, incluindo o Tipo .NET e o Tipo (SyntaxKind) do item.

As árvores de sintaxe compreendem três tipos de itens – nós, tokens e trivia. Você pode ler mais sobre esses tipos no artigo Trabalhar com sintaxe . Os itens de cada tipo são representados usando uma cor diferente. Clique no botão 'Legenda' para ter uma visão geral das cores utilizadas.

Cada item na árvore também exibe sua própria extensão. O intervalo são os índices (a posição inicial e final) desse nó no ficheiro de texto. No exemplo C# anterior, o token "UsingKeyword [0..5]" selecionado tem um Span com cinco caracteres de largura, [0..5]. A notação "[..)" significa que o índice inicial faz parte do alcance, mas o índice final não.

Há duas maneiras de navegar na árvore:

  • Expanda ou clique em itens na árvore. O visualizador seleciona automaticamente o texto correspondente à extensão deste item no editor de códigos.
  • Clique ou selecione o texto no editor de códigos. No exemplo anterior do Visual Basic, se você selecionar a linha que contém "Module Module1" no editor de código, o visualizador navegará automaticamente para o nó ModuleStatement correspondente na árvore.

O visualizador destaca o item na árvore cuja extensão melhor corresponde à extensão do texto selecionado no editor.

O visualizador atualiza a árvore para corresponder às modificações no arquivo de código ativo. Adicione uma chamada para Console.WriteLine() dentro do Main(). À medida que você digita, o visualizador atualiza a árvore.

Pause a digitação após ter digitado Console.. A árvore tem alguns itens coloridos em rosa. Neste ponto, há erros (também referidos como 'Diagnóstico') no código digitado. Esses erros são anexados a nós, tokens e curiosidades na árvore de sintaxe. O visualizador mostra quais itens têm erros anexados a eles, destacando o plano de fundo em rosa. Você pode inspecionar os erros em qualquer item colorido de rosa passando o mouse sobre o item. O visualizador exibe apenas erros sintáticos (aqueles erros relacionados à sintaxe do código digitado); ele não exibe nenhum erro semântico.

Gráficos de sintaxe

Clique com o botão direito do rato em qualquer item da árvore e clique em Ver Gráfico de Sintaxe Dirigida.

O visualizador exibe uma representação gráfica da subárvore enraizada no item selecionado. Tente estes passos para o nó MethodDeclaration correspondente ao Main() método num exemplo C#. O visualizador exibe um gráfico de sintaxe com a seguinte aparência:

Exibindo um gráfico de sintaxe C#

O visualizador de gráficos de sintaxe tem uma opção para exibir uma legenda para seu esquema de coloração. Você também pode passar o mouse sobre itens individuais no gráfico de sintaxe para exibir as propriedades correspondentes a esse item.

Você pode exibir gráficos de sintaxe para diferentes itens na árvore repetidamente e os gráficos sempre serão exibidos na mesma janela dentro do Visual Studio. Você pode encaixar essa janela em um local conveniente dentro do Visual Studio para que você não precise alternar entre guias para exibir um novo gráfico de sintaxe. A parte inferior, abaixo das janelas do editor de código, é muitas vezes conveniente.

Aqui está o layout de encaixe a utilizar com a janela de ferramentas do visualizador e a janela do gráfico de sintaxe.

Um layout de encaixe para a janela do visualizador e do gráfico de sintaxe

Outra opção é colocar a janela do gráfico de sintaxe em um segundo monitor, em uma configuração de monitor duplo.

Inspecionando a semântica

O Visualizador de Sintaxe permite a inspeção rudimentar de símbolos e informações semânticas. Digite double x = 1 + 1; dentro de Main() no exemplo C#. Em seguida, selecione a expressão 1 + 1 na janela do editor de código. O visualizador destaca o nó AddExpression no visualizador. Clique com o botão direito do mouse neste AddExpression e clique em Ver símbolo (se houver). Observe que a maioria dos itens de menu tem o qualificador "se houver". O Visualizador de Sintaxe inspeciona as propriedades de um Nó, incluindo propriedades que podem não estar presentes em todos os Nós.

A grade de propriedades no visualizador é atualizada conforme mostrado na figura a seguir: O símbolo para a expressão é um SynthesizedIntrinsicOperatorSymbol com Kind = Method.

Propriedades de símbolo no Visualizador de Sintaxe

Clique com o botão direito do mouse no mesmo nó AddExpression e selecione Visualizar TypeSymbol (se estiver disponível). A grade de propriedades no visualizador é atualizada conforme mostrado na figura a seguir, indicando que o tipo da expressão selecionada é Int32.

Propriedades do Símbolo de Tipo

Clique com o botão direito do mouse no mesmo nó AddExpression e selecione Ver Símbolo de Tipo Convertido (se houver). A grade de propriedades é atualizada indicando que, embora o tipo da expressão seja Int32, o tipo convertido da expressão é Double conforme mostrado na figura a seguir. Este nó inclui informações de símbolo de tipo convertidas porque a expressão Int32 ocorre num contexto onde deve ser convertida para um Double. Esta conversão satisfaz o tipo Double especificado para a variável x no lado esquerdo do operador de atribuição.

Propriedades

Por fim, clique com o botão direito do mouse no mesmo nó AddExpression e selecione Exibir valor constante (se houver). A grade de propriedades mostra que o valor da expressão é uma constante de tempo de compilação com valor 2.

Um valor constante

O exemplo anterior também pode ser replicado no Visual Basic. Digite Dim x As Double = 1 + 1 num ficheiro do Visual Basic. Selecione a expressão 1 + 1 na janela do editor de código. O visualizador destaca o nó AddExpression correspondente no visualizador. Repita as etapas anteriores para este AddExpression e você verá resultados idênticos.

Examine mais código no Visual Basic. Atualize seu arquivo principal do Visual Basic com o seguinte código:

Imports C = System.Console

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

Esse código introduz um alias chamado C que mapeia para o tipo System.Console na parte superior do ficheiro e usa esse alias dentro de Main(). Selecione o uso deste alias, C em C.WriteLine(), dentro do Main() método. O visualizador seleciona o nó IdentifierName correspondente no visualizador. Clique com o botão direito do rato neste nó e clique em Ver Símbolo (se existir). A grade de propriedades indica que esse identificador está vinculado ao tipo System.Console , conforme mostrado na figura a seguir:

Propriedades do símbolo C no Visualizador de Sintaxe

Clique com o botão direito do mouse no mesmo nó IdentifierName e selecione View AliasSymbol (se houver). A grade de propriedades indica que o identificador é um alias com nome C vinculado ao System.Console destino. Em outras palavras, a grade de propriedades fornece informações sobre o AliasSymbol correspondente ao identificador C.

Propriedades de AliasSymbol

Inspecione o símbolo correspondente a qualquer tipo, método ou propriedade declarado. Selecione o nó correspondente no visualizador e clique com o botão direito do mouse para acessar o Símbolo de exibição (se houver). Selecione o método Sub Main(), incluindo o corpo do método. Clique com o botão direito do mouse no nó SubBlock correspondente no visualizador e selecione Visualizar símbolo (se houver). A grade de propriedades mostra que o MethodSymbol para este SubBlock possui o nome Main com tipo de retorno Void.

Exibindo símbolo para uma declaração de método

Os exemplos do Visual Basic acima podem ser facilmente replicados em C#. Digite using C = System.Console; no lugar de Imports C = System.Console como alias. As etapas anteriores em C# produzem resultados idênticos na janela do visualizador.

As operações de inspeção semântica só estão disponíveis em nós. Eles não estão disponíveis em tokens ou curiosidades. Nem todos os nós têm informações semânticas interessantes para inspecionar. Quando um nó não tem informações semânticas interessantes, clicar com o botão direito do mouse e selecionar Exibir * Símbolo (se houver) mostra uma grade de propriedades em branco.

Você pode ler mais sobre APIs para executar análise semântica no documento Visão geral do trabalho com semântica .

Fechando o visualizador de sintaxe

Você pode fechar a janela do visualizador quando não estiver usando-a para examinar o código-fonte. O visualizador de sintaxe atualiza sua exibição à medida que você navega pelo código, editando e alterando a fonte. Pode ser distrativo quando não está em uso.