authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-02-05 17:46:15-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-02-05 17:46:15-07:00
log409ca8882939418b3d4cbd4be7a18daf1d4833aa
treec17fba6a7cc237996590c3c14254c432c84f9c5e
parent16a2562c3f12a5a4fe9875644b593bd571c2734c

zig fmt: trailing comma in fn parameter list


3 files changed, 69 insertions(+), 57 deletions(-)

lib/std/zig/ast.zig+2-2
......@@ -231,7 +231,6 @@ pub const Tree = struct {
231231 .NullLiteral,
232232 .UndefinedLiteral,
233233 .UnreachableLiteral,
234 .EnumLiteral,
235234 .StringLiteral,
236235 .GroupedExpression,
237236 .BuiltinCallTwo,
......@@ -256,6 +255,7 @@ pub const Tree = struct {
256255 .StructInitDot,
257256 .StructInitDotTwo,
258257 .StructInitDotTwoComma,
258 .EnumLiteral,
259259 => return main_tokens[n] - 1,
260260
261261 .Catch,
......@@ -494,6 +494,7 @@ pub const Tree = struct {
494494 .UnreachableLiteral,
495495 .Identifier,
496496 .Deref,
497 .EnumLiteral,
497498 => return main_tokens[n] + end_offset,
498499
499500 .Call,
......@@ -682,7 +683,6 @@ pub const Tree = struct {
682683 .Switch => unreachable, // TODO
683684 .If => unreachable, // TODO
684685 .Continue => unreachable, // TODO
685 .EnumLiteral => unreachable, // TODO
686686 .ErrorSetDecl => unreachable, // TODO
687687 .AsmSimple => unreachable, // TODO
688688 .Asm => unreachable, // TODO
lib/std/zig/parser_test.zig+38-38
......@@ -225,44 +225,44 @@ test "zig fmt: container declaration, transform trailing comma" {
225225 );
226226}
227227
228//test "zig fmt: trailing comma in fn parameter list" {
229// try testCanonical(
230// \\pub fn f(
231// \\ a: i32,
232// \\ b: i32,
233// \\) i32 {}
234// \\pub fn f(
235// \\ a: i32,
236// \\ b: i32,
237// \\) align(8) i32 {}
238// \\pub fn f(
239// \\ a: i32,
240// \\ b: i32,
241// \\) linksection(".text") i32 {}
242// \\pub fn f(
243// \\ a: i32,
244// \\ b: i32,
245// \\) callconv(.C) i32 {}
246// \\pub fn f(
247// \\ a: i32,
248// \\ b: i32,
249// \\) align(8) linksection(".text") i32 {}
250// \\pub fn f(
251// \\ a: i32,
252// \\ b: i32,
253// \\) align(8) callconv(.C) i32 {}
254// \\pub fn f(
255// \\ a: i32,
256// \\ b: i32,
257// \\) align(8) linksection(".text") callconv(.C) i32 {}
258// \\pub fn f(
259// \\ a: i32,
260// \\ b: i32,
261// \\) linksection(".text") callconv(.C) i32 {}
262// \\
263// );
264//}
265//
228test "zig fmt: trailing comma in fn parameter list" {
229 try testCanonical(
230 \\pub fn f(
231 \\ a: i32,
232 \\ b: i32,
233 \\) i32 {}
234 \\pub fn f(
235 \\ a: i32,
236 \\ b: i32,
237 \\) align(8) i32 {}
238 \\pub fn f(
239 \\ a: i32,
240 \\ b: i32,
241 \\) linksection(".text") i32 {}
242 \\pub fn f(
243 \\ a: i32,
244 \\ b: i32,
245 \\) callconv(.C) i32 {}
246 \\pub fn f(
247 \\ a: i32,
248 \\ b: i32,
249 \\) align(8) linksection(".text") i32 {}
250 \\pub fn f(
251 \\ a: i32,
252 \\ b: i32,
253 \\) align(8) callconv(.C) i32 {}
254 \\pub fn f(
255 \\ a: i32,
256 \\ b: i32,
257 \\) align(8) linksection(".text") callconv(.C) i32 {}
258 \\pub fn f(
259 \\ a: i32,
260 \\ b: i32,
261 \\) linksection(".text") callconv(.C) i32 {}
262 \\
263 );
264}
265
266266//test "zig fmt: comptime struct field" {
267267// try testCanonical(
268268// \\const Foo = struct {
lib/std/zig/render.zig+29-17
......@@ -1138,13 +1138,10 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
11381138 // return renderToken(ais, tree, asm_node.rparen, space);
11391139 //},
11401140
1141 .EnumLiteral => unreachable, // TODO
1142 //.EnumLiteral => {
1143 // const enum_literal = @fieldParentPtr(ast.Node.EnumLiteral, "base", base);
1144
1145 // try renderToken(ais, tree, enum_literal.dot, Space.None); // .
1146 // return renderToken(ais, tree, enum_literal.name, space); // name
1147 //},
1141 .EnumLiteral => {
1142 try renderToken(ais, tree, main_tokens[node] - 1, .None); // .
1143 return renderToken(ais, tree, main_tokens[node], space); // name
1144 },
11481145
11491146 .FnDecl => unreachable,
11501147 .ContainerField => unreachable,
......@@ -1538,6 +1535,7 @@ fn renderBuiltinCall(
15381535
15391536fn renderFnProto(ais: *Ais, tree: ast.Tree, fn_proto: ast.Full.FnProto, space: Space) Error!void {
15401537 const token_tags = tree.tokens.items(.tag);
1538 const token_starts = tree.tokens.items(.start);
15411539
15421540 const after_fn_token = fn_proto.ast.fn_token + 1;
15431541 const lparen = if (token_tags[after_fn_token] == .Identifier) blk: {
......@@ -1552,21 +1550,35 @@ fn renderFnProto(ais: *Ais, tree: ast.Tree, fn_proto: ast.Full.FnProto, space: S
15521550
15531551 const maybe_bang = tree.firstToken(fn_proto.ast.return_type) - 1;
15541552 const rparen = blk: {
1555 // The first token for the annotation expressions is the left
1556 // parenthesis, hence the need for two previous tokens.
1553 // These may appear in any order, so we have to check the token_starts array
1554 // to find out which is first.
1555 var rparen: ast.TokenIndex = maybe_bang;
1556 var smallest_start = token_starts[maybe_bang];
15571557 if (fn_proto.ast.align_expr != 0) {
1558 break :blk tree.firstToken(fn_proto.ast.align_expr) - 3;
1558 const tok = tree.firstToken(fn_proto.ast.align_expr) - 3;
1559 const start = token_starts[tok];
1560 if (start < smallest_start) {
1561 rparen = tok;
1562 smallest_start = start;
1563 }
15591564 }
15601565 if (fn_proto.ast.section_expr != 0) {
1561 break :blk tree.firstToken(fn_proto.ast.section_expr) - 3;
1566 const tok = tree.firstToken(fn_proto.ast.section_expr) - 3;
1567 const start = token_starts[tok];
1568 if (start < smallest_start) {
1569 rparen = tok;
1570 smallest_start = start;
1571 }
15621572 }
15631573 if (fn_proto.ast.callconv_expr != 0) {
1564 break :blk tree.firstToken(fn_proto.ast.callconv_expr) - 3;
1565 }
1566 if (token_tags[maybe_bang] == .Bang) {
1567 break :blk maybe_bang - 1;
1574 const tok = tree.firstToken(fn_proto.ast.callconv_expr) - 3;
1575 const start = token_starts[tok];
1576 if (start < smallest_start) {
1577 rparen = tok;
1578 smallest_start = start;
1579 }
15681580 }
1569 break :blk maybe_bang;
1581 break :blk rparen;
15701582 };
15711583 assert(token_tags[rparen] == .RParen);
15721584
......@@ -1663,7 +1675,7 @@ fn renderFnProto(ais: *Ais, tree: ast.Tree, fn_proto: ast.Full.FnProto, space: S
16631675 const param = fn_proto.ast.params[param_i];
16641676 param_i += 1;
16651677 try renderExpression(ais, tree, param, .Comma);
1666 last_param_token = tree.lastToken(param) + 2;
1678 last_param_token = tree.lastToken(param) + 1;
16671679 }
16681680 ais.popIndent();
16691681 }