aboutsummaryrefslogtreecommitdiff
path: root/lib/std
diff options
context:
space:
mode:
authorIsaac Freund <ifreund@ifreund.xyz>2021-02-10 19:40:19 +0100
committerAndrew Kelley <andrew@ziglang.org>2021-02-10 11:53:53 -0800
commit4c8caf33437d8ce55450a51dfbf89db69c65680e (patch)
tree1bd556dac9a15e906bcadb2148dd175eb29f4e25 /lib/std
parent515d4920e79ca3c631f243f6a1d7fb6b48aa91cd (diff)
downloadzig-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.zig22
-rw-r--r--lib/std/zig/parser_test.zig19
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;