From 7b375a1c4a88d7751bd2d5e713108a16df9cb103 Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Fri, 3 Jan 2020 10:17:40 +0100 Subject: [PATCH 1/2] Revert "Revert "Trailing comma is respected for builtin calls"" This reverts commit f83411b0b1b857c7f8679e3b90d2093ba60621d4. --- lib/std/zig/parser_test.zig | 21 +++++++++++++++++++++ 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; + }; - var it = builtin_call.params.iterator(0); - while (it.next()) |param_node| { - try renderExpression(allocator, stream, tree, indent, start_col, param_node.*, Space.None); + const lparen = tree.nextToken(builtin_call.builtin_token); - if (it.peek() != null) { - const comma_token = tree.nextToken(param_node.*.lastToken()); - try renderToken(tree, stream, comma_token, indent, start_col, Space.Space); // , + if (!src_params_trailing_comma) { + try renderToken(tree, stream, lparen, indent, start_col, 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); // ( + + 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); // ) }, From e6485282d36d58e24b812ee6dd76e97d25658dc6 Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Fri, 3 Jan 2020 11:43:48 +0100 Subject: [PATCH 2/2] Better logic for last-param rendering --- lib/std/zig/parser_test.zig | 10 ++-------- lib/std/zig/render.zig | 5 +++-- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig index c5500091fc..2e7a376684 100644 --- a/lib/std/zig/parser_test.zig +++ b/lib/std/zig/parser_test.zig @@ -29,14 +29,8 @@ 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, - \\ ); + \\ @breakpoint(); + \\ _ = @boolToInt(a); \\ _ = @call( \\ a, \\ b, diff --git a/lib/std/zig/render.zig b/lib/std/zig/render.zig index 1f377e71bd..d3553bb0bd 100644 --- a/lib/std/zig/render.zig +++ b/lib/std/zig/render.zig @@ -1264,7 +1264,9 @@ fn renderExpression( } const src_params_trailing_comma = blk: { - const maybe_comma = tree.prevToken(builtin_call.rparen_token); + if (builtin_call.params.len < 2) break :blk false; + const last_node = builtin_call.params.at(builtin_call.params.len - 1).*; + const maybe_comma = tree.nextToken(last_node.lastToken()); break :blk tree.tokens.at(maybe_comma).id == .Comma; }; @@ -1277,7 +1279,6 @@ fn renderExpression( 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());