From 9c663c6212239f1ac0d1e234cafc685abc665f89 Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Fri, 26 Apr 2019 21:26:46 +0300 Subject: [PATCH] fix(javascript): correctly handle comments in empty arrow function expressions --- CHANGELOG.unreleased.md | 20 +++++++++++++++++++ src/language-js/needs-parens.js | 1 + .../__snapshots__/jsfmt.spec.js.snap | 8 ++++++++ tests/optional_chaining/chaining.js | 4 ++++ 4 files changed, 33 insertions(+) diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md index a89a80824180..6622236d8fe3 100644 --- a/CHANGELOG.unreleased.md +++ b/CHANGELOG.unreleased.md @@ -60,3 +60,23 @@ Examples: test(/** @type {!Array} */ (arrOrString).length); test(/** @type {!Array} */ (arrOrString).length + 1); ``` + +- JavaScript: respect parenthesis around optional chaining before await ([#6087] by [@evilebottnawi]) + + + ```js + // Input + async function myFunction() { + var x = (await foo.bar.blah)?.hi; + } + + // Output (Prettier stable) + async function myFunction() { + var x = await foo.bar.blah?.hi; + } + + // Output (Prettier master) + async function myFunction() { + var x = (await foo.bar.blah)?.hi; + } + ``` diff --git a/src/language-js/needs-parens.js b/src/language-js/needs-parens.js index 51135fcae3e5..0229c7bd9cb9 100644 --- a/src/language-js/needs-parens.js +++ b/src/language-js/needs-parens.js @@ -455,6 +455,7 @@ function needsParens(path, options) { case "TSAsExpression": case "TSNonNullExpression": case "BindExpression": + case "OptionalMemberExpression": return true; case "MemberExpression": diff --git a/tests/optional_chaining/__snapshots__/jsfmt.spec.js.snap b/tests/optional_chaining/__snapshots__/jsfmt.spec.js.snap index c8b7782e10c1..fc97cb3f06bf 100644 --- a/tests/optional_chaining/__snapshots__/jsfmt.spec.js.snap +++ b/tests/optional_chaining/__snapshots__/jsfmt.spec.js.snap @@ -33,6 +33,10 @@ a?.b[3].c?.(x).d.e?.f[3].g?.(y).h; (list || list2)?.length; (list || list2)?.[(list || list2)]; +async function HelloWorld() { + var x = (await foo.bar.blah)?.hi; +} + =====================================output===================================== var street = user.address?.street; var fooValue = myForm.querySelector("input[name=foo]")?.value; @@ -61,5 +65,9 @@ a?.b?.c.d?.e; (list || list2)?.length; (list || list2)?.[list || list2]; +async function HelloWorld() { + var x = (await foo.bar.blah)?.hi; +} + ================================================================================ `; diff --git a/tests/optional_chaining/chaining.js b/tests/optional_chaining/chaining.js index 33b4f0e00735..eb30e5663227 100644 --- a/tests/optional_chaining/chaining.js +++ b/tests/optional_chaining/chaining.js @@ -24,3 +24,7 @@ a?.b[3].c?.(x).d.e?.f[3].g?.(y).h; (list || list2)?.length; (list || list2)?.[(list || list2)]; + +async function HelloWorld() { + var x = (await foo.bar.blah)?.hi; +}