diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md index cc6c4bc5..34391e12 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 f68bcb01..1d88b910 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 76704e03..5b0ce399 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 36228ae7..72f13543 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()];