no-unreachable
Запрещает недостижимый код после инструкций return, throw, continue и break
Использование конфигурации recommended из @eslint/js в файле конфигурации включает это правило
Поскольку инструкции return, throw, continue и break безусловно завершают блок кода, следующие за ними инструкции не могут быть выполнены. Недостижимые инструкции обычно являются ошибкой.
function fn() {
x = 1;
return x;
x = 3; // this will never execute
}
Ещё одна распространённая ошибка — определение полей экземпляра в подклассе, конструктор которого не вызывает super(). Поля экземпляра подкласса добавляются к экземпляру только после super(). Если вызовов super() нет, определения этих полей никогда не применяются и поэтому являются недостижимым кодом.
class C extends B {
#x; // this will never be added to instances
constructor() {
return {};
}
}
Подробности правила
Это правило запрещает недостижимый код после инструкций return, throw, continue и break. Оно также отмечает определения полей экземпляра в подклассах, конструкторы которых не содержат вызовов super().
Примеры неправильного кода для этого правила:
/*eslint no-unreachable: "error"*/
function foo() {
return true;
}
function bar() {
throw new Error("Oops!");
}
while(value) {
break;
}
throw new Error("Oops!");
function baz() {
if (Math.random() < 0.5) {
return;
} else {
throw new Error();
}
}
Примеры правильного кода для этого правила, учитывая поднятие функций и переменных в JavaScript:
/*eslint no-unreachable: "error"*/
function foo() {
return bar();
function bar() {
return 1;
}
}
function bar() {
return x;
var x;
}
switch (foo) {
case 1:
break;
var x;
}
Примеры дополнительного неправильного кода для этого правила:
/*eslint no-unreachable: "error"*/
class C extends B {
// unreachable
constructor() {
return {};
}
}
Примеры дополнительного правильного кода для этого правила:
/*eslint no-unreachable: "error"*/
class D extends B {
#x;
#y = 1;
a;
b = 1;
constructor() {
super();
}
}
class E extends B {
#x;
#y = 1;
a;
b = 1;
// implicit constructor always calls `super()`
}
class F extends B {
static #x;
static #y = 1;
static a;
static b = 1;
constructor() {
return {};
}
}
Параметры
У этого правила нет параметров.
Обрабатывается TypeScript
Это правило можно безопасно отключить при использовании TypeScript, поскольку компилятор TypeScript выполняет эту проверку.
Чтобы TypeScript считал недостижимый код ошибкой, необходимо настроить параметр allowUnreachableCode: false.
Версия
Это правило появилось в ESLint v0.0.6.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-unreachable