From 5f39c3765e3300e63352e103d59b9496ffe6af12 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Fri, 1 Apr 2022 21:13:12 +0800 Subject: [PATCH] `no-array-for-each`: Add fix for parenthesized call (#1784) --- rules/no-array-for-each.js | 13 +++++------- test/no-array-for-each.mjs | 3 ++- test/snapshots/no-array-for-each.mjs.md | 24 ++++++++++++++++------ test/snapshots/no-array-for-each.mjs.snap | Bin 9952 -> 9981 bytes 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/rules/no-array-for-each.js b/rules/no-array-for-each.js index a1f74fc9fc..c883662869 100644 --- a/rules/no-array-for-each.js +++ b/rules/no-array-for-each.js @@ -17,7 +17,7 @@ const {getParentheses} = require('./utils/parentheses.js'); const isFunctionSelfUsedInside = require('./utils/is-function-self-used-inside.js'); const {isNodeMatches} = require('./utils/is-node-matches.js'); const assertToken = require('./utils/assert-token.js'); -const {fixSpaceAroundKeyword} = require('./fix/index.js'); +const {fixSpaceAroundKeyword, removeParentheses} = require('./fix/index.js'); const MESSAGE_ID_ERROR = 'no-array-for-each/error'; const MESSAGE_ID_SUGGESTION = 'no-array-for-each/suggestion'; @@ -209,6 +209,9 @@ function getFixFunction(callExpression, functionInfo, context) { } return function * (fixer) { + // `(( foo.forEach(bar => bar) ))` + yield * removeParentheses(callExpression, fixer, sourceCode); + // Replace these with `for (const … of …) ` // foo.forEach(bar => bar) // ^^^^^^^^^^^^^^^^^^ (space after `=>` didn't included) @@ -323,14 +326,8 @@ function isFunctionParameterVariableReassigned(callbackFunction, context) { } function isFixable(callExpression, {scope, functionInfo, allIdentifiers, context}) { - const sourceCode = context.getSourceCode(); // Check `CallExpression` - if ( - callExpression.optional - // TODO: Parenthesized should also be fixable. - || isParenthesized(callExpression, sourceCode) - || callExpression.arguments.length !== 1 - ) { + if (callExpression.optional || callExpression.arguments.length !== 1) { return false; } diff --git a/test/no-array-for-each.mjs b/test/no-array-for-each.mjs index 7a35962bf6..670ef4bdbd 100644 --- a/test/no-array-for-each.mjs +++ b/test/no-array-for-each.mjs @@ -21,8 +21,9 @@ test.snapshot({ invalid: [ 'foo.forEach?.(element => bar(element))', ...[ + '(( foo.forEach(element => bar(element)) ))', + // Not fixable - '(foo.forEach(element => bar(element)))', 'foo.forEach(element => bar(element), thisArgument)', 'foo.forEach()', 'const baz = foo.forEach(element => bar(element))', diff --git a/test/snapshots/no-array-for-each.mjs.md b/test/snapshots/no-array-for-each.mjs.md index 667ab195a2..f7c206ec06 100644 --- a/test/snapshots/no-array-for-each.mjs.md +++ b/test/snapshots/no-array-for-each.mjs.md @@ -15,23 +15,35 @@ Generated by [AVA](https://avajs.dev). ` ## Invalid #2 - 1 | (foo.forEach(element => bar(element))) + 1 | (( foo.forEach(element => bar(element)) )) + +> Output + + `␊ + 1 | for (const element of foo) bar(element) ␊ + ` > Error 1/1 `␊ - > 1 | (foo.forEach(element => bar(element)))␊ - | ^^^^^^^ Use \`for…of\` instead of \`Array#forEach(…)\`.␊ + > 1 | (( foo.forEach(element => bar(element)) ))␊ + | ^^^^^^^ Use \`for…of\` instead of \`Array#forEach(…)\`.␊ ` ## Invalid #3 - 1 | (foo?.forEach(element => bar(element))) + 1 | (( foo?.forEach(element => bar(element)) )) + +> Output + + `␊ + 1 | if (foo) for (const element of foo) bar(element) ␊ + ` > Error 1/1 `␊ - > 1 | (foo?.forEach(element => bar(element)))␊ - | ^^^^^^^ Use \`for…of\` instead of \`Array#forEach(…)\`.␊ + > 1 | (( foo?.forEach(element => bar(element)) ))␊ + | ^^^^^^^ Use \`for…of\` instead of \`Array#forEach(…)\`.␊ ` ## Invalid #4 diff --git a/test/snapshots/no-array-for-each.mjs.snap b/test/snapshots/no-array-for-each.mjs.snap index 65c89fabc46e2225b0730e36da12399c6d6e5571..f9538536628d7b05924c50493ee4b7aad9b359d6 100644 GIT binary patch literal 9981 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 HPTK$gN-wM0sikYwL_v-6_YzRSMT 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