diff --git a/rules/no-array-for-each.js b/rules/no-array-for-each.js index 15103e021c..0363d75dbd 100644 --- a/rules/no-array-for-each.js +++ b/rules/no-array-for-each.js @@ -314,6 +314,8 @@ function isAssignmentLeftHandSide(node) { switch (parent.type) { case 'AssignmentExpression': + case 'ForInStatement': + case 'ForOfStatement': return parent.left === node; case 'UpdateExpression': return parent.argument === node; diff --git a/test/no-array-for-each.mjs b/test/no-array-for-each.mjs index 2e0db378f8..400965b490 100644 --- a/test/no-array-for-each.mjs +++ b/test/no-array-for-each.mjs @@ -502,6 +502,27 @@ test.snapshot({ ] = baz; }); `, + outdent` + foo.forEach(element => { + for (element in bar); + }); + `, + outdent` + foo.forEach(element => { + for ([{element}] of bar); + }); + `, + outdent` + foo.forEach(element => { + for (key in element); + for (item of element); + }); + `, + outdent` + foo.forEach((element, index) => { + for (index of bar); + }); + `, ], }); diff --git a/test/snapshots/no-array-for-each.mjs.md b/test/snapshots/no-array-for-each.mjs.md index cefabd97c5..cb052a94d8 100644 --- a/test/snapshots/no-array-for-each.mjs.md +++ b/test/snapshots/no-array-for-each.mjs.md @@ -4875,3 +4875,94 @@ Generated by [AVA](https://avajs.dev). 4 | ] = baz;␊ 5 | });␊ ` + +## Invalid #264 + 1 | foo.forEach(element => { + 2 | for (element in bar); + 3 | }); + +> Output + + `␊ + 1 | for (let element of foo) {␊ + 2 | for (element in bar);␊ + 3 | }␊ + ` + +> Error 1/1 + + `␊ + > 1 | foo.forEach(element => {␊ + | ^^^^^^^ Use \`for…of\` instead of \`.forEach(…)\`.␊ + 2 | for (element in bar);␊ + 3 | });␊ + ` + +## Invalid #265 + 1 | foo.forEach(element => { + 2 | for ([{element}] of bar); + 3 | }); + +> Output + + `␊ + 1 | for (let element of foo) {␊ + 2 | for ([{element}] of bar);␊ + 3 | }␊ + ` + +> Error 1/1 + + `␊ + > 1 | foo.forEach(element => {␊ + | ^^^^^^^ Use \`for…of\` instead of \`.forEach(…)\`.␊ + 2 | for ([{element}] of bar);␊ + 3 | });␊ + ` + +## Invalid #266 + 1 | foo.forEach(element => { + 2 | for (key in element); + 3 | for (item of element); + 4 | }); + +> Output + + `␊ + 1 | for (const element of foo) {␊ + 2 | for (key in element);␊ + 3 | for (item of element);␊ + 4 | }␊ + ` + +> Error 1/1 + + `␊ + > 1 | foo.forEach(element => {␊ + | ^^^^^^^ Use \`for…of\` instead of \`.forEach(…)\`.␊ + 2 | for (key in element);␊ + 3 | for (item of element);␊ + 4 | });␊ + ` + +## Invalid #267 + 1 | foo.forEach((element, index) => { + 2 | for (index of bar); + 3 | }); + +> Output + + `␊ + 1 | for (let [index, element] of foo.entries()) {␊ + 2 | for (index of bar);␊ + 3 | }␊ + ` + +> Error 1/1 + + `␊ + > 1 | foo.forEach((element, index) => {␊ + | ^^^^^^^ Use \`for…of\` instead of \`.forEach(…)\`.␊ + 2 | for (index of bar);␊ + 3 | });␊ + ` diff --git a/test/snapshots/no-array-for-each.mjs.snap b/test/snapshots/no-array-for-each.mjs.snap index 41cec331d4..9d44859e01 100644 Binary files a/test/snapshots/no-array-for-each.mjs.snap and b/test/snapshots/no-array-for-each.mjs.snap differ