{"meta":{"title":"Параметры средства извлечения","intro":"Контролируйте, как CodeQL CLI система строит базы данных для анализа с помощью опций экстрактора.","product":"Безопасность и качество кода","breadcrumbs":[{"href":"/ru/code-security","title":"Безопасность и качество кода"},{"href":"/ru/code-security/reference","title":"Reference"},{"href":"/ru/code-security/reference/code-scanning","title":"Проверка кода"},{"href":"/ru/code-security/reference/code-scanning/codeql","title":"CodeQL"},{"href":"/ru/code-security/reference/code-scanning/codeql/codeql-cli","title":"CodeQL CLI"},{"href":"/ru/code-security/reference/code-scanning/codeql/codeql-cli/extractor-options","title":"Параметры средства извлечения"}],"documentType":"article"},"body":"# Параметры средства извлечения\n\nКонтролируйте, как CodeQL CLI система строит базы данных для анализа с помощью опций экстрактора.\n\n<!--The CodeQL CLI man pages include a link to this article. If you rename this article,\nmake sure that you also update the MS short link: https://aka.ms/codeql-cli-docs/extractor-options.-->\n\n## Доступные варианты экстракторов\n\nКаждый экстрактор определяет собственный набор конфигурационных опций для создания базы данных с CodeQL запросом из исходного кода. Чтобы узнать, какие опции доступны для конкретного экстрактора, можно выполнить одну из следующих команд:\n* `codeql resolve languages --format=betterjson`\n* `codeql resolve extractor --language=LANGUAGE --format=betterjson`\n\nФормат `betterjson` выходных данных предоставляет корневые пути средств извлечения и дополнительные сведения. Выходные данные `codeql resolve extractor --language=LANGUAGE --format=betterjson` часто форматируются следующим образом:\n\n```json\n{\n    \"extractor_root\" : \"/home/user/codeql/java\",\n    \"extractor_options\" : {\n        \"option1\" : {\n            \"title\" : \"Java extractor option 1\",\n            \"description\" : \"An example string option for the Java extractor.\",\n            \"type\" : \"string\",\n            \"pattern\" : \"[a-z]+\"\n        },\n        \"group1\" : {\n            \"title\" : \"Java extractor group 1\",\n            \"description\" : \"An example option group for the Java extractor.\",\n            \"type\" : \"object\",\n            \"properties\" : {\n                \"option2\" : {\n                    \"title\" : \"Java extractor option 2\",\n                    \"description\" : \"An example array option for the Java extractor\",\n                    \"type\" : \"array\",\n                    \"pattern\" : \"[1-9][0-9]*\"\n                }\n            }\n        }\n    }\n}\n```\n\nИмена и описания параметров средства извлечения перечислены в разделе `extractor_options`. Каждый параметр может содержать следующие поля:\n\n* `title` (обязательно): заголовок параметра\n* `description` (обязательно): описание параметра\n* `type` (обязательно): тип параметра, который может быть\n  * `string`: указывает, что параметр может иметь одно строковое значение\n  * `array`: указывает, что параметр может иметь последовательность строковых значений\n  * `object`: указывает, что это не вариант, а группирование, которое может содержать другие параметры и группы параметров.\n* `pattern` (необязательно): шаблоны регулярных выражений, которые должны соответствовать всем значениям параметра. Обратите внимание, что средство извлечения может наложить дополнительные ограничения на значения параметров, которые не являются или не могут быть выражены в этом шаблоне регулярного выражения. Такие ограничения, если они существуют, будут описаны в поле описания.\n* `properties` (необязательно): сопоставление имен параметров извлечения в группе параметров с соответствующими описаниями параметра извлечения. Это поле может присутствовать только для групп параметров. Например, параметры `object` типа.\n\nВ приведенном выше примере средство извлечения объявляет два варианта:\n\n* `option1`\n`string`— это параметр с сопоставлением значений`[a-z]+`\n* `group1.option2`\n`array`— это параметр со значениями, соответствующими`[1-9][0-9]\\*`\n\n## Команды для настройки опций экстрактора\n\nПоддерживается CodeQL CLI настройка опций экстрактора в подкомандах, которые прямо или косвенно вызывают экстракторы. Ниже приведены следующие команды:\n\n* `codeql database create`\n* `codeql database start-tracing`\n* `codeql database trace-command`\n* `codeql database index-files`\n\nПри выполнении этих вложенных команд можно задать параметры средства извлечения с `--extractor-option` помощью параметра CLI. Рассмотрим пример.\n\n* `codeql database create --extractor-option java.option1=abc ...`\n* `codeql database start-tracing --extractor-option java.group1.option2=102 ...`\n\n`--extractor-option` требуется ровно один аргумент вида `extractor_option_name=extractor_option_value`:\n* `extractor_option_name` — имя средства извлечения (в этом примере), `java`за которым следует период, а затем имя параметра средства извлечения (в этом примере `option1` или `group1.option2`).\n* `extractor_option_value` — значение, назначенное параметру средства извлечения. Значение должно соответствовать шаблону регулярного выражения параметра средства извлечения (если он существует), и он не должен содержать символы новой строки.\n\nИспользование `--extractor-option` для назначения параметра извлечения, который не существует, является ошибкой.\n\nОн CodeQL CLI принимает несколько `--extractor-option` вариантов в одном вызове. Если задать параметр средства извлечения несколько раз, последнее `string` значение параметра перезаписывает все предыдущие. Если задать параметр извлечения массива несколько раз, все значения параметров объединяются в порядке.\n\nКроме того, можно указать имена параметров извлечения без имени средства извлечения. Рассмотрим пример.\n\n* `codeql database create --extractor-option option1=abc ...`\n* `codeql database start-tracing --extractor-option group1.option2=102 ...`\n\nЕсли имя средства извлечения не указано, параметры средства извлечения будут применяться ко всем средствам извлечения, объявляющим параметр с заданным именем. В приведенном выше примере первая команда задала параметр `option1``abc` средства извлечения для `java` средства извлечения и каждого средства извлечения, имеющего параметр `option1`, например `cpp` , средства извлечения, если `option1` параметр средства извлечения существует для этого средства извлечения.\n\n## Формат файла для опций экстрактора\n\nМожно также задать параметры средства извлечения с помощью файла. Подкоманды, которые принимают, CodeQL CLI также принимают `--extractor-options-file`, который содержит необходимый аргумент пути к YAML-файлу (с расширением `.yaml` или `.yml`) или JSON-файлу (с расширением `.json`).`--extractor-option` Рассмотрим пример.\n\n* `codeql database create --extractor-options-file options.yml ...`\n* `codeql database start-tracing --extractor-options-file options.json ...`\n\nКаждый файл параметра содержит структуру дерева вложенных карт. В корневом каталоге находится ключ карты извлечения, и под ним находятся ключи карты, соответствующие именам средств извлечения. Начиная с третьего уровня, существуют параметры извлечения и группы параметров.\n\nВ ФОРМАТЕ JSON:\n\n```json\n{\n     \"extractor\" : {\n        \"java\": {\n            \"option1\" : \"abc\",\n            \"group1\" : {\n                \"option2\" : [ 102 ]\n            }\n        }\n    }\n}\n```\n\nВ YAML:\n\n```yaml\nextractor:\n    java:\n        option1: \"abc\"\n        group1:\n            option2: [ 102 ]\n```\n\nЗначение параметра `string` извлечения должно быть строкой или числом (которое будет преобразовано в строку перед дальнейшей обработкой).\n\nЗначение параметра `array` извлечения должно быть массивом строк или чисел.\n\nЗначение группы параметров (типа `object`) должно быть картой, которая может содержать вложенные параметры и группы параметров извлечения.\n\nКаждое значение параметра извлечения должно соответствовать шаблону регулярного выражения параметра средства извлечения (если оно существует), и он не должен содержать новые символы.\n\nНазначение параметра извлечения, который не существует, является ошибкой. Вы можете сделать опции CodeQL CLI игнорирования неизвестного экстрактора, используя специальное `__allow_unknown_properties` булево поле. Например, следующий файл опций просит игнорировать CodeQL CLI все неизвестные опции экстрактора и группы опций в разделе `group1`:\n\n```yaml\nextractor:\n    java:\n        option1: \"abc\"\n        group1:\n            __allow_unknown_properties: true\n            option2: [ 102 ]\n```\n\nМожно указать `--extractor-options-file` несколько раз. Назначения параметров извлечения обрабатываются в следующем порядке:\n\n1. Все файлы параметров извлечения, указанные в `--extractor-options-file` порядке их отображения в командной строке, затем\n1. Все назначения параметров извлечения, указанные в `--extractor-option` порядке их отображения в командной строке\n\nТе же правила управляют тем, что происходит, когда один и тот же параметр извлечения устанавливается несколько раз, независимо от того, выполняются ли назначения с помощью, с помощью `--extractor-option``--extractor-options-file`или некоторых сочетаний двух. Если задать параметр средства извлечения несколько раз, последнее `string` значение параметра перезаписывает все предыдущие значения. Если задать `array` параметр средства извлечения несколько раз, все значения параметров объединяются в порядке."}