authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-01-03 17:40:34-05:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2020-01-03 17:40:34-05:00
log3f19bc5d01ffd669dae09c0696613cc8f9656e34
treee4239c22d896ccc1540c4c27dd036860f7f5843f
parentf40b6b85f18148ead61c3704a4bb8832c8b203e9
parente6485282d36d58e24b812ee6dd76e97d25658dc6
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #4058 from LemonBoy/awful

builtin calls formatting - take II

2 files changed, 46 insertions(+), 7 deletions(-)

lib/std/zig/parser_test.zig+15
......@@ -26,6 +26,21 @@ test "zig fmt: c pointer type" {
2626 );
2727}
2828
29test "zig fmt: builtin call with trailing comma" {
30 try testCanonical(
31 \\pub fn main() void {
32 \\ @breakpoint();
33 \\ _ = @boolToInt(a);
34 \\ _ = @call(
35 \\ a,
36 \\ b,
37 \\ c,
38 \\ );
39 \\}
40 \\
41 );
42}
43
2944test "zig fmt: asm expression with comptime content" {
3045 try testCanonical(
3146 \\comptime {
lib/std/zig/render.zig+31-7
......@@ -1263,17 +1263,41 @@ fn renderExpression(
12631263 try renderToken(tree, stream, builtin_call.builtin_token, indent, start_col, Space.None); // @name
12641264 }
12651265
1266 try renderToken(tree, stream, tree.nextToken(builtin_call.builtin_token), indent, start_col, Space.None); // (
1266 const src_params_trailing_comma = blk: {
1267 if (builtin_call.params.len < 2) break :blk false;
1268 const last_node = builtin_call.params.at(builtin_call.params.len - 1).*;
1269 const maybe_comma = tree.nextToken(last_node.lastToken());
1270 break :blk tree.tokens.at(maybe_comma).id == .Comma;
1271 };
12671272
1268 var it = builtin_call.params.iterator(0);
1269 while (it.next()) |param_node| {
1270 try renderExpression(allocator, stream, tree, indent, start_col, param_node.*, Space.None);
1273 const lparen = tree.nextToken(builtin_call.builtin_token);
12711274
1272 if (it.peek() != null) {
1273 const comma_token = tree.nextToken(param_node.*.lastToken());
1274 try renderToken(tree, stream, comma_token, indent, start_col, Space.Space); // ,
1275 if (!src_params_trailing_comma) {
1276 try renderToken(tree, stream, lparen, indent, start_col, Space.None); // (
1277
1278 // render all on one line, no trailing comma
1279 var it = builtin_call.params.iterator(0);
1280 while (it.next()) |param_node| {
1281 try renderExpression(allocator, stream, tree, indent, start_col, param_node.*, Space.None);
1282
1283 if (it.peek() != null) {
1284 const comma_token = tree.nextToken(param_node.*.lastToken());
1285 try renderToken(tree, stream, comma_token, indent, start_col, Space.Space); // ,
1286 }
1287 }
1288 } else {
1289 // one param per line
1290 const new_indent = indent + indent_delta;
1291 try renderToken(tree, stream, lparen, new_indent, start_col, Space.Newline); // (
1292
1293 var it = builtin_call.params.iterator(0);
1294 while (it.next()) |param_node| {
1295 try stream.writeByteNTimes(' ', new_indent);
1296 try renderExpression(allocator, stream, tree, indent, start_col, param_node.*, Space.Comma);
12751297 }
1298 try stream.writeByteNTimes(' ', indent);
12761299 }
1300
12771301 return renderToken(tree, stream, builtin_call.rparen_token, indent, start_col, space); // )
12781302 },
12791303