Spec-Zone.ru › ESLint

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().

Примеры неправильного кода для этого правила:

Открыть в Playground
/*eslint no-unreachable: "error"*/

function foo() {
    return true;
    console.log("done");
}

function bar() {
    throw new Error("Oops!");
    console.log("done");
}

while(value) {
    break;
    console.log("done");
}

throw new Error("Oops!");
console.log("done");

function baz() {
    if (Math.random() < 0.5) {
        return;
    } else {
        throw new Error();
    }
    console.log("done");
}

for(;;){}console.log("done");

Примеры правильного кода для этого правила, учитывая поднятие функций и переменных в JavaScript:

Открыть в Playground
/*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;
}

Примеры дополнительного неправильного кода для этого правила:

Открыть в Playground
/*eslint no-unreachable: "error"*/

class C extends B {
    #x;// unreachable    #y =1;// unreachable    a;// unreachable    b =1; // unreachable

    constructor() {
        return {};
    }
}

Примеры дополнительного правильного кода для этого правила:

Открыть в Playground
/*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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API