authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-05-28 16:23:33-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-05-28 16:23:33-04:00
log122a74724cb527ae6e1997c2c77118047fb50a2c
tree35879a397020730d2ba11a61e5ed78a5dbcbfb91
parent3fed10883bd6916147cce8060949040770532daf

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

2 files changed, 55 insertions(+), 76 deletions(-)

std/zig/parser_test.zig+24-16
...@@ -29,34 +29,36 @@ test "zig fmt: array literal with hint" {...@@ -29,34 +29,36 @@ test "zig fmt: array literal with hint" {
29 \\ 6,29 \\ 6,
30 \\ 7 };30 \\ 7 };
31 \\const a = []u8{31 \\const a = []u8{
32 \\ 1, 2,32 \\ 1,
33 \\ 2,
33 \\ 3, 4, //34 \\ 3, 4, //
34 \\ 5, 6, //35 \\ 5, 6, //
35 \\ 7, 8, //36 \\ 7, 8, //
36 \\};37 \\};
37 ,38 ,
38 \\const a = []u8{39 \\const a = []u8{
39 \\ 1, 2, //40 \\ 1, 2,
40 \\ 3, 4, //41 \\ 3, 4,
41 \\ 5, 6, //42 \\ 5, 6,
42 \\ 7,43 \\ 7,
43 \\};44 \\};
44 \\const a = []u8{45 \\const a = []u8{
45 \\ 1, 2, //46 \\ 1, 2,
46 \\ 3, 4, //47 \\ 3, 4,
47 \\ 5, 6, //48 \\ 5, 6,
48 \\ 7, 8, //49 \\ 7, 8,
49 \\};50 \\};
50 \\const a = []u8{51 \\const a = []u8{
51 \\ 1, 2, //52 \\ 1, 2,
52 \\ 3, 4, //53 \\ 3, 4,
53 \\ 5, 6, // blah54 \\ 5, 6, // blah
54 \\ 7, 8, //55 \\ 7, 8,
55 \\};56 \\};
56 \\const a = []u8{57 \\const a = []u8{
57 \\ 1, 2, //58 \\ 1, 2,
58 \\ 3, 4, //59 \\ 3, //
59 \\ 5, 6, //60 \\ 4,
61 \\ 5, 6,
60 \\ 7,62 \\ 7,
61 \\};63 \\};
62 \\const a = []u8{64 \\const a = []u8{
...@@ -231,12 +233,18 @@ test "zig fmt: add trailing comma to array literal" {...@@ -231,12 +233,18 @@ test "zig fmt: add trailing comma to array literal" {
231 \\ };233 \\ };
232 \\ return []u16{'m', 's', 'y', 's',234 \\ return []u16{'m', 's', 'y', 's',
233 \\ '-'};235 \\ '-'};
236 \\ return []u16{'m', 's', 'y', 's', '-'};
234 \\}237 \\}
235 ,238 ,
236 \\comptime {239 \\comptime {
237 \\ return []u16{ 'm', 's', 'y', 's', '-' // hi240 \\ return []u16{
241 \\ 'm', 's', 'y', 's', '-', // hi
242 \\ };
243 \\ return []u16{
244 \\ 'm', 's', 'y', 's',
245 \\ '-',
238 \\ };246 \\ };
239 \\ return []u16{ 'm', 's', 'y', 's', '-'};247 \\ return []u16{ 'm', 's', 'y', 's', '-' };
240 \\}248 \\}
241 \\249 \\
242 );250 );
std/zig/render.zig+31-60
...@@ -534,36 +534,42 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind...@@ -534,36 +534,42 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind
534534
535 // scan to find row size535 // scan to find row size
536 const maybe_row_size: ?usize = blk: {536 const maybe_row_size: ?usize = blk: {
537 var count: usize = 0;537 var count: usize = 1;
538 var it = exprs.iterator(0);538 var it = exprs.iterator(0);
539 var prev_token = (??it.peek()).*.lastToken() + 1;539 while (true) {
540 while (it.next()) |expr| {540 const expr = (??it.next()).*;
541 const expr_last_token = expr.*.lastToken() + 1;541 if (it.peek()) |next_expr| {
542 const next_token = tree.tokens.at(expr_last_token + 1);542 const expr_last_token = expr.*.lastToken() + 1;
543 const loc = tree.tokenLocationPtr(tree.tokens.at(prev_token).end, next_token);543 const loc = tree.tokenLocation(tree.tokens.at(expr_last_token).end, next_expr.*.firstToken());
544 if (loc.line != 0) break :blk null;544 if (loc.line != 0) break :blk count;
545 if (next_token.id == Token.Id.LineComment) {545 count += 1;
546 const trimmed = mem.trimRight(u8, tree.tokenSlicePtr(next_token), " ");546 } else {
547 if (trimmed.len == 2) {547 const expr_last_token = expr.*.lastToken();
548 break :blk count;548 const loc = tree.tokenLocation(tree.tokens.at(expr_last_token).end, suffix_op.rtoken);
549 } else {549 if (loc.line == 0) {
550 break :blk null;550 // all on one line
551 const src_has_trailing_comma = trailblk: {
552 const maybe_comma = tree.prevToken(suffix_op.rtoken);
553 break :trailblk tree.tokens.at(maybe_comma).id == Token.Id.Comma;
554 };
555 if (src_has_trailing_comma) {
556 break :blk 1; // force row size 1
557 } else {
558 break :blk null; // no newlines
559 }
551 }560 }
561 break :blk count;
552 }562 }
553 prev_token = expr_last_token;
554 count += 1;
555 }563 }
556 break :blk null;
557 };564 };
558565
559
560 if (maybe_row_size) |row_size| {566 if (maybe_row_size) |row_size| {
561 const new_indent = indent + indent_delta;567 const new_indent = indent + indent_delta;
562 try renderToken(tree, stream, lbrace, new_indent, Space.Newline);568 try renderToken(tree, stream, lbrace, new_indent, Space.Newline);
563 try stream.writeByteNTimes(' ', new_indent);569 try stream.writeByteNTimes(' ', new_indent);
564570
565 var it = exprs.iterator(0);571 var it = exprs.iterator(0);
566 var i: usize = 0;572 var i: usize = 1;
567 while (it.next()) |expr| {573 while (it.next()) |expr| {
568 if (it.peek()) |next_expr| {574 if (it.peek()) |next_expr| {
569 try renderExpression(allocator, stream, tree, new_indent, expr.*, Space.None);575 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...@@ -571,23 +577,16 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind
571 const comma = tree.nextToken(expr.*.lastToken());577 const comma = tree.nextToken(expr.*.lastToken());
572578
573 if (i != row_size) {579 if (i != row_size) {
574 try renderToken(tree, stream, comma, new_indent, Space.IgnoreEmptyComment); // ,580 try renderToken(tree, stream, comma, new_indent, Space.Space); // ,
575 i += 1;581 i += 1;
576 continue;582 continue;
577 }583 }
578 i = 0;584 i = 1;
579
580 try renderToken(tree, stream, comma, new_indent, Space.NoIndent); // ,
581585
582 const next_token = tree.tokens.at(comma + 1);586 try renderToken(tree, stream, comma, new_indent, Space.Newline); // ,
583 if (next_token.id != Token.Id.LineComment) {
584 try stream.print(" //\n");
585 }
586587
587 try renderExtraNewline(tree, stream, next_expr.*);588 try renderExtraNewline(tree, stream, next_expr.*);
588 try stream.writeByteNTimes(' ', new_indent);589 try stream.writeByteNTimes(' ', new_indent);
589 } else if (i == row_size) {
590 try renderTrailingCommaAndEmptyComment(allocator, stream, tree, new_indent, expr.*); // , //
591 } else {590 } else {
592 try renderTrailingComma(allocator, stream, tree, new_indent, expr.*, Space.Newline); // ,591 try renderTrailingComma(allocator, stream, tree, new_indent, expr.*, Space.Newline); // ,
593 }592 }
...@@ -595,50 +594,22 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind...@@ -595,50 +594,22 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind
595 try stream.writeByteNTimes(' ', indent);594 try stream.writeByteNTimes(' ', indent);
596 try renderToken(tree, stream, suffix_op.rtoken, indent, space);595 try renderToken(tree, stream, suffix_op.rtoken, indent, space);
597 return;596 return;
598 }597 } else {
599
600 const src_has_trailing_comma = blk: {
601 const maybe_comma = tree.prevToken(suffix_op.rtoken);
602 break :blk tree.tokens.at(maybe_comma).id == Token.Id.Comma;
603 };
604 if (!src_has_trailing_comma) {
605 try renderToken(tree, stream, lbrace, indent, Space.Space);598 try renderToken(tree, stream, lbrace, indent, Space.Space);
606 var it = exprs.iterator(0);599 var it = exprs.iterator(0);
607 while (it.next()) |expr| {600 while (it.next()) |expr| {
608 try renderExpression(allocator, stream, tree, indent, expr.*, Space.None);
609
610 if (it.peek()) |next_expr| {601 if (it.peek()) |next_expr| {
602 try renderExpression(allocator, stream, tree, indent, expr.*, Space.None);
611 const comma = tree.nextToken(expr.*.lastToken());603 const comma = tree.nextToken(expr.*.lastToken());
612 try renderToken(tree, stream, comma, indent, Space.Space); // ,604 try renderToken(tree, stream, comma, indent, Space.Space); // ,
605 } else {
606 try renderExpression(allocator, stream, tree, indent, expr.*, Space.Space);
613 }607 }
614 }608 }
615609
616 try renderToken(tree, stream, suffix_op.rtoken, indent, space);610 try renderToken(tree, stream, suffix_op.rtoken, indent, space);
617 return;611 return;
618 }612 }
619
620 const new_indent = indent + indent_delta;
621 try renderToken(tree, stream, lbrace, new_indent, Space.Newline);
622 try stream.writeByteNTimes(' ', new_indent);
623
624 var it = exprs.iterator(0);
625 while (it.next()) |expr| {
626
627 if (it.peek()) |next_expr| {
628 try renderExpression(allocator, stream, tree, new_indent, expr.*, Space.None);
629
630 const comma = tree.nextToken(expr.*.lastToken());
631 try renderToken(tree, stream, comma, new_indent, Space.Newline); // ,
632
633 try renderExtraNewline(tree, stream, next_expr.*);
634 try stream.writeByteNTimes(' ', new_indent);
635 } else {
636 try renderTrailingComma(allocator, stream, tree, new_indent, expr.*, Space.Newline);
637 }
638 }
639
640 try stream.writeByteNTimes(' ', indent);
641 try renderToken(tree, stream, suffix_op.rtoken, indent, space);
642 },613 },
643 }614 }
644 },615 },