{"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* \n              `title` (обязательно): заголовок параметра\n* \n              `description` (обязательно): описание параметра\n* \n              `type` (обязательно): тип параметра, который может быть\n  * \n              `string`: указывает, что параметр может иметь одно строковое значение\n  * \n              `array`: указывает, что параметр может иметь последовательность строковых значений\n  * \n              `object`: указывает, что это не вариант, а группирование, которое может содержать другие параметры и группы параметров.\n* \n              `pattern` (необязательно): шаблоны регулярных выражений, которые должны соответствовать всем значениям параметра. Обратите внимание, что средство извлечения может наложить дополнительные ограничения на значения параметров, которые не являются или не могут быть выражены в этом шаблоне регулярного выражения. Такие ограничения, если они существуют, будут описаны в поле описания.\n* \n              `properties` (необязательно): сопоставление имен параметров извлечения в группе параметров с соответствующими описаниями параметра извлечения. Это поле может присутствовать только для групп параметров. Например, параметры `object` типа.\n\nВ приведенном выше примере средство извлечения объявляет два варианта:\n\n* \n              `option1`\n              `string`— это параметр с сопоставлением значений`[a-z]+`\n* \n              `group1.option2`\n              `array`— это параметр со значениями, соответствующими`[1-9][0-9]\\*`\n\n## Команды для настройки опций экстрактора\n\nCodeQL 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* \n              `extractor_option_name` — имя средства извлечения (в этом примере), `java`за которым следует период, а затем имя параметра средства извлечения (в этом примере `option1` или `group1.option2`).\n* \n              `extractor_option_value` — значение, назначенное параметру средства извлечения. Значение должно соответствовать шаблону регулярного выражения параметра средства извлечения (если он существует), и он не должен содержать символы новой строки.\n\nИспользование `--extractor-option` для назначения параметра извлечения, который не существует, является ошибкой.\n\nCodeQL 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-option` также, `--extractor-options-file`который имеет обязательный аргумент пути к YAML-файлу (с расширением или) или `.yaml`JSON-файлом (с расширением `.yml``.json`). Рассмотрим пример.\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` параметр средства извлечения несколько раз, все значения параметров объединяются в порядке."}