﻿# Удаление неактуальных маркеров подавления из кодовой базы

По мере развития анализатора или изменения анализируемого кода ложное предупреждение может перестать генерироваться, и маркеры подавления, содержащиеся в строках исходного кода для этого предупреждения, перестанут быть актуальными\.

Накопление неактуальных маркеров подавления засоряет код и может привести к тому, что появившееся в том же месте новое предупреждение останется незамеченным\.

Для очистки кодовой базы от неактуальных маркеров в пакете поставки анализатора PVS\-Studio предусмотрена специальная утилита — `pvs-fp-cleaner`\.

## Удаляемые маркеры подавления

Анализатор PVS\-Studio для подавления [ложноположительных \(false positive\) предупреждений](https://pvs-studio.ru/ru/docs/manual/0017/) поддерживает управляющие комментарии вида:

**//\-V**_warning\-number_

где_ warning\-number_ — номер [диагностического правила](https://pvs-studio.ru/ru/docs/warnings/)\.

Примеры маркеров подавления:

```cpp
if (a == b && a == b && 0 / 0 == 0) //-V501 //-V609
```

Если для подавления ложного срабатывания используется [механизм хэш\-кода](https://pvs-studio.ru/ru/docs/manual/6630/#enable_false_alarms_with_hash), то для удаления также рассматриваются следующие маркеры:

**//\-VH"**_hash_**"**

где _hash — hash\-_код строки без учета комментариев\.

Пример маркера с хэш\-кодом:

```cpp
if (a == b && a == b && 0 / 0 == 0) //-V501 //-V609 //-VH"12345678"
```

## Сбор информации о неактуальных маркерах

Первый шаг для удаления неактуальных маркеров — проведение полного анализа проекта в специальном режиме\.


> На текущий момент сбор информации возможен только с помощью утилит \`pvs\-studio\-analyzer\` / \`CompilerCommandsAnalyzer\`\\\.



Утилита `pvs-studio-analyzer` / `CompilerCommandsAnalyzer`:

```cpp
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`\) проекта для составления [относительных путей](https://pvs-studio.ru/ru/docs/manual/0027/)\.

## Автоматическое удаление неактуальных маркеров

Для автоматического удаления неактуальных маркеров подавления из кодовой базы в составе дистрибутива предоставляется утилита `pvs-fp-cleaner`\.


> При анализе кода на разных платформах, генерируемые анализатором предупреждения могут отличаться\\\. Поэтому для кроссплатформенных проектов необходимо получить по экземпляру отчёта на каждую платформу и указать все отчёты в параметрах запуска утилиты очистки\\\.



После анализа проекта и получения отчёта можно запустить утилиту очистки, указав следующие аргументы:

```cpp
pvs-fp-cleaner cleanup \
               --sourcetree-root=/path/to/project \
               PATH...
```

где:

* `cleanup` — режим работы утилиты;
* `PATH...` — список путей к отчётам о неактуальных маркерах подавления;
* `sourcetree-root` — путь к корневой директории проекта для преобразования относительных путей из отчётов с разных платформ\.

Пример запуска:

```cpp
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`\.

```cpp
pvs-fp-cleaner merge \
               --sourcetree-root=/path/to/project \
               --output-file=/path/to/merged_report.json \
               PATH...
```

где:

* `merge` — режим работы утилиты;
* `sourcetree-root` — путь к корневой директории проекта для преобразования относительных путей из отчётов с разных платформ\. Также используется для того, чтобы производить слияние информации на одинаковых файлах при анализе с разных платформ;
* `output-file` — путь до результирующего отчёта после слияния;
* `PATH...` — список путей к отчётам о неактуальных маркерах подавления\.

Пример запуска:

```cpp
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`:

```cpp
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 с помощью предоставляемых плагинов:

![pvs-fp-cleaner_ru/image1.png](https://import.viva64.com/docx/blog/pvs-fp-cleaner_ru/image1.png)