diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2018-05-26 18:44:10 -0400 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2018-05-26 18:44:10 -0400 |
| commit | cabf7fa93b7250a69a3cfad417537c2a46414779 (patch) | |
| tree | 4de09db41ba3f5bc5c3b48c0c97f96d7b59872ac /std | |
| parent | b8d4e05361d6a01ae1c0bf931e27e2bfdb25551d (diff) | |
| download | zig-cabf7fa93b7250a69a3cfad417537c2a46414779.tar.gz zig-cabf7fa93b7250a69a3cfad417537c2a46414779.zip | |
zig fmt: fn calls with trailing comma with params on new lines
Diffstat (limited to 'std')
| -rw-r--r-- | std/zig/parser_test.zig | 13 | ||||
| -rw-r--r-- | std/zig/render.zig | 38 |
2 files changed, 49 insertions, 2 deletions
diff --git a/std/zig/parser_test.zig b/std/zig/parser_test.zig index c115c5848f..4ce355dc87 100644 --- a/std/zig/parser_test.zig +++ b/std/zig/parser_test.zig @@ -1,3 +1,16 @@ +test "zig fmt: trailing comma on fn call" { + try testCanonical( + \\comptime { + \\ var module = try Module.create( + \\ allocator, + \\ zig_lib_dir, + \\ full_cache_dir, + \\ ); + \\} + \\ + ); +} + test "zig fmt: empty block with only comment" { try testCanonical( \\comptime { diff --git a/std/zig/render.zig b/std/zig/render.zig index 90acb0e412..f068e652bb 100644 --- a/std/zig/render.zig +++ b/std/zig/render.zig @@ -374,7 +374,42 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind try renderExpression(allocator, stream, tree, indent, suffix_op.lhs, Space.None); const lparen = tree.nextToken(suffix_op.lhs.lastToken()); - try renderToken(tree, stream, lparen, indent, Space.None); + + if (call_info.params.len == 0) { + try renderToken(tree, stream, lparen, indent, Space.None); + try renderToken(tree, stream, suffix_op.rtoken, indent, space); + return; + } + + const src_has_trailing_comma = blk: { + const maybe_comma = tree.prevToken(suffix_op.rtoken); + break :blk tree.tokens.at(maybe_comma).id == Token.Id.Comma; + }; + + if (src_has_trailing_comma) { + const new_indent = indent + indent_delta; + try renderToken(tree, stream, lparen, new_indent, Space.Newline); + + var it = call_info.params.iterator(0); + while (true) { + const param_node = ??it.next(); + try stream.writeByteNTimes(' ', new_indent); + + if (it.peek()) |next_node| { + try renderExpression(allocator, stream, tree, new_indent, param_node.*, Space.None); + const comma = tree.nextToken(param_node.*.lastToken()); + try renderToken(tree, stream, comma, new_indent, Space.Newline); // , + try renderExtraNewline(tree, stream, next_node.*); + } else { + try renderTrailingComma(allocator, stream, tree, new_indent, param_node.*, Space.Newline); + try stream.writeByteNTimes(' ', indent); + try renderToken(tree, stream, suffix_op.rtoken, indent, space); + return; + } + } + } + + try renderToken(tree, stream, lparen, indent, Space.None); // ( var it = call_info.params.iterator(0); while (it.next()) |param_node| { @@ -385,7 +420,6 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind try renderToken(tree, stream, comma, indent, Space.Space); } } - try renderToken(tree, stream, suffix_op.rtoken, indent, space); }, |
