no-unreachable
Запретить недостижимый код после операторов return, throw, continue, и break
Использование конфигурации recommended из @eslint/js в файле конфигурации включает эту проверку.
Поскольку операторы return, throw, break, и continue безусловно завершают блок кода, любые операторы после них не могут быть выполнены. Недостижимые операторы обычно являются ошибкой.
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