diff options
| author | Isaac Freund <ifreund@ifreund.xyz> | 2021-02-10 19:40:19 +0100 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-02-10 11:53:53 -0800 |
| commit | 4c8caf33437d8ce55450a51dfbf89db69c65680e (patch) | |
| tree | 1bd556dac9a15e906bcadb2148dd175eb29f4e25 /lib/std | |
| parent | 515d4920e79ca3c631f243f6a1d7fb6b48aa91cd (diff) | |
| download | zig-4c8caf33437d8ce55450a51dfbf89db69c65680e.tar.gz zig-4c8caf33437d8ce55450a51dfbf89db69c65680e.zip | |
zig fmt: implement Tree.lastToken() for all nodes
Diffstat (limited to 'lib/std')
| -rw-r--r-- | lib/std/zig/ast.zig | 22 | ||||
| -rw-r--r-- | lib/std/zig/parser_test.zig | 19 |
2 files changed, 35 insertions, 6 deletions
diff --git a/lib/std/zig/ast.zig b/lib/std/zig/ast.zig index 358c40b28a..783a578e01 100644 --- a/lib/std/zig/ast.zig +++ b/lib/std/zig/ast.zig @@ -538,6 +538,7 @@ pub const Tree = struct { .ArrayType, .SwitchCaseOne, .SwitchCase, + .SwitchRange, => n = datas[n].rhs, .FieldAccess, @@ -580,8 +581,21 @@ pub const Tree = struct { } n = tree.extra_data[params.end - 1]; // last parameter }, - .CallComma, .AsyncCallComma => { - end_offset += 2; // for the comma+rparen + .TaggedUnionEnumTag => { + const members = tree.extraData(datas[n].rhs, Node.SubRange); + if (members.end - members.start == 0) { + end_offset += 4; // for the rparen + rparen + lbrace + rbrace + n = datas[n].lhs; + } else { + end_offset += 1; // for the rbrace + n = tree.extra_data[members.end - 1]; // last parameter + } + }, + .CallComma, + .AsyncCallComma, + .TaggedUnionEnumTagComma, + => { + end_offset += 2; // for the comma + rparen/rbrace const params = tree.extraData(datas[n].rhs, Node.SubRange); assert(params.end > params.start); n = tree.extra_data[params.end - 1]; // last parameter @@ -942,10 +956,6 @@ pub const Tree = struct { const extra = tree.extraData(datas[n].rhs, Node.ArrayTypeSentinel); n = extra.elem_type; }, - - .TaggedUnionEnumTag => unreachable, // TODO - .TaggedUnionEnumTagComma => unreachable, // TODO - .SwitchRange => unreachable, // TODO }; } diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig index bc1a36d7e3..c6ee4f6bd9 100644 --- a/lib/std/zig/parser_test.zig +++ b/lib/std/zig/parser_test.zig @@ -841,6 +841,25 @@ test "zig fmt: tagged union with enum values" { ); } +test "zig fmt: tagged union enum tag last token" { + try testCanonical( + \\test { + \\ const U = union(enum(u32)) {}; + \\} + \\ + \\test { + \\ const U = union(enum(u32)) { foo }; + \\} + \\ + \\test { + \\ const U = union(enum(u32)) { + \\ foo, + \\ }; + \\} + \\ + ); +} + test "zig fmt: allowzero pointer" { try testCanonical( \\const T = [*]allowzero const u8; |
