aboutsummaryrefslogtreecommitdiff
path: root/lib/std
diff options
context:
space:
mode:
Diffstat (limited to 'lib/std')
-rw-r--r--lib/std/zig/parser_test.zig13
-rw-r--r--lib/std/zig/render.zig10
2 files changed, 19 insertions, 4 deletions
diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig
index 0c79b3b187..c9c598b1d6 100644
--- a/lib/std/zig/parser_test.zig
+++ b/lib/std/zig/parser_test.zig
@@ -1791,6 +1791,19 @@ test "zig fmt: switch comment before prong" {
);
}
+test "zig fmt: switch comment after prong" {
+ try testCanonical(
+ \\comptime {
+ \\ switch (a) {
+ \\ 0,
+ \\ // hi
+ \\ => {},
+ \\ }
+ \\}
+ \\
+ );
+}
+
test "zig fmt: struct literal no trailing comma" {
try testTransform(
\\const a = foo{ .x = 1, .y = 2 };
diff --git a/lib/std/zig/render.zig b/lib/std/zig/render.zig
index 0f6fcac8b7..eaae725e9a 100644
--- a/lib/std/zig/render.zig
+++ b/lib/std/zig/render.zig
@@ -1505,16 +1505,18 @@ fn renderSwitchCase(
const node_tags = tree.nodes.items(.tag);
const token_tags = tree.tokens.items(.tag);
const trailing_comma = token_tags[switch_case.ast.arrow_token - 1] == .comma;
+ const has_comment_before_arrow = blk: {
+ if (switch_case.ast.values.len == 0) break :blk false;
+ break :blk hasComment(tree, tree.firstToken(switch_case.ast.values[0]), switch_case.ast.arrow_token);
+ };
// Render everything before the arrow
if (switch_case.ast.values.len == 0) {
try renderToken(ais, tree, switch_case.ast.arrow_token - 1, .space); // else keyword
- } else if (switch_case.ast.values.len == 1) {
+ } else if (switch_case.ast.values.len == 1 and !has_comment_before_arrow) {
// render on one line and drop the trailing comma if any
try renderExpression(gpa, ais, tree, switch_case.ast.values[0], .space);
- } else if (trailing_comma or
- hasComment(tree, tree.firstToken(switch_case.ast.values[0]), switch_case.ast.arrow_token))
- {
+ } else if (trailing_comma or has_comment_before_arrow) {
// Render each value on a new line
try renderExpressions(gpa, ais, tree, switch_case.ast.values, .comma);
} else {