From 94345a33c98c697c2f6a2773327c05268591b7f4 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Mon, 30 Dec 2019 08:14:43 +0800 Subject: [PATCH] Fix invalid autofix with array destructuring in `no-for-loops` rule (#489) --- rules/no-for-loop.js | 2 +- test/no-for-loop.js | 62 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/rules/no-for-loop.js b/rules/no-for-loop.js index 9311cc8d4c..f55820630b 100644 --- a/rules/no-for-loop.js +++ b/rules/no-for-loop.js @@ -334,7 +334,7 @@ const create = context => { let removeDeclaration = true; if ( elementNode && - elementNode.id.type === 'ObjectPattern' + (elementNode.id.type === 'ObjectPattern' || elementNode.id.type === 'ArrayPattern') ) { removeDeclaration = arrayReferences.length === 1; diff --git a/test/no-for-loop.js b/test/no-for-loop.js index 060ee2f9e2..1f20fb9eb1 100644 --- a/test/no-for-loop.js +++ b/test/no-for-loop.js @@ -369,6 +369,16 @@ ruleTester.run('no-for-loop', rule, { console.log(a, b); } `), + testCase(outdent` + for (let i = 0; i < arr.length; i++) { + const [ a, b ] = arr[i]; + console.log(a, b); + } + `, outdent` + for (const [ a, b ] of arr) { + console.log(a, b); + } + `), testCase(outdent` for (let i = 0; i < arr.length; i++) { var { a, b } = arr[i]; @@ -379,6 +389,16 @@ ruleTester.run('no-for-loop', rule, { console.log(a, b); } `), + testCase(outdent` + for (let i = 0; i < arr.length; i++) { + var [ a, b ] = arr[i]; + console.log(a, b); + } + `, outdent` + for (var [ a, b ] of arr) { + console.log(a, b); + } + `), testCase(outdent` for (let i = 0; i < arr.length; i++) { let { a, b } = arr[i]; @@ -389,6 +409,16 @@ ruleTester.run('no-for-loop', rule, { console.log(a, b); } `), + testCase(outdent` + for (let i = 0; i < arr.length; i++) { + let [ a, b ] = arr[i]; + console.log(a, b); + } + `, outdent` + for (let [ a, b ] of arr) { + console.log(a, b); + } + `), testCase(outdent` for (let i = 0; i < arr.length; i++) { var { a, b } = arr[i]; @@ -399,6 +429,16 @@ ruleTester.run('no-for-loop', rule, { console.log(i, a, b); } `), + testCase(outdent` + for (let i = 0; i < arr.length; i++) { + var [ a, b ] = arr[i]; + console.log(i, a, b); + } + `, outdent` + for (var [i, [ a, b ]] of arr.entries()) { + console.log(i, a, b); + } + `), testCase(outdent` for (let i = 0; i < arr.length; i++) { const { a, b } = arr[i]; @@ -410,6 +450,17 @@ ruleTester.run('no-for-loop', rule, { console.log(a, b, i, element); } `), + testCase(outdent` + for (let i = 0; i < arr.length; i++) { + const [ a, b ] = arr[i]; + console.log(a, b, i, arr[i]); + } + `, outdent` + for (const [i, element] of arr.entries()) { + const [ a, b ] = element; + console.log(a, b, i, element); + } + `), testCase(outdent` for (let i = 0; i < arr.length; i++) { const { a, b } = arr[i]; @@ -420,6 +471,17 @@ ruleTester.run('no-for-loop', rule, { const { a, b } = element; console.log(a, b, element); } + `), + testCase(outdent` + for (let i = 0; i < arr.length; i++) { + const [ a, b ] = arr[i]; + console.log(a, b, arr[i]); + } + `, outdent` + for (const element of arr) { + const [ a, b ] = element; + console.log(a, b, element); + } `) ] });