Skip to content

Commit 122a747

Browse files
committed
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
1 parent 3fed108 commit 122a747

File tree

2 files changed

+55
-76
lines changed

2 files changed

+55
-76
lines changed

std/zig/parser_test.zig

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Lines changed: 31 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -534,111 +534,82 @@ 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);
570576

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
}
594593
}
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
},

0 commit comments

Comments
 (0)