Skip to content

Commit cb37fcc

Browse files
committed
Auto merge of #16493 - Young-Flash:method_call_parser, r=Veykril
fix: emit parser error for missing argument list close rust-lang/rust-analyzer#16362
2 parents 7fb639f + 864c3d5 commit cb37fcc

File tree

3 files changed

+69
-0
lines changed

3 files changed

+69
-0
lines changed

crates/parser/src/grammar/expressions.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,15 @@ fn method_call_expr<const FLOAT_RECOVERY: bool>(
530530
generic_args::opt_generic_arg_list(p, true);
531531
if p.at(T!['(']) {
532532
arg_list(p);
533+
} else {
534+
// emit an error when argument list is missing
535+
536+
// test_err method_call_missing_argument_list
537+
// fn func() {
538+
// foo.bar::<>
539+
// foo.bar::<i32>;
540+
// }
541+
p.error("expected argument list");
533542
}
534543
m.complete(p, METHOD_CALL_EXPR)
535544
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
SOURCE_FILE
2+
FN
3+
FN_KW "fn"
4+
WHITESPACE " "
5+
NAME
6+
IDENT "func"
7+
PARAM_LIST
8+
L_PAREN "("
9+
R_PAREN ")"
10+
WHITESPACE " "
11+
BLOCK_EXPR
12+
STMT_LIST
13+
L_CURLY "{"
14+
WHITESPACE "\n "
15+
EXPR_STMT
16+
METHOD_CALL_EXPR
17+
PATH_EXPR
18+
PATH
19+
PATH_SEGMENT
20+
NAME_REF
21+
IDENT "foo"
22+
DOT "."
23+
NAME_REF
24+
IDENT "bar"
25+
GENERIC_ARG_LIST
26+
COLON2 "::"
27+
L_ANGLE "<"
28+
R_ANGLE ">"
29+
WHITESPACE "\n "
30+
EXPR_STMT
31+
METHOD_CALL_EXPR
32+
PATH_EXPR
33+
PATH
34+
PATH_SEGMENT
35+
NAME_REF
36+
IDENT "foo"
37+
DOT "."
38+
NAME_REF
39+
IDENT "bar"
40+
GENERIC_ARG_LIST
41+
COLON2 "::"
42+
L_ANGLE "<"
43+
TYPE_ARG
44+
PATH_TYPE
45+
PATH
46+
PATH_SEGMENT
47+
NAME_REF
48+
IDENT "i32"
49+
R_ANGLE ">"
50+
SEMICOLON ";"
51+
WHITESPACE "\n"
52+
R_CURLY "}"
53+
WHITESPACE "\n"
54+
error 27: expected argument list
55+
error 27: expected SEMICOLON
56+
error 46: expected argument list
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
fn func() {
2+
foo.bar::<>
3+
foo.bar::<i32>;
4+
}

0 commit comments

Comments
 (0)