From 122a74724cb527ae6e1997c2c77118047fb50a2c Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 28 May 2018 16:23:33 -0400 Subject: [PATCH] zig fmt: use simple newlines rather than empty comments to hint now the first row of an array literal is the hint to zig fmt for how long each row should be. See #1003 --- std/zig/parser_test.zig | 40 ++++++++++-------- std/zig/render.zig | 91 ++++++++++++++--------------------------- 2 files changed, 55 insertions(+), 76 deletions(-) diff --git a/std/zig/parser_test.zig b/std/zig/parser_test.zig index e83f99c972..550d8fa111 100644 --- a/std/zig/parser_test.zig +++ b/std/zig/parser_test.zig @@ -29,34 +29,36 @@ test "zig fmt: array literal with hint" { \\ 6, \\ 7 }; \\const a = []u8{ - \\ 1, 2, + \\ 1, + \\ 2, \\ 3, 4, // \\ 5, 6, // \\ 7, 8, // \\}; , \\const a = []u8{ - \\ 1, 2, // - \\ 3, 4, // - \\ 5, 6, // + \\ 1, 2, + \\ 3, 4, + \\ 5, 6, \\ 7, \\}; \\const a = []u8{ - \\ 1, 2, // - \\ 3, 4, // - \\ 5, 6, // - \\ 7, 8, // + \\ 1, 2, + \\ 3, 4, + \\ 5, 6, + \\ 7, 8, \\}; \\const a = []u8{ - \\ 1, 2, // - \\ 3, 4, // + \\ 1, 2, + \\ 3, 4, \\ 5, 6, // blah - \\ 7, 8, // + \\ 7, 8, \\}; \\const a = []u8{ - \\ 1, 2, // - \\ 3, 4, // - \\ 5, 6, // + \\ 1, 2, + \\ 3, // + \\ 4, + \\ 5, 6, \\ 7, \\}; \\const a = []u8{ @@ -231,12 +233,18 @@ test "zig fmt: add trailing comma to array literal" { \\ }; \\ return []u16{'m', 's', 'y', 's', \\ '-'}; + \\ 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', '-'}; + \\ return []u16{ + \\ 'm', 's', 'y', 's', + \\ '-', + \\ }; + \\ return []u16{ 'm', 's', 'y', 's', '-' }; \\} \\ ); diff --git a/std/zig/render.zig b/std/zig/render.zig index 9805b7cf75..1528ae31aa 100644 --- a/std/zig/render.zig +++ b/std/zig/render.zig @@ -534,36 +534,42 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind // scan to find row size const maybe_row_size: ?usize = blk: { - var count: usize = 0; + var count: usize = 1; var it = exprs.iterator(0); - var prev_token = (??it.peek()).*.lastToken() + 1; - while (it.next()) |expr| { - const expr_last_token = expr.*.lastToken() + 1; - const next_token = tree.tokens.at(expr_last_token + 1); - const loc = tree.tokenLocationPtr(tree.tokens.at(prev_token).end, next_token); - if (loc.line != 0) break :blk null; - if (next_token.id == Token.Id.LineComment) { - const trimmed = mem.trimRight(u8, tree.tokenSlicePtr(next_token), " "); - if (trimmed.len == 2) { - break :blk count; - } else { - break :blk null; + while (true) { + const expr = (??it.next()).*; + if (it.peek()) |next_expr| { + const expr_last_token = expr.*.lastToken() + 1; + const loc = tree.tokenLocation(tree.tokens.at(expr_last_token).end, next_expr.*.firstToken()); + if (loc.line != 0) break :blk count; + count += 1; + } else { + const expr_last_token = expr.*.lastToken(); + const loc = tree.tokenLocation(tree.tokens.at(expr_last_token).end, suffix_op.rtoken); + if (loc.line == 0) { + // all on one line + const src_has_trailing_comma = trailblk: { + const maybe_comma = tree.prevToken(suffix_op.rtoken); + break :trailblk tree.tokens.at(maybe_comma).id == Token.Id.Comma; + }; + if (src_has_trailing_comma) { + break :blk 1; // force row size 1 + } else { + break :blk null; // no newlines + } } + break :blk count; } - prev_token = expr_last_token; - count += 1; } - break :blk null; }; - 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; + var i: usize = 1; while (it.next()) |expr| { if (it.peek()) |next_expr| { try renderExpression(allocator, stream, tree, new_indent, expr.*, Space.None); @@ -571,23 +577,16 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind const comma = tree.nextToken(expr.*.lastToken()); if (i != row_size) { - try renderToken(tree, stream, comma, new_indent, Space.IgnoreEmptyComment); // , + try renderToken(tree, stream, comma, new_indent, Space.Space); // , i += 1; continue; } - i = 0; + i = 1; - try renderToken(tree, stream, comma, new_indent, Space.NoIndent); // , - - const next_token = tree.tokens.at(comma + 1); - if (next_token.id != Token.Id.LineComment) { - try stream.print(" //\n"); - } + try renderToken(tree, stream, comma, new_indent, Space.Newline); // , try renderExtraNewline(tree, stream, next_expr.*); try stream.writeByteNTimes(' ', new_indent); - } else if (i == row_size) { - try renderTrailingCommaAndEmptyComment(allocator, stream, tree, new_indent, expr.*); // , // } else { try renderTrailingComma(allocator, stream, tree, new_indent, expr.*, Space.Newline); // , } @@ -595,50 +594,22 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind try stream.writeByteNTimes(' ', indent); 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) { + } else { 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| { + try renderExpression(allocator, stream, tree, indent, expr.*, Space.None); const comma = tree.nextToken(expr.*.lastToken()); try renderToken(tree, stream, comma, indent, Space.Space); // , + } else { + try renderExpression(allocator, stream, tree, indent, expr.*, 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| { - - if (it.peek()) |next_expr| { - try renderExpression(allocator, stream, tree, new_indent, expr.*, Space.None); - - const comma = tree.nextToken(expr.*.lastToken()); - try renderToken(tree, stream, comma, new_indent, Space.Newline); // , - - try renderExtraNewline(tree, stream, next_expr.*); - try stream.writeByteNTimes(' ', new_indent); - } else { - try renderTrailingComma(allocator, stream, tree, new_indent, expr.*, Space.Newline); - } - } - - try stream.writeByteNTimes(' ', indent); - try renderToken(tree, stream, suffix_op.rtoken, indent, space); }, } },