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:
Curtis Tate Wilkinson 2022-03-15 08:10:59 +10:00 committed by GitHub
parent 5ea94e7715
commit 3bb4c0c789
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 4 deletions

View File

@ -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 };

View File

@ -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 {