authorgravatar for mail@isaacfreund.comIsaac Freund <mail@isaacfreund.com> 2021-02-10 19:40:19+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-02-10 11:53:53-08:00
log4c8caf33437d8ce55450a51dfbf89db69c65680e
tree1bd556dac9a15e906bcadb2148dd175eb29f4e25
parent515d4920e79ca3c631f243f6a1d7fb6b48aa91cd

zig fmt: implement Tree.lastToken() for all nodes


2 files changed, 35 insertions(+), 6 deletions(-)

lib/std/zig/ast.zig+16-6
......@@ -538,6 +538,7 @@ pub const Tree = struct {
538538 .ArrayType,
539539 .SwitchCaseOne,
540540 .SwitchCase,
541 .SwitchRange,
541542 => n = datas[n].rhs,
542543
543544 .FieldAccess,
......@@ -580,8 +581,21 @@ pub const Tree = struct {
580581 }
581582 n = tree.extra_data[params.end - 1]; // last parameter
582583 },
583 .CallComma, .AsyncCallComma => {
584 end_offset += 2; // for the comma+rparen
584 .TaggedUnionEnumTag => {
585 const members = tree.extraData(datas[n].rhs, Node.SubRange);
586 if (members.end - members.start == 0) {
587 end_offset += 4; // for the rparen + rparen + lbrace + rbrace
588 n = datas[n].lhs;
589 } else {
590 end_offset += 1; // for the rbrace
591 n = tree.extra_data[members.end - 1]; // last parameter
592 }
593 },
594 .CallComma,
595 .AsyncCallComma,
596 .TaggedUnionEnumTagComma,
597 => {
598 end_offset += 2; // for the comma + rparen/rbrace
585599 const params = tree.extraData(datas[n].rhs, Node.SubRange);
586600 assert(params.end > params.start);
587601 n = tree.extra_data[params.end - 1]; // last parameter
......@@ -942,10 +956,6 @@ pub const Tree = struct {
942956 const extra = tree.extraData(datas[n].rhs, Node.ArrayTypeSentinel);
943957 n = extra.elem_type;
944958 },
945
946 .TaggedUnionEnumTag => unreachable, // TODO
947 .TaggedUnionEnumTagComma => unreachable, // TODO
948 .SwitchRange => unreachable, // TODO
949959 };
950960 }
951961
lib/std/zig/parser_test.zig+19
......@@ -841,6 +841,25 @@ test "zig fmt: tagged union with enum values" {
841841 );
842842}
843843
844test "zig fmt: tagged union enum tag last token" {
845 try testCanonical(
846 \\test {
847 \\ const U = union(enum(u32)) {};
848 \\}
849 \\
850 \\test {
851 \\ const U = union(enum(u32)) { foo };
852 \\}
853 \\
854 \\test {
855 \\ const U = union(enum(u32)) {
856 \\ foo,
857 \\ };
858 \\}
859 \\
860 );
861}
862
844863test "zig fmt: allowzero pointer" {
845864 try testCanonical(
846865 \\const T = [*]allowzero const u8;