Commit 3bb4c0c789
Changed files (2)
lib
std
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 };
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 {