diff --git a/crates/oxc_linter/src/rules/eslint/no_else_return.rs b/crates/oxc_linter/src/rules/eslint/no_else_return.rs index 54fb45363..8c219c9c9 100644 --- a/crates/oxc_linter/src/rules/eslint/no_else_return.rs +++ b/crates/oxc_linter/src/rules/eslint/no_else_return.rs @@ -16,9 +16,9 @@ declare_oxc_lint!( /// Disallow `else` blocks after `return` statements in `if` statements /// /// ### Why is this bad? - /// If an if block contains a return statement, the else block becomes unnecessary. Its contents can be placed outside of the block. + /// If an `if` block contains a `return` statement, the `else` block becomes + /// unnecessary. Its contents can be placed outside of the block. /// - /// ### Example /// ```javascript /// function foo() { /// if (x) { @@ -28,15 +28,146 @@ declare_oxc_lint!( /// } /// } /// ``` + /// + /// This rule is aimed at highlighting an unnecessary block of code + /// following an `if` containing a return statement. As such, it will warn + /// when it encounters an `else` following a chain of `if`s, all of them + /// containing a `return` statement. + /// + /// Options + /// This rule has an object option: + /// + /// - `allowElseIf`: `true` _(default)_ allows `else if` blocks after a return + /// - `allowElseIf`: `false` disallows `else if` blocks after a return + /// + /// ### Examples + /// + /// #### `allowElseIf: true` + /// Examples of **incorrect** code for this rule: + /// ```javascript + /// function foo1() { + /// if (x) { + /// return y; + /// } else { + /// return z; + /// } + /// } + /// + /// function foo2() { + /// if (x) { + /// return y; + /// } else if (z) { + /// return w; + /// } else { + /// return t; + /// } + /// } + /// + /// function foo3() { + /// if (x) { + /// return y; + /// } else { + /// var t = "foo"; + /// } + /// + /// return t; + /// } + /// + /// function foo4() { + /// if (error) { + /// return 'It failed'; + /// } else { + /// if (loading) { + /// return "It's still loading"; + /// } + /// } + /// } + /// + /// // Two warnings for nested occurrences + /// function foo5() { + /// if (x) { + /// if (y) { + /// return y; + /// } else { + /// return x; + /// } + /// } else { + /// return z; + /// } + /// } + /// ``` + /// + /// Examples of **correct** code for this rule: + /// ```javascript + /// function foo1() { + /// if (x) { + /// return y; + /// } + /// + /// return z; + /// } + /// + /// function foo2() { + /// if (x) { + /// return y; + /// } else if (z) { + /// var t = "foo"; + /// } else { + /// return w; + /// } + /// } + /// + /// function foo3() { + /// if (x) { + /// if (z) { + /// return y; + /// } + /// } else { + /// return z; + /// } + /// } + /// + /// function foo4() { + /// if (error) { + /// return 'It failed'; + /// } else if (loading) { + /// return "It's still loading"; + /// } + /// } + /// ``` + /// + /// #### `allowElseIf: false` + /// + /// Examples of **incorrect** code for this rule: + /// ```javascript + /// function foo() { + /// if (error) { + /// return 'It failed'; + /// } else if (loading) { + /// return "It's still loading"; + /// } + /// } + /// ``` + /// + /// Examples of **correct** code for this rule: + /// ```javascript + /// function foo() { + /// if (error) { + /// return 'It failed'; + /// } + /// + /// if (loading) { + /// return "It's still loading"; + /// } + /// } + /// ``` NoElseReturn, suspicious, fix ); fn no_else_return_diagnostic(else_stmt: &Statement) -> OxcDiagnostic { - OxcDiagnostic::warn("Disallow `else` blocks after `return` statements in `if` statements") - .with_help("Unnecessary 'else' after 'return'.") - .with_label(else_stmt.span()) + OxcDiagnostic::warn("Unnecessary 'else' after 'return'.").with_label(else_stmt.span()) } fn is_safe_from_name_collisions( diff --git a/crates/oxc_linter/src/snapshots/no_else_return.snap b/crates/oxc_linter/src/snapshots/no_else_return.snap index 8635d8d16..8bbeb1532 100644 --- a/crates/oxc_linter/src/snapshots/no_else_return.snap +++ b/crates/oxc_linter/src/snapshots/no_else_return.snap @@ -1,586 +1,572 @@ --- source: crates/oxc_linter/src/tester.rs --- - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:48] 1 │ function foo1() { if (true) { return x; } else { return y; } } · ───────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { return y; }` with ` return y; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:61] 1 │ function foo2() { if (true) { var x = bar; return x; } else { var y = baz; return y; } } · ────────────────────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { var y = baz; return y; }` with ` var y = baz; return y; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:44] 1 │ function foo3() { if (true) return x; else return y; } · ───────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else return y;` with ` return y;`. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:74] 1 │ function foo4() { if (true) { if (false) return x; else return y; } else { return z; } } · ───────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { return z; }` with ` return z; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:57] 1 │ function foo4() { if (true) { if (false) return x; else return y; } else { return z; } } · ───────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else return y;` with ` return y;`. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:69] 1 │ function foo5() { if (true) { if (false) { if (true) return x; else { w = y; } } else { w = x; } } else { return z; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { w = y; }` with ` w = y; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:69] 1 │ function foo6() { if (true) { if (false) { if (true) return x; else return y; } } else { return z; } } · ───────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else return y;` with ` return y;`. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:98] 1 │ function foo7() { if (true) { if (false) { if (true) return x; else return y; } return w; } else { return z; } } · ───────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { return z; }` with ` return z; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:69] 1 │ function foo7() { if (true) { if (false) { if (true) return x; else return y; } return w; } else { return z; } } · ───────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else return y;` with ` return y;`. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:86] 1 │ function foo8() { if (true) { if (false) { if (true) return x; else return y; } else { w = x; } } else { return z; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { w = x; }` with ` w = x; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:69] 1 │ function foo8() { if (true) { if (false) { if (true) return x; else return y; } else { w = x; } } else { return z; } } · ───────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else return y;` with ` return y;`. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:76] 1 │ function foo9() {if (x) { return true; } else if (y) { return true; } else { notAReturn(); } } · ───────────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { notAReturn(); }` with ` notAReturn(); `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:48] 1 │ function foo9a() {if (x) { return true; } else if (y) { return true; } else { notAReturn(); } } · ────────────────────────────────────────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else if (y) { return true; } else { notAReturn(); }` with ` if (y) { return true; } else { notAReturn(); }`. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:72] 1 │ function foo9b() {if (x) { return true; } if (y) { return true; } else { notAReturn(); } } · ───────────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { notAReturn(); }` with ` notAReturn(); `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:46] 1 │ function foo10() { if (foo) return bar; else (foo).bar(); } · ──────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else (foo).bar();` with ` (foo).bar();`. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:2:9] 1 │ function foo11() { if (foo) return bar 2 │ else { [1, 2, 3].map(foo) } } · ────────────────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` + else { [1, 2, 3].map(foo) }` with ` + [1, 2, 3].map(foo) `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:2:9] 1 │ function foo12() { if (foo) return bar 2 │ else { baz() } · ───────── 3 │ [1, 2, 3].map(foo) } ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` + else { baz() }` with ` + baz() `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:2:9] 1 │ function foo13() { if (foo) return bar; 2 │ else { [1, 2, 3].map(foo) } } · ────────────────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` + else { [1, 2, 3].map(foo) }` with ` + [1, 2, 3].map(foo) `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:2:9] 1 │ function foo14() { if (foo) return bar 2 │ else { baz(); } · ────────── 3 │ [1, 2, 3].map(foo) } ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` + else { baz(); }` with ` + baz(); `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:46] 1 │ function foo15() { if (foo) return bar; else { baz() } qaz() } · ───────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { baz() }` with ` baz() `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:2:9] 1 │ function foo16() { if (foo) return bar 2 │ else { baz() } qaz() } · ───────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` + else { baz() }` with ` + baz() `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:2:9] 1 │ function foo17() { if (foo) return bar 2 │ else { baz() } · ───────── 3 │ qaz() } ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` + else { baz() }` with ` + baz() `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:2:9] 1 │ function foo18() { if (foo) return function() {} 2 │ else [1, 2, 3].map(bar) } · ────────────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` + else [1, 2, 3].map(bar)` with ` + [1, 2, 3].map(bar)`. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:49] 1 │ function foo19() { if (true) { return x; } else if (false) { return y; } } · ──────────────────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else if (false) { return y; }` with ` if (false) { return y; }`. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:48] 1 │ function foo20() {if (x) { return true; } else if (y) { notAReturn() } else { notAReturn(); } } · ────────────────────────────────────────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else if (y) { notAReturn() } else { notAReturn(); }` with ` if (y) { notAReturn() } else { notAReturn(); }`. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:60] 1 │ function foo21() { var x = true; if (x) { return x; } else if (x === false) { return false; } } · ────────────────────────────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else if (x === false) { return false; }` with ` if (x === false) { return false; }`. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:56] 1 │ function foo() { var a; if (bar) { return true; } else { var a; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { var a; }` with ` var a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:67] 1 │ function foo() { if (bar) { var a; if (baz) { return true; } else { var a; } } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { var a; }` with ` var a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:56] 1 │ function foo() { var a; if (bar) { return true; } else { var a; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { var a; }` with ` var a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:67] 1 │ function foo() { if (bar) { var a; if (baz) { return true; } else { var a; } } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { var a; }` with ` var a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:56] 1 │ function foo() { let a; if (bar) { return true; } else { let a; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:59] 1 │ class foo { bar() { let a; if (baz) { return true; } else { let a; } } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:67] 1 │ function foo() { if (bar) { let a; if (baz) { return true; } else { let a; } } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:66] 1 │ function foo() {let a; if (bar) { if (baz) { return true; } else { let a; } } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:62] 1 │ function foo() { const a = 1; if (bar) { return true; } else { let a; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:73] 1 │ function foo() { if (bar) { const a = 1; if (baz) { return true; } else { let a; } } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:56] 1 │ function foo() { let a; if (bar) { return true; } else { const a = 1 } } · ─────────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:67] 1 │ function foo() { if (bar) { let a; if (baz) { return true; } else { const a = 1; } } } · ──────────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:61] 1 │ function foo() { class a {}; if (bar) { return true; } else { const a = 1; } } · ──────────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:72] 1 │ function foo() { if (bar) { class a {}; if (baz) { return true; } else { const a = 1; } } } · ──────────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:62] 1 │ function foo() { const a = 1; if (bar) { return true; } else { class a {} } } · ────────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:73] 1 │ function foo() { if (bar) { const a = 1; if (baz) { return true; } else { class a {} } } } · ────────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:56] 1 │ function foo() { var a; if (bar) { return true; } else { let a; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:56] 1 │ function foo() { if (bar) { var a; return true; } else { let a; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:49] 1 │ function foo() { if (bar) { return true; } else { let a; } while (baz) { var a; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:50] 1 │ function foo(a) { if (bar) { return true; } else { let a; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:54] 1 │ function foo(a = 1) { if (bar) { return true; } else { let a; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:57] 1 │ function foo(a, b = a) { if (bar) { return true; } else { let a; } if (bar) { return true; } else { let b; }} · ────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:100] 1 │ function foo(a, b = a) { if (bar) { return true; } else { let a; } if (bar) { return true; } else { let b; }} · ────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:56] 1 │ function foo(...args) { if (bar) { return true; } else { let args; } } · ───────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:68] 1 │ function foo() { try {} catch (a) { if (bar) { return true; } else { let a; } } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:79] 1 │ function foo() { try {} catch (a) { if (bar) { if (baz) { return true; } else { let a; } } } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:79] 1 │ function foo() { try {} catch ({bar, a = 1}) { if (baz) { return true; } else { let a; } } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:49] 1 │ function foo() { if (bar) { return true; } else { let arguments; } } · ────────────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let arguments; }` with ` let arguments; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:49] 1 │ function foo() { if (bar) { return true; } else { let arguments; } return arguments[0]; } · ────────────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let arguments; }` with ` let arguments; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:49] 1 │ function foo() { if (bar) { return true; } else { let arguments; } if (baz) { return arguments[0]; } } · ────────────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let arguments; }` with ` let arguments; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:60] 1 │ function foo() { if (bar) { if (baz) { return true; } else { let arguments; } } } · ────────────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let arguments; }` with ` let arguments; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:49] 1 │ function foo() { if (bar) { return true; } else { let a; } a; } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:49] 1 │ function foo() { if (bar) { return true; } else { let a; } if (baz) { a; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:60] 1 │ function foo() { if (bar) { if (baz) { return true; } else { let a; } } a; } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:60] 1 │ function foo() { if (bar) { if (baz) { return true; } else { let a; } a; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:60] 1 │ function foo() { if (bar) { if (baz) { return true; } else { let a; } if (quux) { a; } } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:47] 1 │ function a() { if (foo) { return true; } else { let a; } a(); } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:45] 1 │ function a() { if (a) { return true; } else { let a; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:44] 1 │ function a() { if (foo) { return a; } else { let a; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:49] 1 │ function foo() { if (bar) { return true; } else { let a; } function baz() { a; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:60] 1 │ function foo() { if (bar) { if (baz) { return true; } else { let a; } (() => a) } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:49] 1 │ function foo() { if (bar) { return true; } else { let a; } var a; } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:60] 1 │ function foo() { if (bar) { if (baz) { return true; } else { let a; } var a; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:60] 1 │ function foo() { if (bar) { if (baz) { return true; } else { let a; } var { a } = {}; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:60] 1 │ function foo() { if (bar) { if (baz) { return true; } else { let a; } if (quux) { var a; } } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:60] 1 │ function foo() { if (bar) { if (baz) { return true; } else { let a; } } if (quux) { var a; } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:81] 1 │ function foo() { if (quux) { var a; } if (bar) { if (baz) { return true; } else { let a; } } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:49] 1 │ function foo() { if (bar) { return true; } else { let a; } function a(){} } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:60] 1 │ function foo() { if (baz) { if (bar) { return true; } else { let a; } function a(){} } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:60] 1 │ function foo() { if (bar) { if (baz) { return true; } else { let a; } } if (quux) { function a(){} } } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:60] 1 │ function foo() { if (bar) { if (baz) { return true; } else { let a; } } function a(){} } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:56] 1 │ function foo() { let a; if (bar) { return true; } else { function a(){} } } · ────────────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:56] 1 │ function foo() { var a; if (bar) { return true; } else { function a(){} } } · ────────────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:49] 1 │ function foo() { if (bar) { return true; } else function baz() {} }; · ───────────────── ╰──── - help: Unnecessary 'else' after 'return'. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:32] 1 │ if (foo) { return true; } else { let a; } · ────────── ╰──── - help: Unnecessary 'else' after 'return'. + help: Replace ` else { let a; }` with ` let a; `. - ⚠ eslint(no-else-return): Disallow `else` blocks after `return` statements in `if` statements + ⚠ eslint(no-else-return): Unnecessary 'else' after 'return'. ╭─[no_else_return.tsx:1:39] 1 │ let a; if (foo) { return true; } else { let a; } · ────────── ╰──── - help: Unnecessary 'else' after 'return'.