diff options
| author | LemonBoy <thatlemon@gmail.com> | 2020-01-03 10:17:40 +0100 |
|---|---|---|
| committer | LemonBoy <thatlemon@gmail.com> | 2020-01-03 10:17:40 +0100 |
| commit | 7b375a1c4a88d7751bd2d5e713108a16df9cb103 (patch) | |
| tree | df74bc6b928a0cb50d57e2b5ff540a80281e0799 /lib | |
| parent | f40b6b85f18148ead61c3704a4bb8832c8b203e9 (diff) | |
| download | zig-7b375a1c4a88d7751bd2d5e713108a16df9cb103.tar.gz zig-7b375a1c4a88d7751bd2d5e713108a16df9cb103.zip | |
Revert "Revert "Trailing comma is respected for builtin calls""
This reverts commit f83411b0b1b857c7f8679e3b90d2093ba60621d4.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/std/zig/parser_test.zig | 21 | ||||
| -rw-r--r-- | lib/std/zig/render.zig | 37 |
2 files changed, 51 insertions, 7 deletions
diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig index f193e1b6ef..c5500091fc 100644 --- a/lib/std/zig/parser_test.zig +++ b/lib/std/zig/parser_test.zig @@ -26,6 +26,27 @@ test "zig fmt: c pointer type" { ); } +test "zig fmt: builtin call with trailing comma" { + try testCanonical( + \\pub fn main() void { + \\ _ = @intToPtr( + \\ a, + \\ b, + \\ ); + \\ _ = @ptrCast( + \\ a, + \\ b, + \\ ); + \\ _ = @call( + \\ a, + \\ b, + \\ c, + \\ ); + \\} + \\ + ); +} + test "zig fmt: asm expression with comptime content" { try testCanonical( \\comptime { diff --git a/lib/std/zig/render.zig b/lib/std/zig/render.zig index 6e1ee4a601..1f377e71bd 100644 --- a/lib/std/zig/render.zig +++ b/lib/std/zig/render.zig @@ -1263,17 +1263,40 @@ fn renderExpression( try renderToken(tree, stream, builtin_call.builtin_token, indent, start_col, Space.None); // @name } - try renderToken(tree, stream, tree.nextToken(builtin_call.builtin_token), indent, start_col, Space.None); // ( + const src_params_trailing_comma = blk: { + const maybe_comma = tree.prevToken(builtin_call.rparen_token); + break :blk tree.tokens.at(maybe_comma).id == .Comma; + }; + + const lparen = tree.nextToken(builtin_call.builtin_token); + + if (!src_params_trailing_comma) { + try renderToken(tree, stream, lparen, indent, start_col, Space.None); // ( - var it = builtin_call.params.iterator(0); - while (it.next()) |param_node| { - try renderExpression(allocator, stream, tree, indent, start_col, param_node.*, Space.None); + // render all on one line, no trailing comma + var it = builtin_call.params.iterator(0); + while (it.next()) |param_node| { + try renderExpression(allocator, stream, tree, indent, start_col, param_node.*, Space.None); + // try renderParamDecl(allocator, stream, tree, indent, start_col, param_node.*, Space.None); + + if (it.peek() != null) { + const comma_token = tree.nextToken(param_node.*.lastToken()); + try renderToken(tree, stream, comma_token, indent, start_col, Space.Space); // , + } + } + } else { + // one param per line + const new_indent = indent + indent_delta; + try renderToken(tree, stream, lparen, new_indent, start_col, Space.Newline); // ( - if (it.peek() != null) { - const comma_token = tree.nextToken(param_node.*.lastToken()); - try renderToken(tree, stream, comma_token, indent, start_col, Space.Space); // , + var it = builtin_call.params.iterator(0); + while (it.next()) |param_node| { + try stream.writeByteNTimes(' ', new_indent); + try renderExpression(allocator, stream, tree, indent, start_col, param_node.*, Space.Comma); } + try stream.writeByteNTimes(' ', indent); } + return renderToken(tree, stream, builtin_call.rparen_token, indent, start_col, space); // ) }, |
