Compartir a través de


Exploración del código con el visualizador de sintaxis de Roslyn en Visual Studio

En este artículo se proporciona información general sobre la herramienta De visualizador de sintaxis que se incluye como parte del SDK de .NET Compiler Platform ("Roslyn"). El Visualizador de sintaxis es una ventana de herramientas que le ayuda a inspeccionar y explorar árboles de sintaxis. Es una herramienta esencial para comprender los modelos para el código que desea analizar. También es útil para la depuración al desarrollar sus propias aplicaciones con el SDK de .NET Compiler Platform (“Roslyn”). Abra esta herramienta a medida que cree los primeros analizadores. El visualizador le ayuda a comprender los modelos usados por las API. También puede usar herramientas como SharpLab o LINQPad para inspeccionar el código y comprender los árboles de sintaxis.

Instrucciones de instalación: Instalador de Visual Studio

Hay dos maneras diferentes de encontrar el SDK de .NET Compiler Platform en el Instalador de Visual Studio:

Instalación mediante el Instalador de Visual Studio: vista Cargas de trabajo

El SDK de .NET Compiler Platform no se selecciona automáticamente como parte del conjunto de herramientas de desarrollo de extensiones de Visual Studio. Deba seleccionarlo como un componente opcional.

  1. Ejecución del instalador de Visual Studio
  2. Selección de Modificar
  3. Active la carga de trabajo Desarrollo de extensiones de Visual Studio.
  4. Abra el nodo desarrollo de extensiones de Visual Studio en el árbol de resumen.
  5. Marque la casilla para .NET Compiler Platform SDK. Lo encontrará en último lugar en los componentes opcionales.

Opcionalmente, también querrá que el editor DGML muestre gráficos en el visualizador:

  1. Abra el nodo Componentes individuales en el árbol de resumen.
  2. Active la casilla Editor de DGML.

Instalación mediante la pestaña Instalador de Visual Studio: componentes individuales

  1. Ejecución del instalador de Visual Studio
  2. Selección de Modificar
  3. Seleccione la pestaña Componentes individuales.
  4. Marque la casilla para .NET Compiler Platform SDK. Lo encontrará en la parte superior de la sección Compiladores, herramientas de compilación y entornos de ejecución .

Opcionalmente, también querrá que el editor DGML muestre gráficos en el visualizador:

  1. Active la casilla Editor de DGML. La encontrará en la sección Herramientas de código .

Familiarícese con los conceptos usados en el SDK de .NET Compiler Platform mediante la lectura del artículo de información general . Proporciona una introducción a los árboles de sintaxis, los nodos, los tokens y la trivia.

Visualizador de sintaxis

El Visualizador de sintaxis habilita la inspección del árbol de sintaxis del archivo de código de C# o Visual Basic en la ventana actual del editor activo dentro del IDE de Visual Studio. Para iniciar el visualizador, haga clic en Ver>Otros Windows>Visualizador de Sintaxis. También puede usar la barra de herramientas Inicio rápido en la esquina superior derecha. Escriba "sintaxis" y el comando para abrir el visualizador de sintaxis debería aparecer.

Este comando abre el visualizador de sintaxis como una ventana de herramientas flotante. Si no tiene abierta una ventana del editor de código, la pantalla está en blanco, como se muestra en la ilustración siguiente.

Ventana de herramientas del visualizador de sintaxis

Acopla esta ventana de herramientas en una ubicación cómoda dentro de Visual Studio, como el lado izquierdo. El visualizador muestra información sobre el archivo de código actual.

Cree un nuevo proyecto con el comando Archivo>nuevo proyecto . Puede crear un proyecto de Visual Basic o C#. Cuando Visual Studio abre el archivo de código principal de este proyecto, el visualizador muestra el árbol de sintaxis para él. Puede abrir cualquier archivo de C# o Visual Basic existente en esta instancia de Visual Studio y el visualizador muestra el árbol de sintaxis del archivo. Si tiene varios archivos de código abiertos dentro de Visual Studio, el visualizador muestra el árbol de sintaxis para el archivo de código activo actualmente (el archivo de código que tiene el foco del teclado).

Como se muestra en las imágenes anteriores, la ventana de herramientas del visualizador muestra el árbol de sintaxis en la parte superior y una cuadrícula de propiedades en la parte inferior. La cuadrícula de propiedades muestra las propiedades del elemento que está seleccionado actualmente en el árbol, incluido el Type de .NET y el Kind (SyntaxKind) del elemento.

Los árboles de sintaxis componen tres tipos de elementos: nodos, tokens y trivia. Puede obtener más información sobre estos tipos en el artículo Trabajar con sintaxis . Los elementos de cada tipo se representan con un color diferente. Haga clic en el botón "Leyenda" para obtener información general sobre los colores usados.

Cada elemento del árbol también muestra su propio intervalo. El intervalo está comprendido por los índices (la posición inicial y la final) de ese nodo en el archivo de texto. En el ejemplo de C# anterior, el token "UsingKeyword [0..5)" seleccionado tiene un intervalo de cinco caracteres de ancho, [0..5). La notación "[..)" significa que el índice inicial forma parte del intervalo, pero el índice final no lo es.

Hay dos maneras de navegar por el árbol:

  • Expanda o haga clic en los elementos del árbol. El visualizador selecciona automáticamente el texto correspondiente al intervalo de este elemento en el editor de código.
  • Haga clic o seleccione texto en el editor de código. En el ejemplo anterior de Visual Basic, si selecciona la línea que contiene "Module Module1" en el editor de código, el visualizador navega automáticamente al nodo ModuleStatement correspondiente en el árbol.

El visualizador resalta el elemento del árbol cuyo intervalo coincide mejor con el intervalo del texto seleccionado en el editor.

El visualizador actualiza el árbol para que coincida con las modificaciones del archivo de código activo. Agregue una llamada a Console.WriteLine() dentro de Main(). A medida que escribe, el visualizador actualiza el árbol.

Pause la escritura una vez que haya escrito Console.. El árbol tiene algunos elementos coloreados en rosa. Actualmente, hay errores (también denominados "diagnósticos") en el código escrito. Estos errores se adjuntan a nodos, tokens y trivia en el árbol de sintaxis. El visualizador muestra qué elementos tienen errores adjuntos a ellos resaltando el fondo en rosa. Puede inspeccionar los errores en cualquier elemento coloreado rosa si mantiene el puntero sobre el elemento. El visualizador solo muestra errores sintácticos (esos errores relacionados con la sintaxis del código tipado); no muestra ningún error semántico.

Gráficos de sintaxis

Haga clic con el botón derecho en cualquier elemento del árbol y haga clic en Ver gráfico de sintaxis dirigida.

El visualizador muestra una representación gráfica del subárbol raíz en el elemento seleccionado. Pruebe estos pasos para el nodo MethodDeclaration correspondiente al Main() método en el ejemplo de C#. El visualizador muestra un gráfico de sintaxis que tiene el siguiente aspecto:

Visualización de un gráfico de sintaxis de C#

El visor de gráficos de sintaxis tiene una opción para mostrar una leyenda para su combinación de colores. También puede mantener el puntero sobre elementos individuales en el gráfico de sintaxis con el mouse para ver las propiedades correspondientes a ese elemento.

Puede ver gráficos de sintaxis para distintos elementos del árbol repetidamente y los gráficos siempre se mostrarán en la misma ventana dentro de Visual Studio. Puede acoplar esta ventana en una ubicación cómoda dentro de Visual Studio para que no tenga que cambiar entre pestañas para ver un nuevo grafo de sintaxis. La parte inferior, debajo de las ventanas del editor de código, suele ser conveniente.

Este es el diseño de acoplamiento que se va a usar con la ventana de herramientas del visualizador y la ventana del gráfico de sintaxis:

Una disposición de acoplamiento para el visualizador y la ventana del gráfico de sintaxis

Otra opción es colocar la ventana del grafo de sintaxis en un segundo monitor, en una configuración de doble monitor.

Inspección de la semántica

El Visualizador de sintaxis permite la inspección rudimentaria de símbolos e información semántica. Escriba double x = 1 + 1; dentro de Main() en el ejemplo de C#. A continuación, seleccione la expresión 1 + 1 en la ventana del editor de código. El visualizador resalta el nodo AddExpression en el visualizador. Haga clic con el botón derecho en este AddExpression y haga clic en Ver símbolo (si existe). Observe que la mayoría de los elementos de menú tienen el calificador "if any". El Visualizador de sintaxis inspecciona las propiedades de un nodo, incluidas las propiedades que pueden no estar presentes para todos los nodos.

La cuadrícula de propiedades del visualizador se actualiza tal y como se muestra en la ilustración siguiente: El símbolo de la expresión es un SynthesizedIntrinsicOperatorSymbol con Kind = Method.

Propiedades de símbolos en el visualizador de sintaxis

Haga clic con el botón derecho en el mismo nodo AddExpression y seleccione Ver tipoSymbol (si existe). La cuadrícula de propiedades del visualizador se actualiza como se muestra en la ilustración siguiente, lo que indica que el tipo de la expresión seleccionada es Int32.

Propiedades de TypeSymbol

Haga clic con el botón derecho en el mismo nodo AddExpression y seleccione Ver símbolo de tipo convertido (si hay alguno). El cuadro de propiedades se actualiza para indicar que aunque el tipo de la expresión es Int32 el tipo convertido de la expresión es Double como se muestra en la ilustración siguiente. Este nodo incluye información sobre símbolos de tipo convertido porque la expresión Int32 ocurre en un contexto donde debe convertirse en un Double. Esta conversión satisface el tipo Double especificado para la variable x en el lado izquierdo del operador de asignación.

Propiedades de TypeSymbol convertidas

Por último, haga clic con el botón derecho en el mismo nodo AddExpression y seleccione Ver valor constante (si existe). La cuadrícula de propiedades muestra que el valor de la expresión es una constante en tiempo de compilación con el valor 2.

Valor constante

El ejemplo anterior también se puede replicar en Visual Basic. Escriba Dim x As Double = 1 + 1 en un archivo de Visual Basic. Seleccione la expresión 1 + 1 en la ventana del editor de código. El visualizador resalta el nodo AddExpression correspondiente en el visualizador. Repita los pasos anteriores para este AddExpression y debería ver resultados idénticos.

Examine más código en Visual Basic. Actualice el archivo principal de Visual Basic con el código siguiente:

Imports C = System.Console

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

Este código incluye un alias llamado C que se asigna al tipo System.Console en la parte superior del archivo y usa este alias en Main(). Seleccione el uso de este alias, el C en C.WriteLine(), dentro del método Main(). El visualizador selecciona el nodo IdentifierName correspondiente en el visualizador. Haga clic con el botón derecho en este nodo y haga clic en Ver símbolo (si existe). La cuadrícula de propiedades indica que este identificador está enlazado al tipo System.Console , como se muestra en la ilustración siguiente:

Propiedades del símbolo C en el visualizador de sintaxis

Haga clic con el botón derecho en el mismo nodo IdentifierName y seleccione Ver aliasSymbol (si existe). La cuadrícula de propiedades indica que el identificador es un alias con nombre C enlazado al System.Console destino. En otras palabras, la cuadrícula de propiedades proporciona información sobre aliasSymbol correspondiente al identificador C.

Propiedades de AliasSymbol

Inspeccione el símbolo correspondiente a cualquier tipo, método, propiedad declarado. Seleccione el nodo correspondiente en el visualizador y haga clic con el botón derecho para acceder al símbolo de vista (si existe). Seleccione el método Sub Main(), incluido el cuerpo del método. Haga clic con el botón derecho en el nodo SubBlock correspondiente en el visualizador y seleccione Ver símbolo (si existe). La cuadrícula de propiedades muestra que el MethodSymbol para este SubBlock tiene el nombre Main con el tipo de valor devuelto Void.

Visualización del símbolo de una declaración de método

Los ejemplos anteriores de Visual Basic se pueden replicar fácilmente en C#. Escriba using C = System.Console; en lugar de Imports C = System.Console para el alias. Los pasos anteriores de C# producen resultados idénticos en la ventana del visualizador.

Las operaciones de inspección semántica solo están disponibles en los nodos. No están disponibles en tokens o curiosidades. No todos los nodos tienen información semántica interesante para inspeccionar. Cuando un nodo no tiene información semántica interesante, haga clic con el botón derecho y seleccione Ver * Símbolo (si existe) muestra una cuadrícula de propiedades en blanco.

Puede obtener más información sobre las API para realizar análisis semánticos en el documento Work with semantics overview (Trabajar con semántica).

Cierre del visualizador de sintaxis

Puede cerrar la ventana del visualizador cuando no la use para examinar el código fuente. El visualizador de sintaxis actualiza su presentación a medida que navega por el código, editando y cambiando el origen. Puede distraerse cuando no lo esté usando.