Skip to content

Commit 3fed108

Browse files
committed
zig fmt: array literals with no trailing comma all on one line
1 parent afdfbc0 commit 3fed108

File tree

2 files changed

+32
-10
lines changed

2 files changed

+32
-10
lines changed

std/zig/parser_test.zig

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -229,16 +229,14 @@ test "zig fmt: add trailing comma to array literal" {
229229
\\comptime {
230230
\\ return []u16{'m', 's', 'y', 's', '-' // hi
231231
\\ };
232+
\\ return []u16{'m', 's', 'y', 's',
233+
\\ '-'};
232234
\\}
233235
,
234236
\\comptime {
235-
\\ return []u16{
236-
\\ 'm',
237-
\\ 's',
238-
\\ 'y',
239-
\\ 's',
240-
\\ '-', // hi
237+
\\ return []u16{ 'm', 's', 'y', 's', '-' // hi
241238
\\ };
239+
\\ return []u16{ 'm', 's', 'y', 's', '-'};
242240
\\}
243241
\\
244242
);

std/zig/render.zig

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -557,11 +557,11 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind
557557
};
558558

559559

560-
const new_indent = indent + indent_delta;
561-
try renderToken(tree, stream, lbrace, new_indent, Space.Newline);
562-
try stream.writeByteNTimes(' ', new_indent);
563-
564560
if (maybe_row_size) |row_size| {
561+
const new_indent = indent + indent_delta;
562+
try renderToken(tree, stream, lbrace, new_indent, Space.Newline);
563+
try stream.writeByteNTimes(' ', new_indent);
564+
565565
var it = exprs.iterator(0);
566566
var i: usize = 0;
567567
while (it.next()) |expr| {
@@ -597,6 +597,30 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind
597597
return;
598598
}
599599

600+
const src_has_trailing_comma = blk: {
601+
const maybe_comma = tree.prevToken(suffix_op.rtoken);
602+
break :blk tree.tokens.at(maybe_comma).id == Token.Id.Comma;
603+
};
604+
if (!src_has_trailing_comma) {
605+
try renderToken(tree, stream, lbrace, indent, Space.Space);
606+
var it = exprs.iterator(0);
607+
while (it.next()) |expr| {
608+
try renderExpression(allocator, stream, tree, indent, expr.*, Space.None);
609+
610+
if (it.peek()) |next_expr| {
611+
const comma = tree.nextToken(expr.*.lastToken());
612+
try renderToken(tree, stream, comma, indent, Space.Space); // ,
613+
}
614+
}
615+
616+
try renderToken(tree, stream, suffix_op.rtoken, indent, space);
617+
return;
618+
}
619+
620+
const new_indent = indent + indent_delta;
621+
try renderToken(tree, stream, lbrace, new_indent, Space.Newline);
622+
try stream.writeByteNTimes(' ', new_indent);
623+
600624
var it = exprs.iterator(0);
601625
while (it.next()) |expr| {
602626

0 commit comments

Comments
 (0)