From f962315363b6306f819b7c88b830ea00ab0e734e Mon Sep 17 00:00:00 2001 From: Vexu Date: Thu, 30 Jul 2020 12:58:32 +0300 Subject: [PATCH] fix missing parser error for missing comma before eof Closes #5952 --- lib/std/zig/parse.zig | 11 ++++++++++- lib/std/zig/parser_test.zig | 8 ++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/std/zig/parse.zig b/lib/std/zig/parse.zig index 86098f91ad..70a305007b 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 aa0a76c8a5..87807255b0 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 {