Поделиться через


Изучение кода с помощью визуализатора синтаксиса Roslyn в Visual Studio

В этой статье представлен обзор средства визуализатора синтаксиса, который поставляется в составе пакета SDK для компилятора .NET (Roslyn). Визуализатор синтаксиса — это окно инструментов, которое помогает проверять и изучать деревья синтаксиса. Это важное средство для понимания моделей кода, который требуется проанализировать. Это также помощь в отладке при разработке собственных приложений с помощью пакета SDK для компилятора .NET ("Roslyn"). Откройте это средство при создании первых анализаторов. Визуализатор помогает понять модели, используемые API. Вы также можете использовать такие инструменты, как SharpLab или LINQPad , для проверки кода и понимания деревьев синтаксиса.

Инструкции по установке — Visual Studio Installer

Существует два разных способа найти пакет SDK платформы компилятора .NET в установщике Visual Studio:

Установка с помощью установщика Visual Studio — представление рабочих нагрузок

Пакет SDK платформы компилятора .NET не выбирается автоматически в рамках рабочей нагрузки разработки расширений Visual Studio. Его необходимо выбрать как необязательный компонент.

  1. Запуск установщика Visual Studio
  2. Выберите Изменить.
  3. Проверьте рабочую нагрузку разработки расширений Visual Studio .
  4. Откройте узел разработки расширений Visual Studio в дереве сводки.
  5. Установите флажок .NET Compiler Platform SDK. Он будет находиться в последнем разделе необязательных компонентов.

Кроме того, вы также хотите, чтобы редактор DGML отображал графы в визуализаторе:

  1. Откройте узел отдельных компонентов в дереве сводки.
  2. Установите флажок для редактора DGML

Установка с помощью установщика Visual Studio — вкладка "Отдельные компоненты"

  1. Запуск установщика Visual Studio
  2. Выберите Изменить.
  3. Выберите вкладку "Отдельные компоненты"
  4. Установите флажок .NET Compiler Platform SDK. Его можно найти в верхней части раздела "Компиляторы", "Средства сборки" и "Среды выполнения ".

Кроме того, вы также хотите, чтобы редактор DGML отображал графы в визуализаторе:

  1. Установите флажок для редактора DGML. Его можно найти в разделе "Инструменты кода ".

Ознакомьтесь с понятиями, используемыми в платформе SDK компилятора .NET, прочитав статью Обзор. В ней приведены общие сведения о деревах синтаксиса, узлах, маркерах и тривии.

Визуализатор синтаксиса

Визуализатор синтаксиса позволяет проверить дерево синтаксиса для файла кода C# или Visual Basic в текущем окне активного редактора в интегрированной среде разработки Visual Studio. Визуализатор можно запустить, щелкнув по View>Other Windows>Syntax Visualizer. Панель быстрого запуска также можно использовать в правом верхнем углу. Введите "синтаксис", и команда, чтобы открыть визуализатор синтаксиса , должна появиться.

Эта команда открывает визуализатор синтаксиса в виде плавающего окна инструмента. Если у вас нет открытого окна редактора кода, отображается пустой экран, как показано на следующем рисунке.

Окно средства визуализатора синтаксиса

Закрепите окно инструментов в удобном месте в Visual Studio, например, слева. Визуализатор отображает сведения о текущем файле кода.

Создайте проект с помощью команды "Файл>нового проекта ". Вы можете создать проект Visual Basic или C#. Когда Visual Studio открывает основной файл кода для этого проекта, визуализатор отображает дерево синтаксиса для него. В этом экземпляре Visual Studio можно открыть любой существующий файл C# или Visual Basic, а визуализатор отображает дерево синтаксиса этого файла. Если в Visual Studio открыто несколько файлов кода, визуализатор отображает дерево синтаксиса для текущего активного файла кода (файл кода с фокусом клавиатуры).)

Как показано на предыдущих изображениях, окно инструментов визуализатора отображает дерево синтаксиса в верхней части и сетку свойств внизу. Сетка свойств отображает свойства элемента, выбранного в настоящее время в дереве, включая тип .NET и тип (СинтаксисKind) элемента.

Деревья синтаксиса состоят из трех типов элементов — узлов, маркеров и тривии. Дополнительные сведения об этих типах см. в статье " Работа с синтаксисом ". Элементы каждого типа представлены с помощью другого цвета. Нажмите кнопку "Легенда" для обзора используемых цветов.

Каждый элемент в дереве также отображает свой собственный интервал. Диапазон — это индексы (начальная и конечная позиция) этого узла в текстовом файле. В приведенном выше примере C# выбранный маркер UsingKeyword [0..5) имеет диапазон шириной пять символов, [0..5). Нотация "[.)" означает, что начальный индекс является частью диапазона, но конечный индекс не является.

Существует два способа навигации по дереву:

  • Разверните или щелкните элементы в дереве. Визуализатор автоматически выбирает текст, соответствующий диапазону этого элемента в редакторе кода.
  • Щелкните или выделите текст в редакторе кода. В предыдущем примере Visual Basic при выборе строки, содержащей модуль Module1 в редакторе кода, визуализатор автоматически переходит к соответствующему узлу ModuleStatement в дереве.

Визуализатор выделяет элемент в дереве, диапазон которого лучше всего соответствует диапазону текста, выбранного в редакторе.

Визуализатор обновляет дерево в соответствии с изменениями в активном файле кода. Добавьте вызов Console.WriteLine() внутрь Main(). При вводе визуализатор обновляет дерево.

Поставьте ввод на паузу, как только вы введёте Console.. Дерево имеет некоторые элементы розового цвета. На этом этапе в написанном коде возникают ошибки (также называемые "Диагностика"). Эти ошибки присоединяются к узлам, маркерам и тривии в дереве синтаксиса. Визуализатор показывает, какие элементы имеют ошибки, прикрепленные к ним, подчеркивая фон в розовом цвете. Ошибки можно проверить на любом элементе розового цвета, наведя указатель мыши на элемент. Визуализатор отображает только синтаксические ошибки (эти ошибки, связанные с синтаксисом типизированного кода); Он не отображает семантические ошибки.

Графы синтаксиса

Щелкните правой кнопкой мыши на любом элементе в дереве и выберите «Просмотр направленного синтаксического графа».

Визуализатор отображает графическое представление поддерева, корнем которого является выбранный элемент. Выполните следующие действия для узла MethodDeclaration , соответствующего Main() методу в примере C#. Визуализатор отображает граф синтаксиса, который выглядит следующим образом:

Просмотр графа синтаксиса C#

Средство просмотра синтаксического графа имеет возможность отображения условных обозначений для его цветовой схемы. Вы также можете навести указатель мыши на отдельные элементы в графе синтаксиса, чтобы просмотреть свойства, соответствующие этому элементу.

Вы можете просматривать графы синтаксиса для разных элементов в дереве многократно, а графы всегда будут отображаться в одном окне в Visual Studio. Это окно можно закрепить в удобном расположении в Visual Studio, чтобы вам не нужно переключаться между вкладками для просмотра нового графа синтаксиса. На нижней части, ниже окон редактора кода, часто удобно.

Ниже приведен макет док-станции для использования с окном средства визуализатора и окном графа синтаксиса:

Один макет размещения панелей для окна визуализатора и синтаксического графа

Другим вариантом является размещение окна графа синтаксиса во втором мониторе в настройке двойного монитора.

Проверка семантики

Визуализатор синтаксиса позволяет проверять символы и семантические сведения. Введите double x = 1 + 1; внутри Main() в примере C#. Затем выберите выражение 1 + 1 в окне редактора кода. Визуализатор выделяет узел AddExpression в визуализаторе. Щелкните правой кнопкой мыши на AddExpression и выберите Показать символ (если есть). Обратите внимание, что большинство элементов меню имеют условный элемент "если есть". Визуализатор синтаксиса проверяет свойства узла, включая свойства, которые могут не присутствовать для всех узлов.

Сетка свойств в визуализаторе обновляется, как показано на следующем рисунке: символ выражения — SynthesizedIntrinsicOperatorSymbol с атрибутом Kind = Method.

Свойства символов в визуализаторе синтаксиса

Щелкните правой кнопкой мыши тот же узел AddExpression и выберите View TypeSymbol (если таковые есть). Сетка свойств в визуализаторе обновляется, как показано на следующем рисунке, указывая на тип выбранного выражения Int32.

Свойства TypeSymbol

Щелкните правой кнопкой мыши тот же узел AddExpression и выберите Просмотр преобразованного TypeSymbol (если есть). Сетка свойств обновляется и указывает, что хотя тип выражения — Int32, преобразованный тип выражения — Double, как показано на следующем рисунке. Этот узел содержит информацию о преобразованных символах типа, потому что Int32 выражение возникает в контексте, который требует его преобразования в Double. Это преобразование удовлетворяет типу Double , указанному для переменной x слева от оператора назначения.

Преобразованные свойства TypeSymbol

Наконец, щелкните правой кнопкой мыши тот же узел AddExpression, и выберите Просмотреть значение константы (если таковое имеется). Сетка свойств показывает, что значение выражения является константой времени компиляции со значением 2.

Константное значение

Предыдущий пример также можно реплицировать в Visual Basic. Введите Dim x As Double = 1 + 1 в файл Visual Basic. Выберите выражение 1 + 1 в окне редактора кода. Визуализатор выделяет соответствующий узел AddExpression в визуализаторе. Повторите предыдущие шаги для этого AddExpression , и вы увидите идентичные результаты.

Ознакомьтесь с дополнительным кодом в Visual Basic. Обновите основной файл Visual Basic следующим кодом:

Imports C = System.Console

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

Этот код представляет псевдоним C , который сопоставляется с типом System.Console в верхней части файла и использует этот псевдоним внутри Main(). Выберите использование этого псевдонима C в C.WriteLine(), в методе Main(). Визуализатор выбирает соответствующий узел IdentifierName в визуализаторе. Щелкните этот узел правой кнопкой мыши и нажмите смотреть символ (если он есть). Сетка свойств указывает, что этот идентификатор привязан к типу System.Console , как показано на следующем рисунке:

Свойства символа C в визуализаторе синтаксиса

Щелкните правой кнопкой мыши тот же узел IdentifierName и выберите View AliasSymbol (если таковые есть). Сетка свойств указывает, что идентификатор является псевдонимом с именем C , привязанным к целевому объекту System.Console . Другими словами, сетка свойств предоставляет сведения об ПсевдонимеSymbol , соответствующем идентификатору C.

Свойства AliasSymbol

Проверьте символ, соответствующий любому объявленному типу, методу, свойству. Выберите соответствующий узел в визуализаторе и щелкните правой кнопкой мыши, чтобы получить доступ к символу представления (если таковой имеется). Выберите метод Sub Main(), включая текст метода. Щелкните правой кнопкой мыши соответствующий узел SubBlock в визуализаторе и выберите значок представления (при наличии). В сетке свойств отображается MethodSymbol для этого SubBlock с именем Main и типом возвращаемого значения Void.

Просмотр символа объявления метода

Приведенные выше примеры Visual Basic можно легко реплицировать в C#. Введите using C = System.Console; вместо Imports C = System.Console для псевдонима. Предыдущие шаги в C# дают идентичные результаты в окне визуализатора.

Операции семантической проверки доступны только на узлах. Они недоступны для токенов или тривии. Не все узлы имеют интересную семантику для проверки. Если узел не содержит интересных семантических сведений, щелкните правой кнопкой мыши и выберите "Просмотр * Символ (если доступен)", чтобы увидеть пустую сетку свойств.

Дополнительные сведения об API-интерфейсах для выполнения семантического анализа см. в документе " Работа с семантикой ".

Закрытие визуализатора синтаксиса

Окно визуализатора можно закрыть, если он не используется для изучения исходного кода. Визуализатор синтаксиса обновляет его отображение при переходе по коду, редактированию и изменению источника. Это может отвлекать, когда вы не используете его.