From 37e830008d388c473c8222e5ebe6f15ec4d39c1c Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Tue, 23 Jul 2019 14:29:31 -0700 Subject: [PATCH] fix(require-returns-check): check `WithStatement` for `return` statements --- README.md | 10 ++++++++++ src/jsdocUtils.js | 12 ++++++++++-- test/rules/assertions/requireReturnsCheck.js | 13 +++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6ffbbb6d4..876238b53 100644 --- a/README.md +++ b/README.md @@ -6622,6 +6622,16 @@ function quux () { } } +/** + * @returns {true} + */ +function quux () { + var a = {}; + with (a) { + return true; + } +} + /** * @returns {true} */ diff --git a/src/jsdocUtils.js b/src/jsdocUtils.js index 4ba3445a6..5faa8be36 100644 --- a/src/jsdocUtils.js +++ b/src/jsdocUtils.js @@ -276,7 +276,8 @@ const STATEMENTS_WITH_CHILDREN = [ 'SwitchStatement', 'IfStatement', 'BlockStatement', - 'TryStatement' + 'TryStatement', + 'WithStatement' ]; const RETURNFREE_STATEMENTS = [ @@ -288,7 +289,6 @@ const RETURNFREE_STATEMENTS = [ 'LabeledStatement', 'DebuggerStatement', 'EmptyStatement', - 'WithStatement', 'ThrowStatement', 'ExpressionStatement' ]; @@ -316,6 +316,14 @@ const lookupTable = { return true; } }, + WithStatement: { + is (node) { + return node.type === 'WithStatement'; + }, + check (node, context) { + return lookupTable.BlockStatement.check(node.body, context); + } + }, IfStatement: { is (node) { return node.type === 'IfStatement'; diff --git a/test/rules/assertions/requireReturnsCheck.js b/test/rules/assertions/requireReturnsCheck.js index b59d9fbec..cff5278a7 100755 --- a/test/rules/assertions/requireReturnsCheck.js +++ b/test/rules/assertions/requireReturnsCheck.js @@ -457,6 +457,19 @@ export default { } ` }, + { + code: ` + /** + * @returns {true} + */ + function quux () { + var a = {}; + with (a) { + return true; + } + } + ` + }, { code: ` /**