From 989fe9d5fe8e59751a351a18c1ee2a470a26642d Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 26 May 2022 12:41:08 +0800 Subject: [PATCH] `no-array-for-each`: Simplify fix (#1826) --- rules/no-array-for-each.js | 19 +-- test/no-array-for-each.mjs | 6 +- test/snapshots/no-array-for-each.mjs.md | 134 +++++++++++----------- test/snapshots/no-array-for-each.mjs.snap | Bin 12354 -> 12331 bytes 4 files changed, 75 insertions(+), 84 deletions(-) diff --git a/rules/no-array-for-each.js b/rules/no-array-for-each.js index 98cbe49f28..15103e021c 100644 --- a/rules/no-array-for-each.js +++ b/rules/no-array-for-each.js @@ -1,7 +1,6 @@ 'use strict'; const { isParenthesized, - isArrowToken, isCommaToken, isSemicolonToken, isClosingParenToken, @@ -13,7 +12,7 @@ const {extendFixRange} = require('./fix/index.js'); const needsSemicolon = require('./utils/needs-semicolon.js'); const shouldAddParenthesesToExpressionStatementExpression = require('./utils/should-add-parentheses-to-expression-statement-expression.js'); const shouldAddParenthesesToMemberExpressionObject = require('./utils/should-add-parentheses-to-member-expression-object.js'); -const {getParentheses} = require('./utils/parentheses.js'); +const {getParentheses, getParenthesizedRange} = 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'); @@ -119,17 +118,7 @@ function getFixFunction(callExpression, functionInfo, context) { const getForOfLoopHeadRange = () => { const [start] = callExpression.range; - let end; - if (callback.body.type === 'BlockStatement') { - end = callback.body.range[0]; - } else { - // In this case, parentheses are not included in body location, so we look for `=>` token - // foo.forEach(bar => ({bar})) - // ^ - const arrowToken = sourceCode.getTokenBefore(callback.body, isArrowToken); - end = arrowToken.range[1]; - } - + const [end] = getParenthesizedRange(callback.body, sourceCode); return [start, end]; }; @@ -215,7 +204,9 @@ function getFixFunction(callExpression, functionInfo, context) { // Replace these with `for (const … of …) ` // foo.forEach(bar => bar) - // ^^^^^^^^^^^^^^^^^^ (space after `=>` didn't included) + // ^^^^^^^^^^^^^^^^^^^^^^ + // foo.forEach(bar => (bar)) + // ^^^^^^^^^^^^^^^^^^^^^^ // foo.forEach(bar => {}) // ^^^^^^^^^^^^^^^^^^^^^^ // foo.forEach(function(bar) {}) diff --git a/test/no-array-for-each.mjs b/test/no-array-for-each.mjs index aa77f39e2a..2e0db378f8 100644 --- a/test/no-array-for-each.mjs +++ b/test/no-array-for-each.mjs @@ -555,7 +555,7 @@ test.typescript({ }) `, output: outdent` - for (const pg of staticPages) allStaticPages.add(pg) + for (const pg of staticPages) allStaticPages.add(pg) pageInfos.forEach((info: PageInfo, key: string) => { allPageInfos.set(key, info) }) @@ -590,7 +590,7 @@ test.typescript({ `, output: outdent` const cloakVals: string[] = []; - for (const element of elements) cloakVals.push(cloakElement(element)); + for (const element of elements) cloakVals.push(cloakElement(element)); `, errors: 1, }, @@ -621,7 +621,7 @@ test({ `, output: outdent` while (true) return; - for (const element of foo) bar(element); + for (const element of foo) bar(element); `, errors: 1, parserOptions: globalReturnOptions, diff --git a/test/snapshots/no-array-for-each.mjs.md b/test/snapshots/no-array-for-each.mjs.md index da2d17333f..cefabd97c5 100644 --- a/test/snapshots/no-array-for-each.mjs.md +++ b/test/snapshots/no-array-for-each.mjs.md @@ -20,7 +20,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const element of foo) bar(element) ␊ + 1 | for (const element of foo) bar(element) ␊ ` > Error 1/1 @@ -36,7 +36,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if (foo) for (const element of foo) bar(element) ␊ + 1 | if (foo) for (const element of foo) bar(element) ␊ ` > Error 1/1 @@ -774,7 +774,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const foo of a((foo) => foo)) bar();␊ + 1 | for (const foo of a((foo) => foo)) bar();␊ ` > Error 1/1 @@ -795,7 +795,7 @@ Generated by [AVA](https://avajs.dev). ␊ --------------------------------------------------------------------------------␊ Suggestion 1/1: Switch to \`for…of\`.␊ - 1 | if (a((foo) => foo)) for (const foo of a((foo) => foo)) bar();␊ + 1 | if (a((foo) => foo)) for (const foo of a((foo) => foo)) bar();␊ ` ## Invalid #60 @@ -804,7 +804,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const [index, foo] of a((foo, index) => foo + index).entries()) bar();␊ + 1 | for (const [index, foo] of a((foo, index) => foo + index).entries()) bar();␊ ` > Error 1/1 @@ -825,7 +825,7 @@ Generated by [AVA](https://avajs.dev). ␊ --------------------------------------------------------------------------------␊ Suggestion 1/1: Switch to \`for…of\`.␊ - 1 | if (a((foo, index) => foo + index)) for (const [index, foo] of a((foo, index) => foo + index).entries()) bar();␊ + 1 | if (a((foo, index) => foo + index)) for (const [index, foo] of a((foo, index) => foo + index).entries()) bar();␊ ` ## Invalid #62 @@ -838,7 +838,7 @@ Generated by [AVA](https://avajs.dev). `␊ 1 | const foo = [];␊ 2 | const index = 1;␊ - 3 | for (const [index, foo] of a.entries()) foo[index];␊ + 3 | for (const [index, foo] of a.entries()) foo[index];␊ ` > Error 1/1 @@ -860,7 +860,7 @@ Generated by [AVA](https://avajs.dev). `␊ 1 | const foo = [];␊ 2 | const index = 1;␊ - 3 | if (a) for (const [index, foo] of a.entries()) foo[index];␊ + 3 | if (a) for (const [index, foo] of a.entries()) foo[index];␊ ` > Error 1/1 @@ -1518,7 +1518,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const element of foo) bar(element);␊ + 1 | for (const element of foo) bar(element);␊ ` > Error 1/1 @@ -1534,7 +1534,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if (foo) for (const element of foo) bar(element);␊ + 1 | if (foo) for (const element of foo) bar(element);␊ ` > Error 1/1 @@ -1682,7 +1682,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const [index, element] of foo.entries()) bar(element, index);␊ + 1 | for (const [index, element] of foo.entries()) bar(element, index);␊ ` > Error 1/1 @@ -1698,7 +1698,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if (foo) for (const [index, element] of foo.entries()) bar(element, index);␊ + 1 | if (foo) for (const [index, element] of foo.entries()) bar(element, index);␊ ` > Error 1/1 @@ -1714,7 +1714,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const element of foo?.bar) bar(element);␊ + 1 | for (const element of foo?.bar) bar(element);␊ ` > Error 1/1 @@ -1730,7 +1730,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if (foo?.bar) for (const element of foo?.bar) bar(element);␊ + 1 | if (foo?.bar) for (const element of foo?.bar) bar(element);␊ ` > Error 1/1 @@ -1746,7 +1746,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const element of foo.bar) log(element)␊ + 1 | for (const element of foo.bar) log(element)␊ ` > Error 1/1 @@ -1762,7 +1762,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if (foo.bar) for (const element of foo.bar) log(element)␊ + 1 | if (foo.bar) for (const element of foo.bar) log(element)␊ ` > Error 1/1 @@ -1778,7 +1778,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const element of foo.bar()) log(element)␊ + 1 | for (const element of foo.bar()) log(element)␊ ` > Error 1/1 @@ -1799,7 +1799,7 @@ Generated by [AVA](https://avajs.dev). ␊ --------------------------------------------------------------------------------␊ Suggestion 1/1: Switch to \`for…of\`.␊ - 1 | if (foo.bar()) for (const element of foo.bar()) log(element)␊ + 1 | if (foo.bar()) for (const element of foo.bar()) log(element)␊ ` ## Invalid #110 @@ -1808,7 +1808,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const element of (a ? b : c)) log(element)␊ + 1 | for (const element of (a ? b : c)) log(element)␊ ` > Error 1/1 @@ -1824,7 +1824,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if (a ? b : c) for (const element of (a ? b : c)) log(element)␊ + 1 | if (a ? b : c) for (const element of (a ? b : c)) log(element)␊ ` > Error 1/1 @@ -1840,7 +1840,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const element of (a ? b : c())) log(element)␊ + 1 | for (const element of (a ? b : c())) log(element)␊ ` > Error 1/1 @@ -1861,7 +1861,7 @@ Generated by [AVA](https://avajs.dev). ␊ --------------------------------------------------------------------------------␊ Suggestion 1/1: Switch to \`for…of\`.␊ - 1 | if (a ? b : c()) for (const element of (a ? b : c())) log(element)␊ + 1 | if (a ? b : c()) for (const element of (a ? b : c())) log(element)␊ ` ## Invalid #114 @@ -1870,7 +1870,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const element of (foo || bar)) log(element)␊ + 1 | for (const element of (foo || bar)) log(element)␊ ` > Error 1/1 @@ -1886,7 +1886,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if (foo || bar) for (const element of (foo || bar)) log(element)␊ + 1 | if (foo || bar) for (const element of (foo || bar)) log(element)␊ ` > Error 1/1 @@ -1902,7 +1902,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const element of (foo || bar())) log(element)␊ + 1 | for (const element of (foo || bar())) log(element)␊ ` > Error 1/1 @@ -1923,7 +1923,7 @@ Generated by [AVA](https://avajs.dev). ␊ --------------------------------------------------------------------------------␊ Suggestion 1/1: Switch to \`for…of\`.␊ - 1 | if (foo || bar()) for (const element of (foo || bar())) log(element)␊ + 1 | if (foo || bar()) for (const element of (foo || bar())) log(element)␊ ` ## Invalid #118 @@ -1932,7 +1932,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const [index, element] of (foo).entries()) bar(element, index)␊ + 1 | for (const [index, element] of (foo).entries()) bar(element, index)␊ ` > Error 1/1 @@ -1948,7 +1948,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if (foo) for (const [index, element] of (foo).entries()) bar(element, index)␊ + 1 | if (foo) for (const [index, element] of (foo).entries()) bar(element, index)␊ ` > Error 1/1 @@ -1964,7 +1964,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const [index, element] of (0, foo).entries()) bar(element, index)␊ + 1 | for (const [index, element] of (0, foo).entries()) bar(element, index)␊ ` > Error 1/1 @@ -1980,7 +1980,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if (0, foo) for (const [index, element] of (0, foo).entries()) bar(element, index)␊ + 1 | if (0, foo) for (const [index, element] of (0, foo).entries()) bar(element, index)␊ ` > Error 1/1 @@ -2128,7 +2128,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const element of foo) bar(element);␊ + 1 | for (const element of foo) bar(element);␊ ` > Error 1/1 @@ -2144,7 +2144,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if (foo) for (const element of foo) bar(element);␊ + 1 | if (foo) for (const element of foo) bar(element);␊ ` > Error 1/1 @@ -2161,7 +2161,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const element of foo) bar(element)␊ + 1 | for (const element of foo) bar(element)␊ 2 | ;[foo].pop();␊ ` @@ -2180,7 +2180,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if (foo) for (const element of foo) bar(element)␊ + 1 | if (foo) for (const element of foo) bar(element)␊ 2 | ;[foo].pop();␊ ` @@ -2272,7 +2272,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const element of foo) ({})␊ + 1 | for (const element of foo) ({})␊ ` > Error 1/1 @@ -2288,7 +2288,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if (foo) for (const element of foo) ({})␊ + 1 | if (foo) for (const element of foo) ({})␊ ` > Error 1/1 @@ -2304,7 +2304,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const element of foo) bar(element);␊ + 1 | for (const element of foo) bar(element);␊ ` > Error 1/1 @@ -2320,7 +2320,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if (foo) for (const element of foo) bar(element);␊ + 1 | if (foo) for (const element of foo) bar(element);␊ ` > Error 1/1 @@ -2608,7 +2608,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const [index, children] of node.children.index.entries()) process(children, index)␊ + 1 | for (const [index, children] of node.children.index.entries()) process(children, index)␊ ` > Error 1/1 @@ -2624,7 +2624,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if (node.children.index) for (const [index, children] of node.children.index.entries()) process(children, index)␊ + 1 | if (node.children.index) for (const [index, children] of node.children.index.entries()) process(children, index)␊ ` > Error 1/1 @@ -2640,7 +2640,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const [index, children] of (node?.children?.index).entries()) process(children, index)␊ + 1 | for (const [index, children] of (node?.children?.index).entries()) process(children, index)␊ ` > Error 1/1 @@ -2656,7 +2656,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if (node?.children?.index) for (const [index, children] of (node?.children?.index).entries()) process(children, index)␊ + 1 | if (node?.children?.index) for (const [index, children] of (node?.children?.index).entries()) process(children, index)␊ ` > Error 1/1 @@ -2712,7 +2712,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const [index, children] of [{children: 1, index: 1}].entries()) process(children, index)␊ + 1 | for (const [index, children] of [{children: 1, index: 1}].entries()) process(children, index)␊ ` > Error 1/1 @@ -2728,7 +2728,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if ([{children: 1, index: 1}]) for (const [index, children] of [{children: 1, index: 1}].entries()) process(children, index)␊ + 1 | if ([{children: 1, index: 1}]) for (const [index, children] of [{children: 1, index: 1}].entries()) process(children, index)␊ ` > Error 1/1 @@ -2824,7 +2824,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const [index, name] of [function name() {}].entries()) process(name, index)␊ + 1 | for (const [index, name] of [function name() {}].entries()) process(name, index)␊ ` > Error 1/1 @@ -2840,7 +2840,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if ([function name() {}]) for (const [index, name] of [function name() {}].entries()) process(name, index)␊ + 1 | if ([function name() {}]) for (const [index, name] of [function name() {}].entries()) process(name, index)␊ ` > Error 1/1 @@ -2864,7 +2864,7 @@ Generated by [AVA](https://avajs.dev). 2 | function () {␊ 3 | function index() {}␊ 4 | }␊ - 5 | ].entries()) process(name, index)␊ + 5 | ].entries()) process(name, index)␊ ` > Error 1/1 @@ -2896,7 +2896,7 @@ Generated by [AVA](https://avajs.dev). 6 | function () {␊ 7 | function index() {}␊ 8 | }␊ - 9 | ].entries()) process(name, index)␊ + 9 | ].entries()) process(name, index)␊ ` > Error 1/1 @@ -2924,7 +2924,7 @@ Generated by [AVA](https://avajs.dev). 2 | function () {␊ 3 | class index {}␊ 4 | }␊ - 5 | ].entries()) process(name, index)␊ + 5 | ].entries()) process(name, index)␊ ` > Error 1/1 @@ -2956,7 +2956,7 @@ Generated by [AVA](https://avajs.dev). 6 | function () {␊ 7 | class index {}␊ 8 | }␊ - 9 | ].entries()) process(name, index)␊ + 9 | ].entries()) process(name, index)␊ ` > Error 1/1 @@ -2976,7 +2976,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const [index, Foo] of [class Foo{}].entries()) process(Foo, index)␊ + 1 | for (const [index, Foo] of [class Foo{}].entries()) process(Foo, index)␊ ` > Error 1/1 @@ -2992,7 +2992,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if ([class Foo{}]) for (const [index, Foo] of [class Foo{}].entries()) process(Foo, index)␊ + 1 | if ([class Foo{}]) for (const [index, Foo] of [class Foo{}].entries()) process(Foo, index)␊ ` > Error 1/1 @@ -3008,7 +3008,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const [Foo, X] of [class Foo{}].entries()) process(X, Foo)␊ + 1 | for (const [Foo, X] of [class Foo{}].entries()) process(X, Foo)␊ ` > Error 1/1 @@ -3024,7 +3024,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if ([class Foo{}]) for (const [Foo, X] of [class Foo{}].entries()) process(X, Foo)␊ + 1 | if ([class Foo{}]) for (const [Foo, X] of [class Foo{}].entries()) process(X, Foo)␊ ` > Error 1/1 @@ -3048,7 +3048,7 @@ Generated by [AVA](https://avajs.dev). 2 | class Foo {␊ 3 | bar() {}␊ 4 | }␊ - 5 | ].entries()) process(Foo, bar)␊ + 5 | ].entries()) process(Foo, bar)␊ ` > Error 1/1 @@ -3080,7 +3080,7 @@ Generated by [AVA](https://avajs.dev). 6 | class Foo {␊ 7 | bar() {}␊ 8 | }␊ - 9 | ].entries()) process(Foo, bar)␊ + 9 | ].entries()) process(Foo, bar)␊ ` > Error 1/1 @@ -3922,7 +3922,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | const a = () => { for (const element of foo) bar(element) } ␊ + 1 | const a = () => { for (const element of foo) bar(element) } ␊ ` > Error 1/1 @@ -3938,7 +3938,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | const a = () => { if (foo) for (const element of foo) bar(element) } ␊ + 1 | const a = () => { if (foo) for (const element of foo) bar(element) } ␊ ` > Error 1/1 @@ -3954,7 +3954,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | const a = () => { for (const element of foo) bar(element) } ;␊ + 1 | const a = () => { for (const element of foo) bar(element) } ;␊ ` > Error 1/1 @@ -3970,7 +3970,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | const a = () => { if (foo) for (const element of foo) bar(element) } ;␊ + 1 | const a = () => { if (foo) for (const element of foo) bar(element) } ;␊ ` > Error 1/1 @@ -3986,7 +3986,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | const a = () => { for (const element of foo) bar(element) }␊ + 1 | const a = () => { for (const element of foo) bar(element) }␊ ` > Error 1/1 @@ -4002,7 +4002,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | const a = () => { if (foo) for (const element of foo) bar(element) }␊ + 1 | const a = () => { if (foo) for (const element of foo) bar(element) }␊ ` > Error 1/1 @@ -4018,7 +4018,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | const a = () => { for (const element of foo) bar(element) };␊ + 1 | const a = () => { for (const element of foo) bar(element) };␊ ` > Error 1/1 @@ -4034,7 +4034,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | const a = () => { if (foo) for (const element of foo) bar(element) };␊ + 1 | const a = () => { if (foo) for (const element of foo) bar(element) };␊ ` > Error 1/1 @@ -4070,7 +4070,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | if (1) for (const [b, a] of (1).entries()) call(a, b)␊ + 1 | if (1) for (const [b, a] of (1).entries()) call(a, b)␊ ` > Error 1/1 @@ -4086,7 +4086,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const arrayInArray of array) for (const element of arrayInArray) bar(element);␊ + 1 | for (const arrayInArray of array) for (const element of arrayInArray) bar(element);␊ ` > Error 1/2 @@ -4109,7 +4109,7 @@ Generated by [AVA](https://avajs.dev). > Output `␊ - 1 | for (const arrayInArray of array) if (arrayInArray) for (const element of arrayInArray) bar(element);␊ + 1 | for (const arrayInArray of array) if (arrayInArray) for (const element of arrayInArray) bar(element);␊ ` > Error 1/2 diff --git a/test/snapshots/no-array-for-each.mjs.snap b/test/snapshots/no-array-for-each.mjs.snap index 79f3f00f0ff9e7c672dab772f1a1d4b3d4c2987f..41cec331d4347a3ee69338c66363251aff402ebe 100644 GIT binary patch literal 12331 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 R2%b9G{Xb__Z0*Pj0RRTf5h4Hp literal 12354 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