Удаление неактуальных маркеров подавления из кодовой базы
- Удаляемые маркеры подавления
- Сбор информации о неактуальных маркерах
- Автоматическое удаление неактуальных маркеров
- Слияние отчётов о неактуальных маркерах
- Формирование отчёта для предпросмотра
По мере развития анализатора или изменения анализируемого кода ложное предупреждение может перестать генерироваться, и маркеры подавления, содержащиеся в строках исходного кода для этого предупреждения, перестанут быть актуальными.
Накопление неактуальных маркеров подавления засоряет код и может привести к тому, что появившееся в том же месте новое предупреждение останется незамеченным.
Для очистки кодовой базы от неактуальных маркеров в пакете поставки анализатора PVS-Studio предусмотрена специальная утилита — pvs-fp-cleaner.
Удаляемые маркеры подавления
Анализатор PVS-Studio для подавления ложноположительных (false positive) предупреждений поддерживает управляющие комментарии вида:
//-Vwarning-number
где warning-number — номер диагностического правила.
Примеры маркеров подавления:
if (a == b && a == b && 0 / 0 == 0) //-V501 //-V609
Если для подавления ложного срабатывания используется механизм хэш-кода, то для удаления также рассматриваются следующие маркеры:
//-VH"hash"
где hash — hash-код строки без учета комментариев.
Пример маркера с хэш-кодом:
if (a == b && a == b && 0 / 0 == 0) //-V501 //-V609 //-VH"12345678"
Сбор информации о неактуальных маркерах
Первый шаг для удаления неактуальных маркеров — проведение полного анализа проекта в специальном режиме.
На текущий момент сбор информации возможен только с помощью утилит pvs-studio-analyzer / CompilerCommandsAnalyzer.
Утилита pvs-studio-analyzer / CompilerCommandsAnalyzer:
pvs-studio-analyzer analyze --redundant-false-alarms=/path/to/report.json \
--sourcetree-root=/path/to/project-root \
....
В результате будет сформирован отчёт о неактуальных маркерах подавления.
Необходимые флаги:
redundant-false-alarms— путь до генерируемого отчёта о неактуальных маркерах подавления;sourcetree-root— флаг для указания корневой директории (/path/to/project) проекта для составления относительных путей.
Автоматическое удаление неактуальных маркеров
Для автоматического удаления неактуальных маркеров подавления из кодовой базы в составе дистрибутива предоставляется утилита pvs-fp-cleaner.
При анализе кода на разных платформах, генерируемые анализатором предупреждения могут отличаться. Поэтому для кроссплатформенных проектов необходимо получить по экземпляру отчёта на каждую платформу и указать все отчёты в параметрах запуска утилиты очистки.
После анализа проекта и получения отчёта можно запустить утилиту очистки, указав следующие аргументы:
pvs-fp-cleaner cleanup \
--sourcetree-root=/path/to/project \
PATH...
где:
cleanup— режим работы утилиты;PATH...— список путей к отчётам о неактуальных маркерах подавления;sourcetree-root— путь к корневой директории проекта для преобразования относительных путей из отчётов с разных платформ.
Пример запуска:
pvs-fp-cleaner cleanup \
--sourcetree-root=/home/user/project \
/home/user/windows_report.json \
/home/user/linux_report.json \
/home/user/macOS_report.json
Запуск утилиты в режиме автоматического удаления неактуальных маркеров рекомендуется производить для кодовой базы, отслеживаемой системой контроля версий (Git, SVN, Mercurial и т.п.). Если проект не управляется такой системой, то крайне желательно сделать резервную копию исходных файлов.
Слияние отчётов о неактуальных маркерах
При необходимости слияния нескольких отчётов о неактуальных маркерах, например, для кроссплатформенного проекта, можно также воспользоваться утилитой pvs-fp-cleaner.
pvs-fp-cleaner merge \
--sourcetree-root=/path/to/project \
--output-file=/path/to/merged_report.json \
PATH...
где:
merge— режим работы утилиты;sourcetree-root— путь к корневой директории проекта для преобразования относительных путей из отчётов с разных платформ. Также используется для того, чтобы производить слияние информации на одинаковых файлах при анализе с разных платформ;output-file— путь до результирующего отчёта после слияния;PATH...— список путей к отчётам о неактуальных маркерах подавления.
Пример запуска:
pvs-fp-cleaner merge \
--sourcetree-root=/home/user/project \
--output-file=/home/user/merged_report.json \
/home/user/windows_report.json \
/home/user/linux_report.json \
/home/user/macOS_report.json
Формирование отчёта для предпросмотра
Перед удалением маркеров подавления может быть полезно оценить масштаб изменений в кодовой базе. С помощью утилиты можно сформировать отчёт для предварительного просмотра найденных неактуальных маркеров.
Получить такой отчёт можно с помощью режима report:
pvs-fp-cleaner report \
--sourcetree-root=/home/user/project \
--output-file=/home/user/report_for_IDE_plugin.json \
PATH...
где:
report— режим работы утилиты;sourcetree-root— путь к корневой директории проекта для преобразования относительных путей из отчётов с разных платформ. В режимеreportявляется обязательным только при формировании отчёта из "сырых" отчётов ядер;output-file— путь до результирующего отчёта;PATH...— список путей к отчётам о неактуальных маркерах подавления.
Сформированный отчёт можно открыть в IDE с помощью предоставляемых плагинов:
