Перейти к содержанию

Раздел 22. Экранирование кода от проверок

В исходном коде модулей может возникнуть ситуация, когда необходимо игнорировать срабатывание правил. Данная ситуация может возникнуть по различным причинам:

  • Проектное решение;

  • Невозможность изменить код в принципе.

Для отключения срабатываний из кода была добавлена функциональность — экранирование кода от проверок.

Включение

По умолчанию обработка поглощающих комментариев отключена. Есть два взаимозаменяемых варианта включения:

  • добавить в файл sonar-project.properties параметр sonar.bsl.skipAbsorptionComments со значением false;

  • Через web-интерфейс SonarQube:

skip_comments

Описание

Для экранирования кода от срабатываний нужно добавить специальный комментарий в код по одному из следующих шаблонов:

// [Префикс]:[ФлагАктивации]
// [Префикс]:[КлючиПроверок]:[ФлагАктивации]
// [Префикс]:[КлючиПроверок]

где:

  • [Префикс] — префикс экранирования. Принимает варианты sonar или сонар в любом регистре;

  • [ФлагАктивации] — флаг, указывающий на действие включения / выключения проверки. Возможные варианты: для выключения — off или выкл в любом регистре; для включения — on или вкл в любом регистре;

  • [КлючиПроверок] — список ключей проверки, перечисленных через , без пробелов, которые нужно отключить. Ключ можно найти в описании проверки в SonarQube (верхний правый угол). Например:

image-20210628192026967

  • Готовые шаблоны для экранирования конкретных проверок можно найти в текущей документации на страницах описаний проверок. Например:

image-202302161304

Примеры

Отключить все проверки в модуле

Весь код, размещенный ниже одиночного комментария экранирования, будет изолирован от проверок кода. В общем случае достаточно в первой строке модуля разместить:

// sonar:off

или

// сонар:выкл

Отключить все проверки для участка кода

Для поглощения всех срабатываний в участке кода оберните код в экранирующие комментарии. Например:

// сонар:выкл
Сообщить("Сообщение пользователю #1");
Сообщить("Сообщение пользователю #1");
// сонар:вкл

Отключить конкретные правила для участка кода

Для поглощения срабатываний конкретных правил в участке кода оберните код в экранирующие комментарии. Например:

// сонар:MagicNumber,Spelling:выкл
Функция МагическоеЧисло()
    МагическоеЧисло = 100 + 1 / 99 * 100500;
    Возврат МагическоеЧисло
КонецФункции
// сонар:MagicNumber,Spelling:вкл

Отключить срабатывание конкретных правил в строке

Для поглощения срабатывания конкретной проверки в строке кода можно использовать комментарий, расположенный в конце строки. Например:

Функция МагическоеЧисло()
    МакическоеЧисло = 100 + 1 / 99 / 99 * 100500; // сонар:MagicNumber
КонецФункции

Для поглощения срабатываний нескольких проверок, перечислите их через ,:

Функция МагическоеЧисло()
    МакическоеЧисло = 100 + 1 / 99 / 99 * 100500; // сонар:MagicNumber,Spelling
КонецФункции

Особенности обработки команд

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

    МакическоеЧисло = 100 + 1 / 99 / 99 * 100500; // сонар:MagicNumber // сонар:Spelling

Для включения отключенной ранее проверки можно использовать комментарий включения конкретной проверки, включения списка проверок или общего включения проверок, например:

    // сонар:MagicNumber,Spelling,EmptyMethod:выкл
    ...
    <здесь не работают проверки правил MagicNumber, Spelling и EmptyMethod>
    ...
    // сонар:MagicNumber:вкл
    ...
    <здесь не работают проверки правил Spelling и EmptyMethod>
    ...
    // сонар:выкл
    ...
    <здесь не работают никакие проверки>
    ...
    // сонар:вкл
    ...
    <здесь работают все проверки, в т.ч. Spelling и EmptyMethod>
    ...