Explorar código com o visualizador de sintaxe Roslyn no Visual Studio
Este artigo fornece uma descrição geral da ferramenta de Visualização de Sintaxe que é fornecida como parte do SDK da Plataforma de Compilador do .NET ("Roslyn"). O Visualizador de Sintaxe é uma janela de ferramentas que o ajuda a inspecionar e explorar árvores de sintaxe. É uma ferramenta essencial para compreender os modelos de código que pretende analisar. Também é uma ajuda de depuração quando desenvolve as suas próprias aplicações com o SDK de Plataforma de Compilação do .NET ("Roslyn"). Abra esta ferramenta à medida que cria os seus primeiros analisadores. O visualizador ajuda-o a compreender os modelos utilizados pelas APIs. Também pode utilizar ferramentas como o SharpLab ou o LINQPad para inspecionar o código e compreender as sintaxes.
Instruções de instalação – Instalador do Visual Studio
Existem duas formas diferentes de encontrar o SDK de Plataforma do Compilador .NET no Instalador do Visual Studio:
Instalar com a vista Instalador do Visual Studio – Cargas de trabalho
O SDK da Plataforma de Compilador .NET não é selecionado automaticamente como parte da carga de trabalho de desenvolvimento da extensão do Visual Studio. Tem de selecioná-lo como um componente opcional.
- Executar o Instalador do Visual Studio
- Selecione Modificar
- Verifique a carga de trabalho de desenvolvimento da extensão do Visual Studio .
- Abra o nó de desenvolvimento da extensão do Visual Studio na árvore de resumo.
- Selecione a caixa do SDK de Plataforma do Compilador .NET. Irá encontrá-lo em último nos componentes opcionais.
Opcionalmente, também vai querer que o editor de DGML apresente gráficos no visualizador:
- Abra o nó Componentes individuais na árvore de resumo.
- Selecione a caixa do editor DGML
Instalar com o Instalador do Visual Studio – separador Componentes individuais
- Executar o Instalador do Visual Studio
- Selecione Modificar
- Selecione o separador Componentes individuais
- Selecione a caixa do SDK de Plataforma do Compilador .NET. Irá encontrá-la na parte superior na secção Compiladores, ferramentas de compilação e runtimes .
Opcionalmente, também vai querer que o editor de DGML apresente gráficos no visualizador:
- Selecione a caixa do editor DGML. Irá encontrá-lo na secção Ferramentas de código .
Familiarize-se com os conceitos utilizados no SDK da Plataforma de Compilador .NET ao ler o artigo de descrição geral . Fornece uma introdução às sintaxes, nós, tokens e trivialidades.
Visualizador de Sintaxe
O Visualizador de Sintaxe permite a inspeção da árvore de sintaxe para o ficheiro de código C# ou Visual Basic na janela atual do editor ativo no IDE do Visual Studio. O visualizador pode ser iniciado ao clicar em Ver> OutroVisualizador de Sintaxe doWindows>. Também pode utilizar a barra de ferramentas iniciação rápida no canto superior direito. Escreva "sintaxe" e o comando para abrir o Visualizador de Sintaxe deverá aparecer.
Este comando abre o Visualizador de Sintaxe como uma janela de ferramenta flutuante. Se não tiver uma janela do editor de código aberta, o ecrã estará em branco, conforme mostrado na figura seguinte.
Ancore esta janela de ferramentas numa localização conveniente dentro do Visual Studio, como o lado esquerdo. O Visualizador mostra informações sobre o ficheiro de código atual.
Crie um novo projeto com o comando Ficheiro>Novo Projeto . Pode criar um projeto do Visual Basic ou C#. Quando o Visual Studio abre o ficheiro de código principal para este projeto, o visualizador apresenta a árvore de sintaxe do mesmo. Pode abrir qualquer ficheiro C#/Visual Basic existente nesta instância do Visual Studio e o visualizador apresenta a árvore de sintaxe desse ficheiro. Se tiver múltiplos ficheiros de código abertos no Visual Studio, o visualizador apresenta a árvore de sintaxe do ficheiro de código atualmente ativo (o ficheiro de código que tem o foco do teclado).)
Conforme mostrado nas imagens anteriores, a janela da ferramenta de visualização apresenta a árvore de sintaxe na parte superior e uma grelha de propriedades na parte inferior. A grelha de propriedades apresenta as propriedades do item atualmente selecionado na árvore, incluindo o Tipo .NET e o Tipo (SintaxKind) do item.
As árvores de sintaxe incluem três tipos de itens : nós, tokens e trivialidades. Pode ler mais sobre estes tipos no artigo Trabalhar com sintaxe . Os itens de cada tipo são representados com uma cor diferente. Clique no botão "Legenda" para obter uma descrição geral das cores utilizadas.
Cada item na árvore também apresenta o seu próprio intervalo. O intervalo são os índices (a posição inicial e final) desse nó no ficheiro de texto. No exemplo de C# anterior, o token "UsingKeyword [0..5)" selecionado tem um Span com cinco carateres de largura, [0..5). A notação "[..)" significa que o índice inicial faz parte do intervalo, mas o índice final não.
Existem duas formas de navegar na árvore:
- Expanda ou clique em itens na árvore. O visualizador seleciona automaticamente o texto correspondente ao intervalo deste item no editor de código.
- Clique ou selecione texto no editor de código. No exemplo anterior do Visual Basic, se selecionar a linha que contém "Módulo Módulo1" no editor de código, o visualizador navega automaticamente para o nó ModuleStatement correspondente na árvore.
O visualizador realça o item na árvore cujo intervalo corresponde melhor ao intervalo do texto selecionado no editor.
O visualizador atualiza a árvore para corresponder às modificações no ficheiro de código ativo. Adicione uma chamada a Console.WriteLine()
dentro Main()
de . À medida que escreve, o visualizador atualiza a árvore.
Coloque a escrita em pausa depois de escrever Console.
. A árvore tem alguns itens coloridos em rosa. Neste momento, existem erros (também conhecidos como "Diagnósticos") no código escrito. Estes erros estão ligados a nós, tokens e trivialidades na árvore de sintaxe. O visualizador mostra-lhe que itens têm erros ligados aos mesmos, realçando o fundo em cor-de-rosa. Pode inspecionar os erros em qualquer item cor de rosa ao pairar sobre o item. O visualizador apenas apresenta erros sintáticos (esses erros relacionados com a sintaxe do código escrito); não apresenta erros semânticos.
Gráficos de Sintaxe
Clique com o botão direito do rato em qualquer item na árvore e clique em Ver Gráfico de Sintaxe Direcionada.
O visualizador apresenta uma representação gráfica da subárvore com root no item selecionado. Experimente estes passos para o nó MethodDeclaration correspondente ao Main()
método no exemplo de C#. O visualizador apresenta um gráfico de sintaxe com o seguinte aspeto:
O visualizador de grafos de sintaxe tem a opção de apresentar uma legenda para o respetivo esquema de coloração. Também pode pairar o cursor sobre itens individuais no gráfico de sintaxe com o rato para ver as propriedades correspondentes a esse item.
Pode ver gráficos de sintaxe para diferentes itens na árvore repetidamente e os gráficos serão sempre apresentados na mesma janela dentro do Visual Studio. Pode ancorar esta janela numa localização conveniente dentro do Visual Studio para que não tenha de alternar entre separadores para ver um novo gráfico de sintaxe. A parte inferior, abaixo das janelas do editor de código, é frequentemente conveniente.
Eis o esquema de ancoragem a utilizar com a janela da ferramenta de visualização e a janela do gráfico de sintaxe:
Outra opção é colocar a janela do gráfico de sintaxe num segundo monitor, numa configuração de monitor duplo.
Inspecionar semântica
O Visualizador de Sintaxe permite a inspeção rudimentar de símbolos e informações semânticas. Escreva double x = 1 + 1;
dentro de Main() no exemplo de C#. Em seguida, selecione a expressão 1 + 1
na janela do editor de código. O visualizador realça o nó AddExpression no visualizador. Clique com o botão direito do rato nesta AddExpression e clique em Ver Símbolo (se existir). Repare que a maioria dos itens de menu tem o qualificador "se existir". O Visualizador de Sintaxe inspeciona as propriedades de um Nó, incluindo propriedades que podem não estar presentes para todos os nós.
A grelha de propriedades no visualizador é atualizada conforme mostrado na figura seguinte: o símbolo para a expressão é um SynthesizedIntrinsicOperatorSymbol com Kind = Method.
Experimente Ver TypeSymbol (se existir) para o mesmo nó AddExpression . A grelha de propriedades no visualizador é atualizada conforme mostrado na figura seguinte, indicando que o tipo da expressão selecionada é Int32
.
Experimente Ver TypeSymbol Convertido (se existir) para o mesmo nó AddExpression . A grelha de propriedades é atualizada indicando que, embora o tipo da expressão seja Int32
, o tipo convertido da expressão é Double
conforme mostrado na figura seguinte. Este nó inclui informações de símbolo de tipo convertido porque a Int32
expressão ocorre num contexto em que tem de ser convertida num Double
. Esta conversão satisfaz o Double
tipo especificado para a variável x
no lado esquerdo do operador de atribuição.
Por fim, experimente Ver Valor Constante (se existir) para o mesmo nó AddExpression . A grelha de propriedades mostra que o valor da expressão é uma constante de tempo de compilação com o valor 2
.
O exemplo anterior também pode ser replicado no Visual Basic. Escreva Dim x As Double = 1 + 1
um ficheiro do Visual Basic. Selecione a expressão 1 + 1
na janela do editor de código. O visualizador realça o nó AddExpression correspondente no visualizador. Repita os passos anteriores para esta AddExpression e deverá ver resultados idênticos.
Examine mais código no Visual Basic. Atualize o ficheiro 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
Este código introduz um alias com o nome C
que mapeia para o tipo System.Console
na parte superior do ficheiro e utiliza este alias dentro Main()
de . Selecione a utilização deste alias, em C
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 grelha de propriedades indica que este identificador está vinculado ao tipo System.Console
, conforme mostrado na figura seguinte:
Experimente Ver AliasSymbol (se existir) para o mesmo nó IdentifierName . A grelha de propriedades indica que o identificador é um alias com um nome C
vinculado ao System.Console
destino. Por outras palavras, a grelha de propriedades fornece informações sobre o AliasSymbol correspondente ao identificador C
.
Inspecione o símbolo correspondente a qualquer tipo declarado, método, propriedade. Selecione o nó correspondente no visualizador e clique em Ver Símbolo (se existir). Selecione o método Sub Main()
, incluindo o corpo do método . Clique em Ver Símbolo (se existir) para o nó SubBlock correspondente no visualizador. A grelha de propriedades mostra que MethodSymbol para este SubBlock tem o nome Main
com o tipo de Void
retorno .
Os exemplos do Visual Basic acima podem ser facilmente replicados em C#. Escreva using C = System.Console;
em vez de Imports C = System.Console
para o alias. Os passos anteriores em C# produzem resultados idênticos na janela de visualização.
As operações de inspeção semântica só estão disponíveis em nós. Não estão disponíveis em tokens ou trivialidades. 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 em Ver * Símbolo (se existir) mostra uma grelha de propriedades em branco.
Pode ler mais sobre as APIs para realizar análises semânticas no documento Descrição geral do trabalho com semântica .
Fechar o visualizador de sintaxe
Pode fechar a janela do visualizador quando não estiver a utilizá-la para examinar o código fonte. O visualizador de sintaxe atualiza o respetivo ecrã à medida que navega pelo código, editando e alterando a origem. Pode distrair-se quando não está a utilizá-lo.