diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig index 4ec527fd6c..2b9e3fb03c 100644 --- a/lib/std/zig/parser_test.zig +++ b/lib/std/zig/parser_test.zig @@ -4190,6 +4190,17 @@ test "zig fmt: function with labeled block as return type" { ); } +test "zig fmt: extern function with missing param name" { + try testCanonical( + \\extern fn a( + \\ *b, + \\ c: *d, + \\) e; + \\extern fn f(*g, h: *i) j; + \\ + ); +} + test "zig fmt: line comment after multiline single expr if statement with multiline string" { try testCanonical( \\test { diff --git a/lib/std/zig/render.zig b/lib/std/zig/render.zig index 673a05f8e6..e12f7bc733 100644 --- a/lib/std/zig/render.zig +++ b/lib/std/zig/render.zig @@ -1449,9 +1449,11 @@ fn renderFnProto(gpa: *Allocator, ais: *Ais, tree: ast.Tree, fn_proto: ast.full. continue; }, .r_paren => break, - else => unreachable, + else => {}, // Parameter type without a name. } - if (token_tags[last_param_token] == .identifier) { + if (token_tags[last_param_token] == .identifier and + token_tags[last_param_token + 1] == .colon) + { try renderToken(ais, tree, last_param_token, .none); // name last_param_token += 1; try renderToken(ais, tree, last_param_token, .space); // :