From d0a8c2be78e5f04b00c136985623dd454a57a8a5 Mon Sep 17 00:00:00 2001 From: Jordan Kiesel Date: Tue, 9 Sep 2025 01:09:18 -0600 Subject: [PATCH] fix: break nested ternaries together --- .../src/printers/expressions.ts | 25 +++++++++++-------- .../operator-position-end/_input.java | 4 +++ .../operator-position-end/_output.java | 10 ++++++++ .../operator-position-start/_input.java | 4 +++ .../operator-position-start/_output.java | 10 ++++++++ 5 files changed, 42 insertions(+), 11 deletions(-) diff --git a/packages/prettier-plugin-java/src/printers/expressions.ts b/packages/prettier-plugin-java/src/printers/expressions.ts index 0c44518e..a2996dec 100644 --- a/packages/prettier-plugin-java/src/printers/expressions.ts +++ b/packages/prettier-plugin-java/src/printers/expressions.ts @@ -116,18 +116,21 @@ export default { conditionalExpression(path, print) { const binaryExpression = call(path, print, "binaryExpression"); + if (!path.node.children.QuestionMark) { + return binaryExpression; + } const expressions = map(path, print, "expression"); - return path.node.children.QuestionMark - ? group( - indent( - join(line, [ - binaryExpression, - ["? ", expressions[0]], - [": ", expressions[1]] - ]) - ) - ) - : binaryExpression; + const contents = indent( + join(line, [ + binaryExpression, + ["? ", expressions[0]], + [": ", expressions[1]] + ]) + ); + const isNestedTernary = + (path.getNode(4) as JavaNonTerminal | null)?.name === + "conditionalExpression"; + return isNestedTernary ? contents : group(contents); }, binaryExpression(path, print, options) { diff --git a/packages/prettier-plugin-java/test/unit-test/binary_expressions/operator-position-end/_input.java b/packages/prettier-plugin-java/test/unit-test/binary_expressions/operator-position-end/_input.java index b12cfedb..0e586cc0 100644 --- a/packages/prettier-plugin-java/test/unit-test/binary_expressions/operator-position-end/_input.java +++ b/packages/prettier-plugin-java/test/unit-test/binary_expressions/operator-position-end/_input.java @@ -32,6 +32,10 @@ public int ternaryOperationThatShouldNotBreak() { return b ? b : c; } + void nestedTernary() { + aaaaaaaaaa ? bbbbbbbbbb : cccccccccc ? dddddddddd : eeeeeeeeee ? ffffffffff : gggggggggg; + } + public boolean binaryOperationWithComments() { boolean a = one || two >> 1 // one // two diff --git a/packages/prettier-plugin-java/test/unit-test/binary_expressions/operator-position-end/_output.java b/packages/prettier-plugin-java/test/unit-test/binary_expressions/operator-position-end/_output.java index 7d6bcc53..c4ecb0d9 100644 --- a/packages/prettier-plugin-java/test/unit-test/binary_expressions/operator-position-end/_output.java +++ b/packages/prettier-plugin-java/test/unit-test/binary_expressions/operator-position-end/_output.java @@ -49,6 +49,16 @@ public int ternaryOperationThatShouldNotBreak() { return b ? b : c; } + void nestedTernary() { + aaaaaaaaaa + ? bbbbbbbbbb + : cccccccccc + ? dddddddddd + : eeeeeeeeee + ? ffffffffff + : gggggggggg; + } + public boolean binaryOperationWithComments() { boolean a = one || diff --git a/packages/prettier-plugin-java/test/unit-test/binary_expressions/operator-position-start/_input.java b/packages/prettier-plugin-java/test/unit-test/binary_expressions/operator-position-start/_input.java index b12cfedb..0e586cc0 100644 --- a/packages/prettier-plugin-java/test/unit-test/binary_expressions/operator-position-start/_input.java +++ b/packages/prettier-plugin-java/test/unit-test/binary_expressions/operator-position-start/_input.java @@ -32,6 +32,10 @@ public int ternaryOperationThatShouldNotBreak() { return b ? b : c; } + void nestedTernary() { + aaaaaaaaaa ? bbbbbbbbbb : cccccccccc ? dddddddddd : eeeeeeeeee ? ffffffffff : gggggggggg; + } + public boolean binaryOperationWithComments() { boolean a = one || two >> 1 // one // two diff --git a/packages/prettier-plugin-java/test/unit-test/binary_expressions/operator-position-start/_output.java b/packages/prettier-plugin-java/test/unit-test/binary_expressions/operator-position-start/_output.java index 6c76a9ff..71932298 100644 --- a/packages/prettier-plugin-java/test/unit-test/binary_expressions/operator-position-start/_output.java +++ b/packages/prettier-plugin-java/test/unit-test/binary_expressions/operator-position-start/_output.java @@ -49,6 +49,16 @@ public int ternaryOperationThatShouldNotBreak() { return b ? b : c; } + void nestedTernary() { + aaaaaaaaaa + ? bbbbbbbbbb + : cccccccccc + ? dddddddddd + : eeeeeeeeee + ? ffffffffff + : gggggggggg; + } + public boolean binaryOperationWithComments() { boolean a = one