diff --git a/src/printer.js b/src/printer.js index 122ca7903..a66fb83a2 100644 --- a/src/printer.js +++ b/src/printer.js @@ -3694,11 +3694,19 @@ function isBinaryish(node) { } function shouldInlineLogicalExpression(node) { - return ( - node.type === "LogicalExpression" && - (node.right.type === "ObjectExpression" || - node.right.type === "ArrayExpression") - ); + if (node.type !== "LogicalExpression") { + return false; + } + + if (node.right.type === "ObjectExpression" && node.right.properties.length !== 0) { + return true; + } + + if (node.right.type === "ArrayExpression" && node.right.elements.length !== 0) { + return true; + } + + return false; } // For binary expressions to be consistent, we need to group diff --git a/tests/arrays/__snapshots__/jsfmt.spec.js.snap b/tests/arrays/__snapshots__/jsfmt.spec.js.snap index 9578f5f53..7e14fbdc4 100644 --- a/tests/arrays/__snapshots__/jsfmt.spec.js.snap +++ b/tests/arrays/__snapshots__/jsfmt.spec.js.snap @@ -4,8 +4,10 @@ exports[`empty.js 1`] = ` const a = someVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeLong.Expression || []; const a = someVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeLong.Expression || {}; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -const a = someVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeLong.Expression || []; -const a = someVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeLong.Expression || {}; +const a = + someVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeLong.Expression || []; +const a = + someVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeLong.Expression || {}; `; diff --git a/tests/binary-expressions/__snapshots__/jsfmt.spec.js.snap b/tests/binary-expressions/__snapshots__/jsfmt.spec.js.snap index f3067ee15..19808e3eb 100644 --- a/tests/binary-expressions/__snapshots__/jsfmt.spec.js.snap +++ b/tests/binary-expressions/__snapshots__/jsfmt.spec.js.snap @@ -202,6 +202,9 @@ const x = longVariable + longVariable * longVariable * longVariable / longVariab const x = longVariable && longVariable && longVariable && longVariable && longVariable && longVariable; const x = longVariable && longVariable || longVariable && longVariable || longVariable && longVariable; +const x = firstItemWithAVeryLongNameThatKeepsGoing || firstItemWithAVeryLongNameThatKeepsGoing || {}; +const x = firstItemWithAVeryLongNameThatKeepsGoing || firstItemWithAVeryLongNameThatKeepsGoing || []; +const x = call(firstItemWithAVeryLongNameThatKeepsGoing, firstItemWithAVeryLongNameThatKeepsGoing) || []; const x = longVariable * longint && longVariable >> 0 && longVariable + longVariable; @@ -242,6 +245,19 @@ const x = (longVariable && longVariable) || (longVariable && longVariable) || (longVariable && longVariable); +const x = + firstItemWithAVeryLongNameThatKeepsGoing || + firstItemWithAVeryLongNameThatKeepsGoing || + {}; +const x = + firstItemWithAVeryLongNameThatKeepsGoing || + firstItemWithAVeryLongNameThatKeepsGoing || + []; +const x = + call( + firstItemWithAVeryLongNameThatKeepsGoing, + firstItemWithAVeryLongNameThatKeepsGoing + ) || []; const x = longVariable * longint && longVariable >> 0 && longVariable + longVariable; diff --git a/tests/binary-expressions/test.js b/tests/binary-expressions/test.js index 8b0660f4f..93527481f 100644 --- a/tests/binary-expressions/test.js +++ b/tests/binary-expressions/test.js @@ -8,6 +8,9 @@ const x = longVariable + longVariable * longVariable * longVariable / longVariab const x = longVariable && longVariable && longVariable && longVariable && longVariable && longVariable; const x = longVariable && longVariable || longVariable && longVariable || longVariable && longVariable; +const x = firstItemWithAVeryLongNameThatKeepsGoing || firstItemWithAVeryLongNameThatKeepsGoing || {}; +const x = firstItemWithAVeryLongNameThatKeepsGoing || firstItemWithAVeryLongNameThatKeepsGoing || []; +const x = call(firstItemWithAVeryLongNameThatKeepsGoing, firstItemWithAVeryLongNameThatKeepsGoing) || []; const x = longVariable * longint && longVariable >> 0 && longVariable + longVariable;