mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 21:08:36 +00:00
zig fmt: handle missing trailing comma in array literals
This commit is contained in:
parent
08f95d0c2f
commit
000c01a36a
@ -1,3 +1,23 @@
|
||||
test "zig fmt: first thing in file is line comment" {
|
||||
try testTransform(
|
||||
\\comptime {
|
||||
\\ return []u16{'m', 's', 'y', 's', '-' // hi
|
||||
\\ };
|
||||
\\}
|
||||
,
|
||||
\\comptime {
|
||||
\\ return []u16{
|
||||
\\ 'm',
|
||||
\\ 's',
|
||||
\\ 'y',
|
||||
\\ 's',
|
||||
\\ '-', // hi
|
||||
\\ };
|
||||
\\}
|
||||
\\
|
||||
);
|
||||
}
|
||||
|
||||
test "zig fmt: first thing in file is line comment" {
|
||||
try testCanonical(
|
||||
\\// Introspection and determination of system libraries needed by zig.
|
||||
|
||||
@ -490,13 +490,16 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind
|
||||
var it = exprs.iterator(0);
|
||||
while (it.next()) |expr| {
|
||||
try stream.writeByteNTimes(' ', new_indent);
|
||||
try renderExpression(allocator, stream, tree, new_indent, expr.*, Space.None);
|
||||
|
||||
const comma = tree.nextToken(expr.*.lastToken());
|
||||
try renderToken(tree, stream, comma, new_indent, Space.Newline); // ,
|
||||
|
||||
if (it.peek()) |next_expr| {
|
||||
try renderExpression(allocator, stream, tree, new_indent, expr.*, Space.None);
|
||||
|
||||
const comma = tree.nextToken(expr.*.lastToken());
|
||||
try renderToken(tree, stream, comma, new_indent, Space.Newline); // ,
|
||||
|
||||
try renderExtraNewline(tree, stream, next_expr.*);
|
||||
} else {
|
||||
try renderTrailingComma(allocator, stream, tree, indent, expr.*, Space.Newline);
|
||||
}
|
||||
}
|
||||
|
||||
@ -950,24 +953,7 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind
|
||||
try renderExpression(allocator, stream, tree, indent, payload, Space.Space);
|
||||
}
|
||||
|
||||
// add a trailing comma if necessary
|
||||
const end_token = switch_case.lastToken() + 1;
|
||||
switch (tree.tokens.at(end_token).id) {
|
||||
Token.Id.Comma => {
|
||||
try renderExpression(allocator, stream, tree, indent, switch_case.expr, Space.None);
|
||||
try renderToken(tree, stream, end_token, indent, space); // ,
|
||||
},
|
||||
Token.Id.LineComment => {
|
||||
try renderExpression(allocator, stream, tree, indent, switch_case.expr, Space.NoComment);
|
||||
try stream.write(", ");
|
||||
try renderToken(tree, stream, end_token, indent, space);
|
||||
},
|
||||
else => {
|
||||
try renderExpression(allocator, stream, tree, indent, switch_case.expr, Space.None);
|
||||
try stream.write(",\n");
|
||||
assert(space == Space.Newline);
|
||||
},
|
||||
}
|
||||
try renderTrailingComma(allocator, stream, tree, indent, switch_case.expr, space);
|
||||
},
|
||||
ast.Node.Id.SwitchElse => {
|
||||
const switch_else = @fieldParentPtr(ast.Node.SwitchElse, "base", base);
|
||||
@ -1473,3 +1459,25 @@ fn renderDocComments(tree: &ast.Tree, stream: var, node: var, indent: usize) (@t
|
||||
try stream.writeByteNTimes(' ', indent);
|
||||
}
|
||||
}
|
||||
|
||||
fn renderTrailingComma(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, indent: usize, base: &ast.Node,
|
||||
space: Space) (@typeOf(stream).Child.Error || Error)!void
|
||||
{
|
||||
const end_token = base.lastToken() + 1;
|
||||
switch (tree.tokens.at(end_token).id) {
|
||||
Token.Id.Comma => {
|
||||
try renderExpression(allocator, stream, tree, indent, base, Space.None);
|
||||
try renderToken(tree, stream, end_token, indent, space); // ,
|
||||
},
|
||||
Token.Id.LineComment => {
|
||||
try renderExpression(allocator, stream, tree, indent, base, Space.NoComment);
|
||||
try stream.write(", ");
|
||||
try renderToken(tree, stream, end_token, indent, space);
|
||||
},
|
||||
else => {
|
||||
try renderExpression(allocator, stream, tree, indent, base, Space.None);
|
||||
try stream.write(",\n");
|
||||
assert(space == Space.Newline);
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user