From 3a1425f982c70b1c6216b6f0d0858e266883355c Mon Sep 17 00:00:00 2001 From: Armano Date: Mon, 17 Dec 2018 00:12:33 +0100 Subject: [PATCH] Fix: allow to use generator function as fix in fixer-return --- .gitignore | 2 ++ lib/rules/fixer-return.js | 15 ++++++++++++- tests/lib/rules/fixer-return.js | 39 +++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index d4ea8dbf..218bab36 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ node_modules/ npm-debug.log .vscode +.idea +yarn.lock diff --git a/lib/rules/fixer-return.js b/lib/rules/fixer-return.js index 1228bbf6..4529d280 100644 --- a/lib/rules/fixer-return.js +++ b/lib/rules/fixer-return.js @@ -32,6 +32,7 @@ module.exports = { upper: null, codePath: null, hasReturn: false, + hasYield: false, shouldCheck: false, node: null, }; @@ -48,7 +49,11 @@ module.exports = { * @returns {void} */ function checkLastSegment (node) { - if (funcInfo.shouldCheck && funcInfo.codePath.currentSegments.some(segment => segment.reachable)) { + if ( + funcInfo.shouldCheck && + funcInfo.codePath.currentSegments.some(segment => segment.reachable) && + (!node.generator || !funcInfo.hasYield) + ) { context.report({ node, loc: (node.id || node).loc.start, @@ -75,6 +80,7 @@ module.exports = { funcInfo = { upper: funcInfo, codePath, + hasYield: false, hasReturn: false, shouldCheck, node, @@ -86,6 +92,13 @@ module.exports = { funcInfo = funcInfo.upper; }, + // Yield in generators + YieldExpression () { + if (funcInfo.shouldCheck) { + funcInfo.hasYield = true; + } + }, + // Checks the return statement is valid. ReturnStatement (node) { if (funcInfo.shouldCheck) { diff --git a/tests/lib/rules/fixer-return.js b/tests/lib/rules/fixer-return.js index 23ee5ca2..d8c6e2dd 100644 --- a/tests/lib/rules/fixer-return.js +++ b/tests/lib/rules/fixer-return.js @@ -33,6 +33,20 @@ ruleTester.run('fixer-return', rule, { }; `, ` + module.exports = { + create: function(context) { + context.report( { + fix: function(fixer) { + return [ + fixer.foo(), + fixer.bar() + ]; + } + }); + } + }; + `, + ` module.exports = { create: function(context) { context.report({ @@ -41,6 +55,17 @@ ruleTester.run('fixer-return', rule, { } }; `, + ` + module.exports = { + create: function (context) { + context.report({ + fix: function* (fixer) { + yield fixer.foo(); + } + }); + } + }; + `, ], invalid: [ @@ -58,5 +83,19 @@ ruleTester.run('fixer-return', rule, { `, errors: [ERROR], }, + { + code: ` + module.exports = { + create: function(context) { + context.report({ + *fix(fixer) { + fixer.foo(); + } + }); + } + }; + `, + errors: [ERROR], + }, ], });