版本

no-unreachable

禁止在 `return`、`throw`、`continue` 和 `break` 语句之后使用无法访问的代码

推荐

配置文件 中使用来自 `@eslint/js` 的 `recommended` 配置将启用此规则

由于 `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;
    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 函数和变量提升

在游乐场中打开
/*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 {
    #x; // unreachable
    #y = 1; // unreachable
    a; // unreachable
    b = 1; // 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 中引入的。

资源

更改语言