Вебинар: Стратегия без иллюзий: как превращать цели в результаты - 19.08
В этой документации представлена работа с анализатором PVS-Studio для JavaScript и TypeScript c использованием командной строки.
Помимо CLI, PVS-Studio предоставляет интеграцию с WebStorm, PhpStorm и Visual Studio Code. Подробнее описано в соответствующих документациях:
Установка анализатора описана в отдельной документации.
Перед началом использования анализатора необходимо активировать лицензию. Ввод лицензии описан в отдельной документации.
Утилита имеет два режима работы:
analyze — утилита выполняет анализ переданного проекта;suppress — утилита выполняет генерацию файла подавления.Для получения информации обо всех доступных аргументах и флагах необходимо выполнить команды:
pvs-js --helppvs-js analyze --helppvs-js suppress --helpДля запуска анализа проекта нужно воспользоваться командой analyze и передать путь до директории с JavaScript или TypeScript проектом:
pvs-js analyze /path/to/project
По итогам выполнения анализа утилита сохранит отчёт в текущей рабочей директории с именем PVS-Studio.json и вернёт код возврата.
Режим analyze имеет один аргумент — директория с проектом.
Ниже представлены флаги режима analyze.
Определяет поведение анализатора на указанных путях. Принимает строку следующего формата:
(mode=<path>|<glob>)(,mode=<path>|<glob>)*
где mode — поведение анализатора на указанном пути <path> или glob-паттерне <glob>. Допустимые режимы:
analyze — анализатор проведёт анализ файлов, соответствующих указанному пути или glob-паттерну;skip-analysis — анализатор уберёт из анализа файлы, соответствующие указанному пути или glob-паттерну.Анализатор всегда изначально предполагает, что все исходные файлы должны быть проверены (analyze=*), даже при явной передаче флага. Флаг может быть задан несколько раз, анализатор последовательно применит все указанные фильтры.
Например, нужно исключить из анализа директории 3rd-party и unittests, но включить в анализ поддиректорию 3rd-party/lib1:
pvs-jvs analyze /path/to/project \
--analysis-paths "skip-analysis=*/3rd-party/*" \
--analysis-paths "skip-analysis=*/unittests/*" \
--analysis-paths "analyze=*/3rd-party/lib1/*"
Активирует проверку списка файлов. Позволяет решить задачу автоматической проверки коммитов и Pull/Merge Requests на стороне CI/CD.
В качестве аргумента принимает файл со списком путей или glob-паттернов, которые необходимо проанализировать. Каждый путь или glob-паттерн должен быть записан отдельной строкой, например:
# content of the file
src/source1.ts
src/source2.ts
Если файл содержит относительные пути, то они будут раскрыты в абсолютные через текущую рабочую директорию.
Пример:
pvs-js analyze /path/to/project \
--source-files fromCommit.txt
Путь до результирующего отчёта анализатора. Расширение файла, переданного в качестве аргумента, не влияет на формат содержимого отчёта.
Если необходимо выдать результат в stdout, то нужно передать символ - как аргумент флага.
Если флаг не передан, то по умолчанию отчёт запишется в текущей рабочей директории с именем PVS-Studio.json.
Пример:
pvs-js analyze /path/to/project \
--output report.json
Позволяет задать конфигурацию анализа через файл в формате TOML. Более подробно об этом способе настройки анализатора написано в отдельной документации.
По умолчанию утилита ищет файл pvs-settings.toml в директории, указанной для анализа.
Пример:
cd /path/to/project
pvs-js analyze . \
--analysis-config project-settings.toml
Задаёт количество потоков для анализа. Представляет собой целое, неотрицательное число.
Если в качестве аргумента передано значение 0, то анализ будет распараллелен на все доступные логические ядра.
Если флаг не указан, то по умолчанию утилита распараллеливает работу на оптимальное количество потоков для анализа.
Пример:
pvs-js analyze /path/to/project \
--threads 8
Определяет время, через которое будет остановлен анализ единичного файла (таймаут).
Представляет собой строку формата XXhYYmZZs.
Если флаг не указан, то по умолчанию утилита останавливает анализ единичного файла через 10 минут.
Пример установки таймаута на 30 минут:
pvs-js analyze /path/to/project \
--file-analysis-timeout 30m
Позволяет генерировать переносимые между машинами отчёты. Представляет собой путь до директории, который будет заменяться в позициях предупреждений на специальный маркер |?|.
Пример:
pvs-js analyze /path/to/project \
--source-tree-root /path/to/project
Позволяет управлять состоянием диагностических правил — включены (on) или выключены (off).
Принимает строку следующего формата:
(RULE|RANGE|GROUP)=(on|off)(,(RULE|RANGE|GROUP)=(on|off))*
где:
RULE — диагностическое правило, которое записывается в формате Vxxxx. Списки диагностических правил доступны здесь: [1] и [2].RANGE — закрытый диапазон диагностических правил, который записывается в формате Vxxxx-Vyyyy. Число xxxx должно быть меньше yyyy.GROUP — группа диагностических правил. Доступные группы:ALL — все диагностические правила.GA — диагностические правила общего назначения.OWASP — диагностические правила для обнаружения отклонений от OWASP ASVS.Анализатор всегда изначально предполагает, что включена только группа диагностических правил общего назначения (GA=on), даже при явной передаче флага. Флаг может быть задан несколько раз: анализатор последовательно применит все указанные фильтры.
Пример отключения всех правил и включение только правил V7001–V7031:
pvs-js analyze /path/to/project \
--rules ALL=off \
--rules V7001-V7031=on
Включает добавление SEC-меток в поле SAST предупреждений анализатора. SEC-метки отображают группы срабатываний анализатора согласно классификации критических ошибок из ГОСТ Р 71207-2024.
Пример:
pvs-js analyze /path/to/project \
--security-related-issues
При указании флага утилита возвращает код 1, если отчёт содержит предупреждения после успешного завершения анализа.
Пример:
pvs-js analyze /path/to/project \
–-indicate-warnings
Позволяет не выдавать в результатах анализа предупреждения низкого уровня достоверности.
Пример:
pvs-js analyze /path/to/project \
–-no-noise
Задаёт пути до файлов подавления предупреждений анализатора.
Если флаг не указан, то по умолчанию утилита неявно ищет файл с названием suppress_file.suppress.json в директории анализа.
Флаг может быть задан несколько раз: анализатор читает все указанные файлы подавления.
Пример:
pvs-js analyze /path/to/project \
--suppress-files /path/to/project/js.suppress.json \
--suppress-files /path/to/project/ts.suppress.json
Позволяет отключить проверку об истечении срока лицензии. Если до окончания лицензии остаётся менее 30 дней, без указания флага утилита возвращает код 21 и записывает сообщение.
Пример:
pvs-js analyze /path/to/project \
--disable-license-expiration-check
Позволяет игнорировать ненулевой код возврата при следующих некритичных ошибках:
Пример:
pvs-js analyze /path/to/project \
--ignore-analysis-failures
Позволяет задать произвольный путь до файла, содержащего информацию о лицензии. На Windows лицензия должна содержаться в Settings.xml файле, на Linux/macOS — в файле PVS-Studio.lic.
Если флаг не указан, то по умолчанию утилита ищет лицензию, которая была введена стандартным способом на Windows или Linux/macOS.
Пример:
pvs-js analyze /path/to/project \
--license-file /path/to/project/PVS-Studio.lic
Режим suppress производит подавление предупреждений на основе переданных отчётов анализа. Предупреждения, которые генерирует анализатор и которые соответствуют подавленным, не попадут в отчёт при следующих проверках проекта. Более подробно об этом механизме написано в отдельной документации.
Режим принимает пути до отчётов анализа. Если необходимо прочитать отчёт из stdin, то нужно передать символ - как аргумент флага.
Подавленные предупреждения по умолчанию записываются в текущую рабочую директорию в файл с именем suppress_file.suppress.json. Расположение файла может быть изменено соответствующим флагом, который будет описан ниже. Если файл ранее существовал, то утилита дополнит его новыми предупреждениями.
Пример:
pvs-js suppress /path/to/project/module1.report.json
/path/to/project/module2.report.json
Ниже представлены флаги режима suppress
Путь до результирующего файла подавления.
При попытке передачи пути до директории в качестве аргумента будет выдана ошибка.
Если файл ранее существовал и является файлом подавления, то утилита дополнит его новыми предупреждениями.
Если необходимо выдать результат в stdout, то нужно передать символ - как аргумент флага.
Пример:
pvs-js suppress /path/to/project/report.json \
--output /path/to/project/project.suppress.json
0 — анализ успешно завершён.1 — анализ успешно завершён и результирующий отчёт содержит предупреждения. Этот код будет возвращен только при использовании флага --indicate-warnings.2 — обнаружена некорректная конфигурация анализатора, заданная через интерфейс командной строки или файлы конфигурации.3 — при работе утилиты возникла непредвиденная ошибка. Обычно это сигнализирует о наличии ошибки в коде самой утилиты и сопровождается выведением дополнительной информации в stderr. Если вам встретилась такая ошибка, пожалуйста, отправьте эту информацию нам через форму обратной связи.4 — все файлы были исключены из анализа.5 — имеются файлы, которые не удалось проанализировать (например, произошла ошибка парсинга).6 — имеются файлы, анализ которых был прерван по таймауту.20 — истёк срок действия лицензии.21 — срок действия лицензии истечёт через месяц.22 — лицензия отсутствует или невалидна.0 — предупреждения из всех переданных отчетов были успешно подавлены.1 — часть предупреждений из переданных отчетов не была подавлена из-за некритичной ошибки.2 — были указаны некорректные входные данные.3 — при работе утилиты возникла непредвиденная ошибка. Обычно это сигнализирует о наличии ошибки в коде самой утилиты и сопровождается выведением дополнительной информации в stderr. Если вам встретилась такая ошибка, пожалуйста, отправьте эту информацию нам через форму обратной связи.