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

Экранирование кода от диагностик

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

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

Описание

Для того, чтобы скрыть часть кода от анализатора BSL LS, необходимо добавить в код специальный комментарий.
Комментарий экранирования в общем случае формируется следующим образом: [Префикс][:КлючДиагностики]-[ФлагАктивации]. Теперь по-подробнее.

  • Префикс всегда равен // BSLLS
  • КлючДиагностики можно узнать в списке диагностик, найдя нужную по описанию
  • ФлагАктивации строковый признак включения/выключения диагностики. Поддерживается русский (вкл и выкл) и английский (on и off) варианты.

Для того, чтобы отключить ВСЕ диагностики для части кода, необходимо опустить указание ключа диагностики.

Примеры и варианты использования

Отключить все диагностики в модуле

Для отключения всех диагностик в модуле, т.е. по-сути скрыть модуль от анализатора BSL LS, необходимо в начале модуля вставить комментарий // BSLLS-off (или // BSLLS-выкл)

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

Для отключения конкретных диагностик в модуле (возьмем для примера когнитивную сложность CognitiveComplexity и ограничение на размер метода MethodSize), необходимо в начале модуля вставить комментарий // BSLLS:CognitiveComplexity-off и // BSLLS:MethodSize-off (или // BSLLS:CognitiveComplexity-выкл и // BSLLS:MethodSize-выкл)

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

Если необходимо отключить диагностики для участка кода, оставив возможность BSL LS анализировать оставшие, необходимо обернуть скрываемый участок кода по примеру

// BSLLS-off
Процедура СкрываемаяОтBSLLSПроцедура()
    // Невидимое содержимое процедуры
КонецПроцедуры
// BSLLS-on

Процедура ВидимаяBSLLSПроцедура()
    // Видимое содержимое процедуры
КонецПроцедуры

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

Если необходимо отключить конкретные диагностики (возьмем для примера когнитивную сложность CognitiveComplexity и ограничение на размер метода MethodSize) для участка кода, необходимо обернуть скрываемый участок кода по примеру

// BSLLS:MethodSize-off
Процедура СкрываемаяОтMethodSizeПроцедура()
    // Очень длинное тело метода
КонецПроцедуры
// BSLLS:MethodSize-on

// BSLLS:CognitiveComplexity-off
Процедура СкрываемаяОтCognitiveComplexityПроцедура()
    // Очень сложное и непонятное содержимое
КонецПроцедуры
// BSLLS:CognitiveComplexity-on

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

// BSLLS:CognitiveComplexity-off
// BSLLS:MethodSize-off
Процедура СкрываемаяОтMethodSizeCognitiveComplexityПроцедура()
    // Очень длинное тело метода, непонятное никому
КонецПроцедуры
// BSLLS:MethodSize-on

Процедура СкрываемаяОтCognitiveComplexityПроцедура()
    // Очень сложное и непонятное содержимое, но не длинное
КонецПроцедуры
// BSLLS:CognitiveComplexity-on

Отключить диагностику для одной строки

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

Процедура ВидимаяBSLLS()
    // С помощью висячего комментария скрыта следующая строка от диагностики "Каноническое написание ключевых слов"
    Если Истина тогда // BSLLS:CanonicalSpellingKeywords-выкл
        // Видимое содержимое
    КонецЕсли;
КонецПроцедуры