Skip to main content

query compile

Скомпилируйте или проверка код QL.

GitHub CodeQL лицензируется для каждого пользователя после установки. CodeQL можно использовать только для определенных задач с ограничениями лицензии. Дополнительные сведения см. в разделе Сведения о CodeQL CLI.

Если у вас есть лицензия на GitHub Advanced Security, вы можете использовать CodeQL для автоматического анализа, непрерывной интеграции и непрерывной поставки. Дополнительные сведения см. в разделе Сведения о GitHub Advanced Security.

В этом материале описывается последний выпуск Интерфейса командной строки CodeQL. Дополнительные сведения об этом выпуске см. в разделе https://github.com/github/codeql-cli-binaries/releases.

Чтобы просмотреть сведения о параметрах, доступных для этой команды в более раннем выпуске, выполните команду с параметром в терминале --help .

Краткий обзор

Shell
codeql query compile [--check-only] [--keep-going] [--threads=<num>] [--ram=<MB>] <options>... -- <file>...

Описание

Скомпилируйте или проверка код QL.

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

Основные параметры

<file>...

[Обязательный] Запросы для компиляции. Каждый аргумент является одним из следующих:

  • QL-файл для компиляции.
  • Каталог, в котором будет выполняться рекурсивный поиск по QL-файлам.
  • QLS-файл, определяющий определенный набор запросов.
  • Базовое имя "хорошо известного" QLS-файла, экспортированного одним из установленных пакетов QL.

-n, --check-only

Просто проверка, что QL является допустимым и вывести на печать все ошибки; на самом деле не оптимизируйте и не храните план запроса. Это может быть гораздо быстрее, чем полная компиляция.

--[no-]precompile

[Дополнительно] Сохраните каждый скомпилированный запрос в виде двоичного .qlx файла рядом с .ql источником.

Он должен использоваться только при подготовке пакета запросов к распространению (в этом случае он используется автоматически при публикации пакета codeql). .qlx После создания файлов последующие команды, которые выполняют запросы, могут игнорировать изменения в источнике QL в пользу предварительно скомпилированных версий.

Некоторые редко используемые параметры компиляции несовместимы с этим и приводят к ошибке во время выполнения.

Доступно начиная с v2.12.0.

--[no-]dump-dil

[Дополнительно] Печать оптимизированного промежуточного представления DIL в стандартные выходные данные во время компиляции.

При выборе выходных данных JSON DIL будет представлен в виде массива однострочных строк с некоторой оболочкой для определения компилируемого запроса.

-k, --[no-]keep-going

Продолжайте компиляцию, даже если обнаружена ошибка.

--[no-]dump-ra

[Дополнительно] Печать оптимизированного плана запроса RA в стандартные выходные данные во время компиляции.

При выборе выходных данных JSON ra будет представлен в виде массива однострочных строк с некоторой оболочкой для определения компилируемого запроса.

--format=<fmt>

Выберите формат вывода (textпо умолчанию) или json.

-j, --threads=<num>

Используйте это множество потоков для компиляции запросов.

По умолчанию равен 1. Вы можете передать 0, чтобы использовать один поток на каждом ядре на компьютере, или -N , чтобы оставить N ядер неиспользуемых (за исключением того, что по-прежнему используется хотя бы один поток).

-M, --ram=<MB>

Задайте общий объем ОЗУ, который должен быть разрешен компилятору.

Вариант QL и параметры управления компилятором

--warnings=<mode>

Обработка предупреждений от компилятора QL. Одно из двух значений:

hide: отключение предупреждений.

show(по умолчанию): вывод предупреждений, но продолжение компиляции.

error: предупреждения обрабатываются как ошибки.

--no-debug-info

Не выдавайте сведения о расположении источника в RA для отладки.

--[no-]fast-compilation

[Не рекомендуется] [Дополнительно] Пропускать особенно медленные шаги оптимизации.

--no-release-compatibility

[Дополнительно. Используйте новейшие функции компилятора за счет переносимости.

Время от времени новые функции языка QL и оптимизации средства оценки будут поддерживаться оценщиком QL в нескольких выпусках, прежде чем они будут включены по умолчанию в компиляторе QL. Это помогает гарантировать, что производительность, которую вы будете использовать при разработке запросов в последнем выпуске CodeQL, может соответствовать немного более старым выпускам, которые могут по-прежнему использоваться для сканирования кода или интеграции CI.

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

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

Доступно начиная с v2.11.1.

--[no-]local-checking

Выполняйте начальные проверки только той части источника QL, которая используется.

--no-metadata-verification

Не проверка внедренные метаданные запроса в комментариях QLDoc для допустимости.

--compilation-cache-size=<MB>

[Дополнительно. Переопределите максимальный размер каталога кэша компиляции по умолчанию.

Параметры настройки среды компиляции

--search-path=<dir>[:<dir>...]

Список каталогов, в которых можно найти пакеты QL. Каждый каталог может быть либо пакетом QL (или пакетом пакетов, содержащим файл в корневом .codeqlmanifest.json каталоге), либо непосредственным родительским элементом одного или нескольких таких каталогов.

Если путь содержит несколько каталогов, их порядок определяет приоритет между ними: если имя пакета, которое необходимо разрешить, совпадает в нескольких деревьях каталогов, то первое из них выигрывает.

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

Если вы извлекли репозиторий CodeQL как одноуровневый элемент распакованой цепочки инструментов CodeQL, вам не нужно предоставлять этот параметр. В таких каталогах всегда будет выполняться поиск пакетов QL, которые невозможно найти в противном случае. (Если это значение по умолчанию не работает, настоятельно рекомендуется выполнить настройку --search-path раз и навсегда в файле конфигурации для каждого пользователя.

(Примечание. В Windows разделитель пути — ).;

--additional-packs=<dir>[:<dir>...]

Если указан этот список каталогов, в них будет выполняться поиск пакетов перед теми, которые в --search-path. Порядок между ними не имеет значения; Это ошибка, если имя пакета найдено в двух разных местах в этом списке.

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

(Примечание. В Windows разделитель пути — ).;

--library-path=<dir>[:<dir>...]

[Дополнительно] Необязательный список каталогов, которые будут добавлены в путь поиска необработанного импорта для библиотек QL. Его следует использовать только в том случае, если вы используете библиотеки QL, которые не были упакованы как пакеты QL.

(Примечание. В Windows разделитель пути — ).;

--dbscheme=<file>

[Дополнительно] Явным образом определяет, для каких запросов dbscheme следует компилироваться. Это должно быть дано только абонентами, которые очень уверены в том, что они делают.

--compilation-cache=<dir>

[Дополнительно] Укажите дополнительный каталог для использования в качестве кэша компиляции.

--no-default-compilation-cache

[Дополнительно. Не используйте кэши компиляции в стандартных расположениях, таких как пакет QL, содержащий запрос, или в каталоге цепочки инструментов CodeQL.

Параметры настройки диспетчера пакетов CodeQL

--registries-auth-stdin

Проверка подлинности в реестрах контейнеров GitHub Enterprise Server путем передачи разделенного запятыми списка \<registry_url>=\ пар.

Например, можно передать https://containers.GHEHOSTNAME1/v2/=TOKEN1,https://containers.GHEHOSTNAME2/v2/=TOKEN2 для проверки подлинности в двух экземплярах GitHub Enterprise Server.

Это переопределяет переменные среды AUTH CODEQL_REGISTRIES_и токена GITHUB_. Если вам нужно пройти проверку подлинности только в реестре контейнеров github.com, можно использовать более простой --github-auth-stdin вариант.

--github-auth-stdin

Проверка подлинности в реестре контейнеров github.com путем передачи маркера github.com GitHub Apps или личного маркера доступа через стандартные входные данные.

Для проверки подлинности в реестрах контейнеров GitHub Enterprise Server передайте --registries-auth-stdin или используйте переменную среды CODEQL_REGISTRIES_AUTH.

Это переопределяет переменную среды GITHUB_TOKEN.

Общие параметры

-h, --help

Показать этот текст справки.

-J=<opt>

[Дополнительно] Предоставьте параметр виртуальной машине Java, запустив команду .

(Остерегайтесь, что параметры, содержащие пробелы, будут обрабатываться неправильно.)

-v, --verbose

Добавочное увеличение числа выводемых сообщений о ходе выполнения.

-q, --quiet

Постепенно уменьшайте количество выводемых сообщений о ходе выполнения.

--verbosity=<level>

[Дополнительно] Явно задайте уровень детализации для одной из ошибок, предупреждений, хода выполнения, хода выполнения+, хода выполнения++, прогресса+++. Переопределяет -v и -q.

--logdir=<dir>

[Дополнительно] Запись подробных журналов в один или несколько файлов в заданном каталоге с созданными именами, включая метки времени и имя выполняющейся подкоманды.

(Чтобы записать файл журнала с именем, над которым у вас есть полный контроль, вместо этого при необходимости предоставьте --log-to-stderr и перенаправьте stderr.)