Недостижимый код (UnreachableCode)¶
| Тип | Поддерживаются языки |
Важность | Включена по умолчанию |
Время на исправление (мин) |
Теги |
|---|---|---|---|---|---|
Ошибка |
BSLOS |
Незначительный |
Да |
10 |
designsuspiciousunused |
Описание диагностики¶
Код, расположенный после операторов "Возврат", "Перейти", "ВызватьИсключение", "Прервать", "Продолжить", никогда не будет исполнен.
Ошибки недостижимого кода могут возникать в результате невнимательности разработчика, при редактировании "чужого кода".
Диагностика также обнаруживает ветки препроцессора, которые невозможны при любом допустимом наборе символов. Учитываются внешние условия и предыдущие ветки #Если / #ИначеЕсли / #Иначе.
В BSL дополнительно учитываются контексты модуля и директива метода. По умолчанию в клиентской процедуре управляемой формы ветки #Если Сервер и #Если Сервер И Клиент недостижимы. Если включена общая настройка supportThickClientFileMode, учитывается файловый толстый клиент: в нём символы Клиент и Сервер могут быть истинны одновременно, в том числе в клиентской процедуре формы. Неизвестные метаданные не ограничивают доступность сверх поддерживаемых проектом режимов. Настройки проверяемых контекстов других диагностик не используются.
В BSL присваивания и возвраты, исключённые по контекстам компиляции, не участвуют в выводе типов. После #Если Сервер И НЕ Сервер с присваиванием числа и #Иначе с присваиванием строки у переменной остаётся только тип Строка. Повторная проверка #Если Клиент учитывает значения из предыдущей клиентской ветки, в том числе через промежуточные переменные.
В OneScript активен ровно один из символов Windows, Linux, MacOS; MONO — независимый дополнительный символ. Ветка Linux внутри Windows, как и условие Windows И Linux, недостижима. Пользовательские символы приложения учитываются консервативно: ветка исключается только при доказанно невозможном условии.
Для исключённой ветки выделяется всё содержимое, включая методы, комментарии и вложенные области. Пересекающиеся сообщения объединяются. Диагностика передаёт тег LSP Unnecessary, поэтому редактор может приглушать недостижимый код.
Неполные или ошибочные инструкции препроцессора не используются для доказательства недостижимости. Если ложность сложного условия не доказана, сообщение не выдаётся.
Примеры¶
Код внутри этой ветки никогда не компилируется:
#Если Сервер И НЕ Сервер Тогда
Процедура Недоступная()
Сообщить("Этот код исключён");
КонецПроцедуры
#КонецЕсли
Процедура Пример()
Возврат;
// Код ниже оператора Возврат никогда не будет исполнен
Для каждого Строка Из Строки Цикл
Если Условие2 Тогда
Метод();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция Пример(Параметр1, Параметр2)
Если Ошибка Тогда
ВызватьИсключение "Возникла ошибка";
// После вызова исключения код будет проигнорирован
Параметр1 = Параметр2;
КонецЕсли;
Возврат Параметр1;
КонецПроцедуры
Сниппеты¶
Экранирование кода¶
// BSLLS:UnreachableCode-off
// BSLLS:UnreachableCode-on
Параметр конфигурационного файла¶
"UnreachableCode": false