Spec-Zone.ru › ESLint

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

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

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