Commit 515d4920e7

Isaac Freund <ifreund@ifreund.xyz>
2021-02-10 19:19:58
zig fmt: fix 0 element struct and array init
1 parent 5df7fc3
Changed files (2)
lib/std/zig/ast.zig
@@ -796,8 +796,11 @@ pub const Tree = struct {
             .StructInitOne,
             => {
                 end_offset += 1; // rbrace
-                n = datas[n].rhs;
-                assert(n != 0);
+                if (datas[n].rhs == 0) {
+                    return main_tokens[n] + end_offset;
+                } else {
+                    n = datas[n].rhs;
+                }
             },
             .SliceOpen,
             .CallOneComma,
lib/std/zig/parser_test.zig
@@ -464,6 +464,15 @@ test "zig fmt: anon literal in array" {
 //    );
 //}
 
+test "zig fmt: anon struct literal 0 element" {
+    try testCanonical(
+        \\test {
+        \\    const x = .{};
+        \\}
+        \\
+    );
+}
+
 test "zig fmt: anon struct literal 1 element" {
     try testCanonical(
         \\test {
@@ -527,6 +536,15 @@ test "zig fmt: anon struct literal 3 element comma" {
     );
 }
 
+test "zig fmt: struct literal 0 element" {
+    try testCanonical(
+        \\test {
+        \\    const x = X{};
+        \\}
+        \\
+    );
+}
+
 test "zig fmt: struct literal 1 element" {
     try testCanonical(
         \\test {
@@ -653,6 +671,15 @@ test "zig fmt: anon list literal 3 element comma" {
     );
 }
 
+test "zig fmt: array literal 0 element" {
+    try testCanonical(
+        \\test {
+        \\    const x = [_]u32{};
+        \\}
+        \\
+    );
+}
+
 test "zig fmt: array literal 1 element" {
     try testCanonical(
         \\test {