mirror of
https://github.com/ziglang/zig.git
synced 2025-12-27 08:33:15 +00:00
zig fmt: Resolve #11131 loss of comment on switch cases
Correct switch cases dropping comments in certain situations by checking for the presence of the comment before collapsing to one line.
This commit is contained in:
parent
5ea94e7715
commit
3bb4c0c789
@ -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 };
|
||||
|
||||
@ -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 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user