Skip to content

Commit cabf7fa

Browse files
committed
zig fmt: fn calls with trailing comma with params on new lines
1 parent b8d4e05 commit cabf7fa

File tree

2 files changed

+49
-2
lines changed

2 files changed

+49
-2
lines changed

std/zig/parser_test.zig

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
test "zig fmt: trailing comma on fn call" {
2+
try testCanonical(
3+
\\comptime {
4+
\\ var module = try Module.create(
5+
\\ allocator,
6+
\\ zig_lib_dir,
7+
\\ full_cache_dir,
8+
\\ );
9+
\\}
10+
\\
11+
);
12+
}
13+
114
test "zig fmt: empty block with only comment" {
215
try testCanonical(
316
\\comptime {

std/zig/render.zig

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,42 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind
374374
try renderExpression(allocator, stream, tree, indent, suffix_op.lhs, Space.None);
375375

376376
const lparen = tree.nextToken(suffix_op.lhs.lastToken());
377-
try renderToken(tree, stream, lparen, indent, Space.None);
377+
378+
if (call_info.params.len == 0) {
379+
try renderToken(tree, stream, lparen, indent, Space.None);
380+
try renderToken(tree, stream, suffix_op.rtoken, indent, space);
381+
return;
382+
}
383+
384+
const src_has_trailing_comma = blk: {
385+
const maybe_comma = tree.prevToken(suffix_op.rtoken);
386+
break :blk tree.tokens.at(maybe_comma).id == Token.Id.Comma;
387+
};
388+
389+
if (src_has_trailing_comma) {
390+
const new_indent = indent + indent_delta;
391+
try renderToken(tree, stream, lparen, new_indent, Space.Newline);
392+
393+
var it = call_info.params.iterator(0);
394+
while (true) {
395+
const param_node = ??it.next();
396+
try stream.writeByteNTimes(' ', new_indent);
397+
398+
if (it.peek()) |next_node| {
399+
try renderExpression(allocator, stream, tree, new_indent, param_node.*, Space.None);
400+
const comma = tree.nextToken(param_node.*.lastToken());
401+
try renderToken(tree, stream, comma, new_indent, Space.Newline); // ,
402+
try renderExtraNewline(tree, stream, next_node.*);
403+
} else {
404+
try renderTrailingComma(allocator, stream, tree, new_indent, param_node.*, Space.Newline);
405+
try stream.writeByteNTimes(' ', indent);
406+
try renderToken(tree, stream, suffix_op.rtoken, indent, space);
407+
return;
408+
}
409+
}
410+
}
411+
412+
try renderToken(tree, stream, lparen, indent, Space.None); // (
378413

379414
var it = call_info.params.iterator(0);
380415
while (it.next()) |param_node| {
@@ -385,7 +420,6 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind
385420
try renderToken(tree, stream, comma, indent, Space.Space);
386421
}
387422
}
388-
389423
try renderToken(tree, stream, suffix_op.rtoken, indent, space);
390424
},
391425

0 commit comments

Comments
 (0)