diff --git a/src/printers/expressions.ts b/src/printers/expressions.ts index 8380d7e1..b434c53f 100644 --- a/src/printers/expressions.ts +++ b/src/printers/expressions.ts @@ -705,15 +705,12 @@ export default { }, guard(path, print) { - return [ - "when ", - group([ - ifBreak("("), - indent([softline, path.call(print, "namedChildren", 0)]), - softline, - ifBreak(")") - ]) - ]; + // Break after `when` without wrapping the guard expression in parentheses + // (issue #1001). A space is used when the group fits on one line. + return group([ + "when", + indent([line, path.call(print, "namedChildren", 0)]) + ]); } } satisfies Partial; diff --git a/test/unit-test/expressions/_output.java b/test/unit-test/expressions/_output.java index 9e0f357d..997300c9 100644 --- a/test/unit-test/expressions/_output.java +++ b/test/unit-test/expressions/_output.java @@ -292,9 +292,8 @@ void parenthesesWithLeadingAndTrailingBreak() { )[ffffffffff]; switch (a) { - case Bbbbbbbbbb bbbbbbbbbb when ( - cccccccccc && dddddddddd && eeeeeeeeee - ) -> ffffffffff; + case Bbbbbbbbbb bbbbbbbbbb when + cccccccccc && dddddddddd && eeeeeeeeee -> ffffffffff; } return ( diff --git a/test/unit-test/pattern-matching/_output.java b/test/unit-test/pattern-matching/_output.java index a3190a4f..2c18eca3 100644 --- a/test/unit-test/pattern-matching/_output.java +++ b/test/unit-test/pattern-matching/_output.java @@ -33,32 +33,27 @@ void test(Buyer other) { case Buyer b when this.bestPrice > b.bestPrice -> { return true; } - case Buyer titi when ( - this.bestPriceaaaaaaaazzzzzaaaaaaaaaq > b.bestPrice - ) -> true; - case Buyer titi when ( - this.bestPriceaaaaaazzzaaaaaaaaaq > b.bestPrice - ) -> true; - case Buyer b when ( + case Buyer titi when + this.bestPriceaaaaaaaazzzzzaaaaaaaaaq > b.bestPrice -> true; + case Buyer titi when + this.bestPriceaaaaaazzzaaaaaaaaaq > b.bestPrice -> true; + case Buyer b when this.bestPrice > b.bestPrice && this.bestPrice > b.bestPrice && this.bestPrice > b.bestPrice && - this.bestPrice > b.bestPrice - ) -> true; - case Buyer b when ( + this.bestPrice > b.bestPrice -> true; + case Buyer b when this.bestPrice > b.bestPrice && this.bestPrice > b.bestPrice && this.bestPrice > b.bestPrice && - this.bestPrice > b.bestPrice - ) -> { + this.bestPrice > b.bestPrice -> { return true; } - case Buyer b when ( + case Buyer b when this.bestPrice > b.bestPrice && this.bestPrice > b.bestPrice && this.bestPrice > b.bestPrice && - this.bestPrice > b.bestPrice - ) -> { + this.bestPrice > b.bestPrice -> { return true; } default -> false; @@ -94,17 +89,15 @@ case MyRecord( case MyRecord( LongTypeName longVariableName, LongTypeName longVariableName - ) when ( + ) when this.longVariableName > longVariableName && - this.longVariableName > longVariableName - ) -> 0; + this.longVariableName > longVariableName -> 0; case MyRecord( LongTypeName longVariableName, LongTypeName longVariableName - ) when ( + ) when this.longVariableName > longVariableName && - this.longVariableName > longVariableName - ) -> longMethodName( + this.longVariableName > longVariableName -> longMethodName( longVariableName, longVariableName, longVariableName, diff --git a/test/unit-test/switch-when-guard-parens/.prettierrc.json b/test/unit-test/switch-when-guard-parens/.prettierrc.json new file mode 100644 index 00000000..be9cb124 --- /dev/null +++ b/test/unit-test/switch-when-guard-parens/.prettierrc.json @@ -0,0 +1,3 @@ +{ + "printWidth": 40 +} diff --git a/test/unit-test/switch-when-guard-parens/_input.java b/test/unit-test/switch-when-guard-parens/_input.java new file mode 100644 index 00000000..cadee9b1 --- /dev/null +++ b/test/unit-test/switch-when-guard-parens/_input.java @@ -0,0 +1,8 @@ +class T { + boolean f(Object x) { + return switch (x) { + case A a when a.equals(a.aaaa) -> true; + default -> false; + }; + } +} diff --git a/test/unit-test/switch-when-guard-parens/_output.java b/test/unit-test/switch-when-guard-parens/_output.java new file mode 100644 index 00000000..047545e9 --- /dev/null +++ b/test/unit-test/switch-when-guard-parens/_output.java @@ -0,0 +1,9 @@ +class T { + boolean f(Object x) { + return switch (x) { + case A a when + a.equals(a.aaaa) -> true; + default -> false; + }; + } +} diff --git a/test/unit-test/unnamed-variables-and-patterns/_output.java b/test/unit-test/unnamed-variables-and-patterns/_output.java index 7d1a28af..477b9e13 100644 --- a/test/unit-test/unnamed-variables-and-patterns/_output.java +++ b/test/unit-test/unnamed-variables-and-patterns/_output.java @@ -120,10 +120,9 @@ int wrappingMultipleSwitchPatterns() { case MyRecord(LongTypeName longVariableName, LongTypeName longVariableName), MyRecord(LongTypeName longVariableName, LongTypeName longVariableName) - when ( + when this.longVariableName > longVariableName && - this.longVariableName > longVariableName - ) -> longMethodName( + this.longVariableName > longVariableName -> longMethodName( longVariableName, longVariableName, longVariableName,