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

BSL200 - Неправильный перенос выражения

Кратко

Неправильный перенос выражения

Идентификаторы

Поле Значение
Код правила BSL200
Совместимый псевдоним IncorrectLineBreak
Серьёзность INFORMATION
Без конфигурации Да
BSLLS JSON, режим ON без переопределений Да
Флаг реестра implemented Да
Теги style, convention

Флаг implemented отражает реестр и не подтверждает проверенное совпадение с BSLLS.

Поведение

  • Публичный идентификатор BSL200 и псевдоним IncorrectLineBreak стабильны.
  • Правило сообщает о случаях, описанных на этой странице.
  • Подавления и проектная конфигурация применяются до публикации результата.
  • Для выполнения правила не требуется внешний анализатор или сетевой доступ.

Настройка и подавление

Код BSL### - основной стабильный идентификатор. Совместимый псевдоним принимается в select, ignore и совместимых блоковых комментариях.

[tool.onec-hbk-bsl]
select = ["BSL200"]
ignore = ["IncorrectLineBreak"]

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

  • noqa:
Значение = "пример";  // noqa: BSL200
  • bsl-disable (совместимый вариант):
Значение = "пример";  // bsl-disable: BSL200
  • совместимый BSLLS-вариант:
Значение = "пример";  // BSLLS:IncorrectLineBreak-off

Если тот же открывающий комментарий стоит на отдельной строке, он начинает диапазон. Закройте его парным маркером того же семейства:

// noqa: BSL200
// код без этой диагностики
// noqa-enable: BSL200

// bsl-disable: BSL200
// код без этой диагностики
// bsl-enable: BSL200

// BSLLS:IncorrectLineBreak-off
// код без этой диагностики
// BSLLS:IncorrectLineBreak-on

Чтобы отключить правило до конца файла, не добавляйте закрывающий noqa-enable, bsl-enable или BSLLS:…-on.

Открывающий и закрывающий маркеры должны принадлежать одному семейству.

Описание диагностики

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

При необходимости параметры процедур, функций и методов следует переносить следующим образом:

  • параметры выравниваются по началу первого параметра, либо предваряются стандартным отступом;
  • закрывающая скобка и разделитель операторов ";" пишутся в той же строке, что и последний параметр;
  • также допустим и способ форматирования, который предлагает функция автоформатирования в конфигураторе

Сложные логические условия в Если…ИначеЕсли…КонецЕсли следует переносить следующим образом:

  • каждое элементарное условие нужно начинать с новой строки, если длина строки превышает ограничение в 120 символов;
  • логические операторы И, ИЛИ ставятся в начале строки, а не в конце предыдущей строки;
  • все условия предваряются стандартным отступом, либо выравниваются по началу первого условия, без учета логического оператора (для выравнивания выражений относительно первой строки рекомендуется использовать пробелы).

Примеры настройки исключений:

  • Если стандарт вашей команды требует, чтобы закрывающая скобка и разделитель операторов ";" были написаны после строки, на которой указан последний параметр, нужно исправить настройку параметра listOfIncorrectFirstSymbol
  • вместо подстроки |\); (в конце настройки) нужно написать подстроку |\)\s*;\s*\S+
  • пример финальной строки \)|;|,\s*\S+|\)s*;\s*\S+
  • пример кода указан в секции примеров

Без указанной настройки правило будет выдавать замечания на закрывающую скобка и разделитель операторов ";", если они на отдельной строке.

Примеры

Неправильно:

СуммаДокумента = СуммаБезСкидки +
                 СуммаРучнойСкидки +
                 СуммаАвтоматическойСкидки;

Правильно:

СуммаДокумента = СуммаБезСкидки
    + СуммаРучнойСкидки
    + СуммаАвтоматическойСкидки;

или

СуммаДокумента = СуммаБезСкидки
                 + СуммаРучнойСкидки
                 + СуммаАвтоматическойСкидки;

Пример возможного расположения параметров и закрывающей скобки с разделителем операторов ";"

ИменаДокументов = Новый СписокЗначений;
ИменаДокументов.Добавить(Метаданные.Документы.СтрокаВыпискиРасход.Имя,
                         Метаданные.Документы.СтрокаВыпискиРасход.Синоним);

Пример возможного расположения закрывающей скобки с разделителем операторов ";" на отдельной строке: - без изменения параметра listOfIncorrectFirstSymbol, описанного выше, правило будет выдавать замечание на такой перенос выражений.

ИменаДокументов = Новый СписокЗначений;
ИменаДокументов.Добавить(
    Метаданные.Документы.СтрокаВыпискиРасход.Имя,
    Метаданные.Документы.СтрокаВыпискиРасход.Синоним
);

Источники