diff --git a/lib/std/zig/parse.zig b/lib/std/zig/parse.zig index 86098f91ad176d2e45926c6685ba3e13b0e1097c..70a305007bc9fdf30a6b7d8b63dc685e03f25388 100644 --- a/lib/std/zig/parse.zig +++ b/lib/std/zig/parse.zig @@ -201,7 +201,16 @@ const Parser = struct { p.findNextContainerMember(); const next = p.token_ids[p.tok_i]; switch (next) { - .Eof => break, + .Eof => { + // no invalid tokens were found + if (index == p.tok_i) break; + + // Invalid tokens, add error and exit + try p.errors.append(p.gpa, .{ + .ExpectedToken = .{ .token = index, .expected_id = .Comma }, + }); + break; + }, else => { if (next == .RBrace) { if (!top_level) break; diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig index aa0a76c8a5a14e4bc3008e73c979af82108c1717..87807255b0d47ce786ebb9d507fc28aaaca3eb6e 100644 --- a/lib/std/zig/parser_test.zig +++ b/lib/std/zig/parser_test.zig @@ -293,6 +293,14 @@ test "zig fmt: decl between fields" { }); } +test "zig fmt: eof after missing comma" { + try testError( + \\foo() + , &[_]Error{ + .ExpectedToken, + }); +} + test "zig fmt: errdefer with payload" { try testCanonical( \\pub fn main() anyerror!void {