Skip to content

Commit 50678e0

Browse files
committed
Auto merge of #15682 - Veykril:param-list-recov, r=Veykril
Recover better on missing parameter in param list We should do the same for argument lists, but that is more tricky to fix.
2 parents 87e2c31 + a382e64 commit 50678e0

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

crates/parser/src/grammar/params.rs

+8-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ use super::*;
77
// fn b(x: i32) {}
88
// fn c(x: i32, ) {}
99
// fn d(x: i32, y: ()) {}
10+
11+
// test_err empty_param_slot
12+
// fn f(y: i32, ,t: i32) {}
1013
pub(super) fn param_list_fn_def(p: &mut Parser<'_>) {
1114
list_(p, Flavor::FnDef);
1215
}
@@ -71,7 +74,11 @@ fn list_(p: &mut Parser<'_>, flavor: Flavor) {
7174
if !p.at_ts(PARAM_FIRST.union(ATTRIBUTE_FIRST)) {
7275
p.error("expected value parameter");
7376
m.abandon(p);
74-
break;
77+
if p.eat(T![,]) {
78+
continue;
79+
} else {
80+
break;
81+
}
7582
}
7683
param(p, m, flavor);
7784
if !p.at(T![,]) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
SOURCE_FILE
2+
FN
3+
FN_KW "fn"
4+
WHITESPACE " "
5+
NAME
6+
IDENT "f"
7+
PARAM_LIST
8+
L_PAREN "("
9+
PARAM
10+
IDENT_PAT
11+
NAME
12+
IDENT "y"
13+
COLON ":"
14+
WHITESPACE " "
15+
PATH_TYPE
16+
PATH
17+
PATH_SEGMENT
18+
NAME_REF
19+
IDENT "i32"
20+
COMMA ","
21+
WHITESPACE " "
22+
COMMA ","
23+
PARAM
24+
IDENT_PAT
25+
NAME
26+
IDENT "t"
27+
COLON ":"
28+
WHITESPACE " "
29+
PATH_TYPE
30+
PATH
31+
PATH_SEGMENT
32+
NAME_REF
33+
IDENT "i32"
34+
R_PAREN ")"
35+
WHITESPACE " "
36+
BLOCK_EXPR
37+
STMT_LIST
38+
L_CURLY "{"
39+
R_CURLY "}"
40+
WHITESPACE "\n"
41+
error 12: expected value parameter
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
fn f(y: i32, ,t: i32) {}

0 commit comments

Comments
 (0)