В этом материале описывается последний выпуск Интерфейса командной строки CodeQL. Дополнительные сведения об этом выпуске см. в разделе https://github.com/github/codeql-cli-binaries/releases.
Чтобы просмотреть сведения о параметрах, доступных для этой команды в более раннем выпуске, выполните команду с параметром в терминале --help
.
Краткий обзор
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.
Это переопределяет переменные среды CODEQL_REGISTRIES_AUTH и GITHUB_TOKEN. Если вам нужно пройти проверку подлинности только в реестре контейнеров 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>
[Дополнительно] Предоставьте параметр виртуальной машине JVM, выполняющую команду .
(Остерегайтесь, что параметры, содержащие пробелы, будут обрабатываться неправильно.)
-v, --verbose
Постепенно увеличивайте количество выводемых сообщений о ходе выполнения.
-q, --quiet
Постепенно уменьшайте количество выводемых сообщений о ходе выполнения.
--verbosity=<level>
[Дополнительно] Явно задайте уровень детализации для одной из ошибок, предупреждений, progress, progress+, progress++, progress+++. Переопределяет -v
и -q
.
--logdir=<dir>
[Дополнительно] Запись подробных журналов в один или несколько файлов в указанном каталоге с созданными именами, включающими метки времени и имя выполняющейся подкоманды.
(Чтобы записать файл журнала с именем, над которым у вас есть полный контроль, вместо этого при необходимости предоставьте --log-to-stderr
и перенаправьте stderr.)