diff --git a/lib/std/zig/ast.zig b/lib/std/zig/ast.zig index 527c358103..358c40b28a 100644 --- a/lib/std/zig/ast.zig +++ b/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, diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig index 944722c296..bc1a36d7e3 100644 --- a/lib/std/zig/parser_test.zig +++ b/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 {