diff --git a/lib/rules/no-useless-return.js b/lib/rules/no-useless-return.js index 5df88c6873b..3ea4a3eda0c 100644 --- a/lib/rules/no-useless-return.js +++ b/lib/rules/no-useless-return.js @@ -168,12 +168,20 @@ module.exports = { for (const node of info.uselessReturns) { if (scopeInfo.traversedTryBlockStatements && scopeInfo.traversedTryBlockStatements.length > 0) { - const blockInitialRange = scopeInfo.traversedTryBlockStatements[0].range[0]; - const blockFinalRange = scopeInfo.traversedTryBlockStatements[0].range[1]; const returnInitialRange = node.range[0]; const returnFinalRange = node.range[1]; - if (returnInitialRange >= blockInitialRange && returnFinalRange <= blockFinalRange) { + const areBlocksInRange = scopeInfo.traversedTryBlockStatements.some(tryBlockStatement => { + const blockInitialRange = tryBlockStatement.range[0]; + const blockFinalRange = tryBlockStatement.range[1]; + + return ( + returnInitialRange >= blockInitialRange && + returnFinalRange <= blockFinalRange + ); + }); + + if (areBlocksInRange) { continue; } } diff --git a/tests/lib/rules/no-useless-return.js b/tests/lib/rules/no-useless-return.js index 1c9aa4f61f4..94093cd555a 100644 --- a/tests/lib/rules/no-useless-return.js +++ b/tests/lib/rules/no-useless-return.js @@ -19,7 +19,6 @@ const rule = require("../../../lib/rules/no-useless-return"), const ruleTester = new RuleTester(); ruleTester.run("no-useless-return", rule, { - valid: [ "function foo() { return 5; }", "function foo() { return null; }", @@ -490,6 +489,36 @@ ruleTester.run("no-useless-return", rule, { } ` }, + { + code: ` + function foo() { + try { + bar(); + } catch (e) { + try { + baz(); + return; + } catch (e) { + qux(); + } + } + } + `, + output: ` + function foo() { + try { + bar(); + } catch (e) { + try { + baz(); + + } catch (e) { + qux(); + } + } + } + ` + }, { code: ` function foo() { @@ -536,11 +565,21 @@ ruleTester.run("no-useless-return", rule, { { code: "function foo() { return; return; }", output: "function foo() { return; }", - errors: [{ - messageId: "unnecessaryReturn", - type: "ReturnStatement", - column: 18 - }] + errors: [ + { + messageId: "unnecessaryReturn", + type: "ReturnStatement", + column: 18 + } + ] } - ].map(invalidCase => Object.assign({ errors: [{ messageId: "unnecessaryReturn", type: "ReturnStatement" }] }, invalidCase)) + ].map(invalidCase => + Object.assign( + { + errors: [ + { messageId: "unnecessaryReturn", type: "ReturnStatement" } + ] + }, + invalidCase + )) });