From 65e927bca645bc6e2fe77a761a5df2ff63099ea1 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 24 Nov 2022 14:50:05 -0700 Subject: [PATCH] fix(`require-return-checks`): check return statements prior to last line; fixes #935 --- README.md | 11 +++++++++++ src/utils/hasReturnValue.js | 4 +++- test/rules/assertions/requireReturnsCheck.js | 15 +++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d92c486d5..4857db861 100644 --- a/README.md +++ b/README.md @@ -18392,6 +18392,17 @@ const f = () => { return function () {}; }; + +/** + * Description. + * + * @returns Result. + */ +export function f(): string { + return ""; + + interface I {} +} ```` diff --git a/src/utils/hasReturnValue.js b/src/utils/hasReturnValue.js index c31bb9e31..622f131bc 100644 --- a/src/utils/hasReturnValue.js +++ b/src/utils/hasReturnValue.js @@ -139,7 +139,9 @@ const allBrancheshaveReturnValues = (node, promFilter) => { case 'FunctionDeclaration': case 'ArrowFunctionExpression': { return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) || - allBrancheshaveReturnValues(node.body, promFilter); + allBrancheshaveReturnValues(node.body, promFilter) || node.body.body.some((nde) => { + return nde.type === 'ReturnStatement'; + }); } case 'BlockStatement': { diff --git a/test/rules/assertions/requireReturnsCheck.js b/test/rules/assertions/requireReturnsCheck.js index 2b36ba0f2..fb0135406 100755 --- a/test/rules/assertions/requireReturnsCheck.js +++ b/test/rules/assertions/requireReturnsCheck.js @@ -1490,5 +1490,20 @@ export default { }; `, }, + { + code: ` + /** + * Description. + * + * @returns Result. + */ + export function f(): string { + return ""; + + interface I {} + } + `, + parser: require.resolve('@typescript-eslint/parser'), + }, ], };