Skip to main content

Изучение структуры исходного кода

Средство просмотра AST можно использовать для отображения абстрактного дерева синтаксиса базы данных CodeQL .

О дереве абстрактного синтаксиса

Абстрактное дерево синтаксиса (AST) программы представляет синтаксическую структуру программы. Узлы в AST представляют такие элементы, как операторы и выражения. База данных CodeQL кодирует эти элементы программы и связи между ними с помощью схемы базы данных. Дополнительные сведения о схемах баз данных см . в глоссарии CodeQL в документации по CodeQL.

CodeQL для Visual Studio Code содержит средство просмотра AST. Средство просмотра состоит из представления визуализации графа, позволяющего просматривать AST файла в базе данных CodeQL . Это помогает увидеть, какие классы CodeQL соответствуют тем, какие части исходных файлов соответствуют.

Просмотр абстрактного дерева синтаксиса исходного файла

Note

Если у вас нет соответствующего запроса (обычно printAST.ql) в рабочей области, CodeQL: просмотр команды AST в следующих шагах не будет работать. Чтобы устранить эту проблему, можно обновить копию репозитория github/codeql из main ветви. Если это сделать, кэши запросов могут быть удалены, поэтому следующий запрос может быть медленнее.

  1. Откройте представление "Базы данных" в расширении и щелкните правой кнопкой мыши базу данных, которую вы хотите изучить. Нажмите кнопку "Добавить источник базы данных" в рабочую область.

  2. Перейдите к исходному файлу базы данных CodeQL в проводник.

  3. Запустите CodeQL: просмотрите AST из VS Code Command Palette. При этом выполняется запрос CodeQL (обычно называемый printAST.ql) по активному файлу, который может занять несколько секунд. После завершения запроса средство просмотра AST отобразит структуру исходного файла.

  4. Чтобы просмотреть вложенную структуру исходного файла, щелкните стрелки и разверните узлы.

Вы можете щелкнуть узел в средстве просмотра AST, чтобы перейти к нему в исходном коде. И наоборот, если щелкнуть раздел исходного кода, средство просмотра AST отображает соответствующий узел.