diff --git a/src/language-js/needs-parens.js b/src/language-js/needs-parens.js index d81b31252a9f..68a92cced7b0 100644 --- a/src/language-js/needs-parens.js +++ b/src/language-js/needs-parens.js @@ -258,6 +258,7 @@ function needsParens(path, options) { return true; case "MemberExpression": + case "OptionalMemberExpression": return name === "object" && parent.object === node; case "AssignmentExpression": diff --git a/tests/optional_chaining/__snapshots__/jsfmt.spec.js.snap b/tests/optional_chaining/__snapshots__/jsfmt.spec.js.snap index b9ba530fb9d4..c6ef91009603 100644 --- a/tests/optional_chaining/__snapshots__/jsfmt.spec.js.snap +++ b/tests/optional_chaining/__snapshots__/jsfmt.spec.js.snap @@ -23,6 +23,9 @@ a?.b[3].c?.(x).d.e?.f[3].g?.(y).h; (a?.b)?.c.d?.e; (a ? b : c)?.d; + +(list || list2)?.length; +(list || list2)?.[(list || list2)]; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ var street = user.address?.street; var fooValue = myForm.querySelector("input[name=foo]")?.value; @@ -47,4 +50,7 @@ a?.b[3].c?.(x).d.e?.f[3].g?.(y).h; a?.b?.c.d?.e; (a ? b : c)?.d; +(list || list2)?.length; +(list || list2)?.[list || list2]; + `; diff --git a/tests/optional_chaining/chaining.js b/tests/optional_chaining/chaining.js index a5fd7d762425..58e3a59ad192 100644 --- a/tests/optional_chaining/chaining.js +++ b/tests/optional_chaining/chaining.js @@ -20,3 +20,6 @@ a?.b[3].c?.(x).d.e?.f[3].g?.(y).h; (a?.b)?.c.d?.e; (a ? b : c)?.d; + +(list || list2)?.length; +(list || list2)?.[(list || list2)];