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" {
2929 \\ 6,
3030 \\ 7 };
3131 \\const a = []u8{
32 \\ 1, 2,
32 \\ 1,
33 \\ 2,
3334 \\ 3, 4, //
3435 \\ 5, 6, //
3536 \\ 7, 8, //
3637 \\};
3738 ,
3839 \\const a = []u8{
39 \\ 1, 2, //
40 \\ 3, 4, //
41 \\ 5, 6, //
40 \\ 1, 2,
41 \\ 3, 4,
42 \\ 5, 6,
4243 \\ 7,
4344 \\};
4445 \\const a = []u8{
45 \\ 1, 2, //
46 \\ 3, 4, //
47 \\ 5, 6, //
48 \\ 7, 8, //
46 \\ 1, 2,
47 \\ 3, 4,
48 \\ 5, 6,
49 \\ 7, 8,
4950 \\};
5051 \\const a = []u8{
51 \\ 1, 2, //
52 \\ 3, 4, //
52 \\ 1, 2,
53 \\ 3, 4,
5354 \\ 5, 6, // blah
54 \\ 7, 8, //
55 \\ 7, 8,
5556 \\};
5657 \\const a = []u8{
57 \\ 1, 2, //
58 \\ 3, 4, //
59 \\ 5, 6, //
58 \\ 1, 2,
59 \\ 3, //
60 \\ 4,
61 \\ 5, 6,
6062 \\ 7,
6163 \\};
6264 \\const a = []u8{
......@@ -231,12 +233,18 @@ test "zig fmt: add trailing comma to array literal" {
231233 \\ };
232234 \\ return []u16{'m', 's', 'y', 's',
233235 \\ '-'};
236 \\ return []u16{'m', 's', 'y', 's', '-'};
234237 \\}
235238 ,
236239 \\comptime {
237 \\ return []u16{ 'm', 's', 'y', 's', '-' // hi
240 \\ return []u16{
241 \\ 'm', 's', 'y', 's', '-', // hi
242 \\ };
243 \\ return []u16{
244 \\ 'm', 's', 'y', 's',
245 \\ '-',
238246 \\ };
239 \\ return []u16{ 'm', 's', 'y', 's', '-'};
247 \\ return []u16{ 'm', 's', 'y', 's', '-' };
240248 \\}
241249 \\
242250 );
std/zig/render.zig+31-60
......@@ -534,36 +534,42 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind
534534
535535 // scan to find row size
536536 const maybe_row_size: ?usize = blk: {
537 var count: usize = 0;
537 var count: usize = 1;
538538 var it = exprs.iterator(0);
539 var prev_token = (??it.peek()).*.lastToken() + 1;
540 while (it.next()) |expr| {
541 const expr_last_token = expr.*.lastToken() + 1;
542 const next_token = tree.tokens.at(expr_last_token + 1);
543 const loc = tree.tokenLocationPtr(tree.tokens.at(prev_token).end, next_token);
544 if (loc.line != 0) break :blk null;
545 if (next_token.id == Token.Id.LineComment) {
546 const trimmed = mem.trimRight(u8, tree.tokenSlicePtr(next_token), " ");
547 if (trimmed.len == 2) {
548 break :blk count;
549 } else {
550 break :blk null;
539 while (true) {
540 const expr = (??it.next()).*;
541 if (it.peek()) |next_expr| {
542 const expr_last_token = expr.*.lastToken() + 1;
543 const loc = tree.tokenLocation(tree.tokens.at(expr_last_token).end, next_expr.*.firstToken());
544 if (loc.line != 0) break :blk count;
545 count += 1;
546 } else {
547 const expr_last_token = expr.*.lastToken();
548 const loc = tree.tokenLocation(tree.tokens.at(expr_last_token).end, suffix_op.rtoken);
549 if (loc.line == 0) {
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 }
551560 }
561 break :blk count;
552562 }
553 prev_token = expr_last_token;
554 count += 1;
555563 }
556 break :blk null;
557564 };
558565
559
560566 if (maybe_row_size) |row_size| {
561567 const new_indent = indent + indent_delta;
562568 try renderToken(tree, stream, lbrace, new_indent, Space.Newline);
563569 try stream.writeByteNTimes(' ', new_indent);
564570
565571 var it = exprs.iterator(0);
566 var i: usize = 0;
572 var i: usize = 1;
567573 while (it.next()) |expr| {
568574 if (it.peek()) |next_expr| {
569575 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
571577 const comma = tree.nextToken(expr.*.lastToken());
572578
573579 if (i != row_size) {
574 try renderToken(tree, stream, comma, new_indent, Space.IgnoreEmptyComment); // ,
580 try renderToken(tree, stream, comma, new_indent, Space.Space); // ,
575581 i += 1;
576582 continue;
577583 }
578 i = 0;
579
580 try renderToken(tree, stream, comma, new_indent, Space.NoIndent); // ,
584 i = 1;
581585
582 const next_token = tree.tokens.at(comma + 1);
583 if (next_token.id != Token.Id.LineComment) {
584 try stream.print(" //\n");
585 }
586 try renderToken(tree, stream, comma, new_indent, Space.Newline); // ,
586587
587588 try renderExtraNewline(tree, stream, next_expr.*);
588589 try stream.writeByteNTimes(' ', new_indent);
589 } else if (i == row_size) {
590 try renderTrailingCommaAndEmptyComment(allocator, stream, tree, new_indent, expr.*); // , //
591590 } else {
592591 try renderTrailingComma(allocator, stream, tree, new_indent, expr.*, Space.Newline); // ,
593592 }
......@@ -595,50 +594,22 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind
595594 try stream.writeByteNTimes(' ', indent);
596595 try renderToken(tree, stream, suffix_op.rtoken, indent, space);
597596 return;
598 }
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) {
597 } else {
605598 try renderToken(tree, stream, lbrace, indent, Space.Space);
606599 var it = exprs.iterator(0);
607600 while (it.next()) |expr| {
608 try renderExpression(allocator, stream, tree, indent, expr.*, Space.None);
609
610601 if (it.peek()) |next_expr| {
602 try renderExpression(allocator, stream, tree, indent, expr.*, Space.None);
611603 const comma = tree.nextToken(expr.*.lastToken());
612604 try renderToken(tree, stream, comma, indent, Space.Space); // ,
605 } else {
606 try renderExpression(allocator, stream, tree, indent, expr.*, Space.Space);
613607 }
614608 }
615609
616610 try renderToken(tree, stream, suffix_op.rtoken, indent, space);
617611 return;
618612 }
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);
642613 },
643614 }
644615 },