| author | |
| committer | |
| log | 409ca8882939418b3d4cbd4be7a18daf1d4833aa |
| tree | c17fba6a7cc237996590c3c14254c432c84f9c5e |
| parent | 16a2562c3f12a5a4fe9875644b593bd571c2734c |
3 files changed, 69 insertions(+), 57 deletions(-)
lib/std/zig/ast.zig+2-2| ... | ... | @@ -231,7 +231,6 @@ pub const Tree = struct { |
| 231 | 231 | .NullLiteral, |
| 232 | 232 | .UndefinedLiteral, |
| 233 | 233 | .UnreachableLiteral, |
| 234 | .EnumLiteral, | |
| 235 | 234 | .StringLiteral, |
| 236 | 235 | .GroupedExpression, |
| 237 | 236 | .BuiltinCallTwo, |
| ... | ... | @@ -256,6 +255,7 @@ pub const Tree = struct { |
| 256 | 255 | .StructInitDot, |
| 257 | 256 | .StructInitDotTwo, |
| 258 | 257 | .StructInitDotTwoComma, |
| 258 | .EnumLiteral, | |
| 259 | 259 | => return main_tokens[n] - 1, |
| 260 | 260 | |
| 261 | 261 | .Catch, |
| ... | ... | @@ -494,6 +494,7 @@ pub const Tree = struct { |
| 494 | 494 | .UnreachableLiteral, |
| 495 | 495 | .Identifier, |
| 496 | 496 | .Deref, |
| 497 | .EnumLiteral, | |
| 497 | 498 | => return main_tokens[n] + end_offset, |
| 498 | 499 | |
| 499 | 500 | .Call, |
| ... | ... | @@ -682,7 +683,6 @@ pub const Tree = struct { |
| 682 | 683 | .Switch => unreachable, // TODO |
| 683 | 684 | .If => unreachable, // TODO |
| 684 | 685 | .Continue => unreachable, // TODO |
| 685 | .EnumLiteral => unreachable, // TODO | |
| 686 | 686 | .ErrorSetDecl => unreachable, // TODO |
| 687 | 687 | .AsmSimple => unreachable, // TODO |
| 688 | 688 | .Asm => unreachable, // TODO |
lib/std/zig/parser_test.zig+38-38| ... | ... | @@ -225,44 +225,44 @@ test "zig fmt: container declaration, transform trailing comma" { |
| 225 | 225 | ); |
| 226 | 226 | } |
| 227 | 227 | |
| 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 | // | |
| 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 | ||
| 266 | 266 | //test "zig fmt: comptime struct field" { |
| 267 | 267 | // try testCanonical( |
| 268 | 268 | // \\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 |
| 1138 | 1138 | // return renderToken(ais, tree, asm_node.rparen, space); |
| 1139 | 1139 | //}, |
| 1140 | 1140 | |
| 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 | }, | |
| 1148 | 1145 | |
| 1149 | 1146 | .FnDecl => unreachable, |
| 1150 | 1147 | .ContainerField => unreachable, |
| ... | ... | @@ -1538,6 +1535,7 @@ fn renderBuiltinCall( |
| 1538 | 1535 | |
| 1539 | 1536 | fn renderFnProto(ais: *Ais, tree: ast.Tree, fn_proto: ast.Full.FnProto, space: Space) Error!void { |
| 1540 | 1537 | const token_tags = tree.tokens.items(.tag); |
| 1538 | const token_starts = tree.tokens.items(.start); | |
| 1541 | 1539 | |
| 1542 | 1540 | const after_fn_token = fn_proto.ast.fn_token + 1; |
| 1543 | 1541 | 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 |
| 1552 | 1550 | |
| 1553 | 1551 | const maybe_bang = tree.firstToken(fn_proto.ast.return_type) - 1; |
| 1554 | 1552 | 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]; | |
| 1557 | 1557 | 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 | } | |
| 1559 | 1564 | } |
| 1560 | 1565 | 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 | } | |
| 1562 | 1572 | } |
| 1563 | 1573 | 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 | } | |
| 1568 | 1580 | } |
| 1569 | break :blk maybe_bang; | |
| 1581 | break :blk rparen; | |
| 1570 | 1582 | }; |
| 1571 | 1583 | assert(token_tags[rparen] == .RParen); |
| 1572 | 1584 | |
| ... | ... | @@ -1663,7 +1675,7 @@ fn renderFnProto(ais: *Ais, tree: ast.Tree, fn_proto: ast.Full.FnProto, space: S |
| 1663 | 1675 | const param = fn_proto.ast.params[param_i]; |
| 1664 | 1676 | param_i += 1; |
| 1665 | 1677 | try renderExpression(ais, tree, param, .Comma); |
| 1666 | last_param_token = tree.lastToken(param) + 2; | |
| 1678 | last_param_token = tree.lastToken(param) + 1; | |
| 1667 | 1679 | } |
| 1668 | 1680 | ais.popIndent(); |
| 1669 | 1681 | } |