From d4541a2f0cba20ed20ed298f6e386d4a271fcd48 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 29 Dec 2022 10:59:59 +0800 Subject: [PATCH 1/3] Improve `let` check in `for..of` --- src/language-js/needs-parens.js | 5 ++--- .../js/identifier/for-of/__snapshots__/jsfmt.spec.js.snap | 2 ++ tests/format/js/identifier/for-of/await.js | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/language-js/needs-parens.js b/src/language-js/needs-parens.js index 02b8bf7ac1a6..37bf4ab81573 100644 --- a/src/language-js/needs-parens.js +++ b/src/language-js/needs-parens.js @@ -70,9 +70,8 @@ function needsParens(path, options) { // `for ((async) of []);` and `for ((let) of []);` if ( name === "left" && - (node.name === "async" || node.name === "let") && - parent.type === "ForOfStatement" && - !parent.await + ((node.name === "async" && !parent.await) || node.name === "left") && + parent.type === "ForOfStatement" ) { return true; } diff --git a/tests/format/js/identifier/for-of/__snapshots__/jsfmt.spec.js.snap b/tests/format/js/identifier/for-of/__snapshots__/jsfmt.spec.js.snap index 1ccc4806b684..b1f4e95e0b32 100644 --- a/tests/format/js/identifier/for-of/__snapshots__/jsfmt.spec.js.snap +++ b/tests/format/js/identifier/for-of/__snapshots__/jsfmt.spec.js.snap @@ -7,6 +7,7 @@ printWidth: 80 | printWidth =====================================input====================================== async function a() { + for await((let) of foo); for await((let).a of foo); for await((let)[a] of foo); for await((let)()[a] of foo); @@ -14,6 +15,7 @@ async function a() { =====================================output===================================== async function a() { + for await ((let) of foo); for await ((let).a of foo); for await ((let)[a] of foo); for await ((let)()[a] of foo); diff --git a/tests/format/js/identifier/for-of/await.js b/tests/format/js/identifier/for-of/await.js index 0fa9d0a508f1..af916b3ce95e 100644 --- a/tests/format/js/identifier/for-of/await.js +++ b/tests/format/js/identifier/for-of/await.js @@ -1,4 +1,5 @@ async function a() { + for await((let) of foo); for await((let).a of foo); for await((let)[a] of foo); for await((let)()[a] of foo); From 3eecd82975533dcb0656142fca8fc18c19c5ed2c Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 29 Dec 2022 11:15:01 +0800 Subject: [PATCH 2/3] Add one more test --- .../js/identifier/for-of/__snapshots__/jsfmt.spec.js.snap | 4 ++++ tests/format/js/identifier/for-of/let.js | 2 ++ 2 files changed, 6 insertions(+) diff --git a/tests/format/js/identifier/for-of/__snapshots__/jsfmt.spec.js.snap b/tests/format/js/identifier/for-of/__snapshots__/jsfmt.spec.js.snap index b1f4e95e0b32..1a376e0823a1 100644 --- a/tests/format/js/identifier/for-of/__snapshots__/jsfmt.spec.js.snap +++ b/tests/format/js/identifier/for-of/__snapshots__/jsfmt.spec.js.snap @@ -42,6 +42,8 @@ for (letFoo of foo); for ((let.a) in foo); for ((let[a]) in foo); +for (let of of let); + =====================================output===================================== for ((let) of foo); for (foo of let); @@ -55,5 +57,7 @@ for (letFoo of foo); for (let.a in foo); for ((let)[a] in foo); +for (let of of let); + ================================================================================ `; diff --git a/tests/format/js/identifier/for-of/let.js b/tests/format/js/identifier/for-of/let.js index 5c2398ee26e0..ae49197b8222 100644 --- a/tests/format/js/identifier/for-of/let.js +++ b/tests/format/js/identifier/for-of/let.js @@ -9,3 +9,5 @@ for (letFoo of foo); for ((let.a) in foo); for ((let[a]) in foo); + +for (let of of let); From 2301a7870402ab2021b5e4f797272b2489d48225 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 29 Dec 2022 13:51:49 +0800 Subject: [PATCH 3/3] Fix --- src/language-js/needs-parens.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/language-js/needs-parens.js b/src/language-js/needs-parens.js index 37bf4ab81573..dfecf3426dbc 100644 --- a/src/language-js/needs-parens.js +++ b/src/language-js/needs-parens.js @@ -70,7 +70,7 @@ function needsParens(path, options) { // `for ((async) of []);` and `for ((let) of []);` if ( name === "left" && - ((node.name === "async" && !parent.await) || node.name === "left") && + ((node.name === "async" && !parent.await) || node.name === "let") && parent.type === "ForOfStatement" ) { return true;