aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorLemonBoy <thatlemon@gmail.com>2020-01-03 10:17:40 +0100
committerLemonBoy <thatlemon@gmail.com>2020-01-03 10:17:40 +0100
commit7b375a1c4a88d7751bd2d5e713108a16df9cb103 (patch)
treedf74bc6b928a0cb50d57e2b5ff540a80281e0799 /lib
parentf40b6b85f18148ead61c3704a4bb8832c8b203e9 (diff)
downloadzig-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.zig21
-rw-r--r--lib/std/zig/render.zig37
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); // )
},