From 3fed10883bd6916147cce8060949040770532daf Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sat, 26 May 2018 23:24:43 -0400 Subject: zig fmt: array literals with no trailing comma all on one line --- std/zig/parser_test.zig | 10 ++++------ std/zig/render.zig | 32 ++++++++++++++++++++++++++++---- 2 files changed, 32 insertions(+), 10 deletions(-) (limited to 'std') diff --git a/std/zig/parser_test.zig b/std/zig/parser_test.zig index a2ee77796b..e83f99c972 100644 --- a/std/zig/parser_test.zig +++ b/std/zig/parser_test.zig @@ -229,16 +229,14 @@ test "zig fmt: add trailing comma to array literal" { \\comptime { \\ return []u16{'m', 's', 'y', 's', '-' // hi \\ }; + \\ return []u16{'m', 's', 'y', 's', + \\ '-'}; \\} , \\comptime { - \\ return []u16{ - \\ 'm', - \\ 's', - \\ 'y', - \\ 's', - \\ '-', // hi + \\ return []u16{ 'm', 's', 'y', 's', '-' // hi \\ }; + \\ return []u16{ 'm', 's', 'y', 's', '-'}; \\} \\ ); diff --git a/std/zig/render.zig b/std/zig/render.zig index 49138e0e78..9805b7cf75 100644 --- a/std/zig/render.zig +++ b/std/zig/render.zig @@ -557,11 +557,11 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind }; - const new_indent = indent + indent_delta; - try renderToken(tree, stream, lbrace, new_indent, Space.Newline); - try stream.writeByteNTimes(' ', new_indent); - if (maybe_row_size) |row_size| { + const new_indent = indent + indent_delta; + try renderToken(tree, stream, lbrace, new_indent, Space.Newline); + try stream.writeByteNTimes(' ', new_indent); + var it = exprs.iterator(0); var i: usize = 0; while (it.next()) |expr| { @@ -597,6 +597,30 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind 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) { + try renderToken(tree, stream, lbrace, indent, Space.Space); + var it = exprs.iterator(0); + while (it.next()) |expr| { + try renderExpression(allocator, stream, tree, indent, expr.*, Space.None); + + if (it.peek()) |next_expr| { + const comma = tree.nextToken(expr.*.lastToken()); + try renderToken(tree, stream, comma, indent, Space.Space); // , + } + } + + try renderToken(tree, stream, suffix_op.rtoken, indent, space); + return; + } + + const new_indent = indent + indent_delta; + try renderToken(tree, stream, lbrace, new_indent, Space.Newline); + try stream.writeByteNTimes(' ', new_indent); + var it = exprs.iterator(0); while (it.next()) |expr| { -- cgit v1.2.3