From f8875c1caa357829b993f3a459db840efbe47540 Mon Sep 17 00:00:00 2001 From: Lucas Duailibe Date: Mon, 27 May 2019 13:58:26 -0300 Subject: [PATCH] Prevent parens around BindExpressions as properties of MemberExpressions (#6159) --- CHANGELOG.unreleased.md | 15 +++++++++++++++ src/language-js/needs-parens.js | 4 +++- .../__snapshots__/jsfmt.spec.js.snap | 8 ++++++++ tests/bind_expressions/bind_parens.js | 2 ++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md index cc6c4bc5e..34391e127 100644 --- a/CHANGELOG.unreleased.md +++ b/CHANGELOG.unreleased.md @@ -399,6 +399,20 @@ new a::b(); new (a::b)(); ``` +### JavaScript: Prevent adding unnecessary parentheses around bind expressions in member expressions' properties ([#6159] by [@duailibe]) + + +```js +// Input +f[a::b]; + +// Output (Prettier stable) +f[(a::b)]; + +// Output (Prettier master); +f[a::b]; +``` + [#5979]: https://github.com/prettier/prettier/pull/5979 [#6086]: https://github.com/prettier/prettier/pull/6086 [#6088]: https://github.com/prettier/prettier/pull/6088 @@ -418,6 +432,7 @@ new (a::b)(); [#6148]: https://github.com/prettier/prettier/pull/6148 [#6146]: https://github.com/prettier/prettier/pull/6146 [#6152]: https://github.com/prettier/prettier/pull/6152 +[#6159]: https://github.com/prettier/prettier/pull/6159 [@belochub]: https://github.com/belochub [@brainkim]: https://github.com/brainkim [@duailibe]: https://github.com/duailibe diff --git a/src/language-js/needs-parens.js b/src/language-js/needs-parens.js index f68bcb01d..1d88b910c 100644 --- a/src/language-js/needs-parens.js +++ b/src/language-js/needs-parens.js @@ -711,7 +711,9 @@ function needsParens(path, options) { (parent.type === "BindExpression" && name === "callee" && parent.callee === node) || - parent.type === "MemberExpression" || + (parent.type === "MemberExpression" && + name === "object" && + parent.object === node) || (parent.type === "NewExpression" && name === "callee" && parent.callee === node) diff --git a/tests/bind_expressions/__snapshots__/jsfmt.spec.js.snap b/tests/bind_expressions/__snapshots__/jsfmt.spec.js.snap index 76704e03f..5b0ce3998 100644 --- a/tests/bind_expressions/__snapshots__/jsfmt.spec.js.snap +++ b/tests/bind_expressions/__snapshots__/jsfmt.spec.js.snap @@ -79,6 +79,8 @@ b.c::d.e; (b::c::d).e; new (a::b)(); new f(a::b); +f[a::b]; +f[a::b()]; =====================================output===================================== (a || b)::c; @@ -113,6 +115,8 @@ b.c::d.e; (b::c::d).e; new (a::b)(); new f(a::b); +f[a::b]; +f[a::b()]; ================================================================================ `; @@ -156,6 +160,8 @@ b.c::d.e; (b::c::d).e; new (a::b)(); new f(a::b); +f[a::b]; +f[a::b()]; =====================================output===================================== ;(a || b)::c @@ -190,6 +196,8 @@ b.c::d.e ;(b::c::d).e new (a::b)() new f(a::b) +f[a::b] +f[a::b()] ================================================================================ `; diff --git a/tests/bind_expressions/bind_parens.js b/tests/bind_expressions/bind_parens.js index 36228ae7e..72f13543e 100644 --- a/tests/bind_expressions/bind_parens.js +++ b/tests/bind_expressions/bind_parens.js @@ -30,3 +30,5 @@ b.c::d.e; (b::c::d).e; new (a::b)(); new f(a::b); +f[a::b]; +f[a::b()];