Unnamed repository; edit this file 'description' to name the repository.
Auto merge of #16493 - Young-Flash:method_call_parser, r=Veykril
fix: emit parser error for missing argument list close https://github.com/rust-lang/rust-analyzer/issues/16362
bors 2024-02-05
parent 7fb639f · parent 864c3d5 · commit cb37fcc
-rw-r--r--crates/parser/src/grammar/expressions.rs9
-rw-r--r--crates/parser/test_data/parser/inline/err/0028_method_call_missing_argument_list.rast56
-rw-r--r--crates/parser/test_data/parser/inline/err/0028_method_call_missing_argument_list.rs4
3 files changed, 69 insertions, 0 deletions
diff --git a/crates/parser/src/grammar/expressions.rs b/crates/parser/src/grammar/expressions.rs
index c862611114..e99c111d39 100644
--- a/crates/parser/src/grammar/expressions.rs
+++ b/crates/parser/src/grammar/expressions.rs
@@ -530,6 +530,15 @@ fn method_call_expr<const FLOAT_RECOVERY: bool>(
generic_args::opt_generic_arg_list(p, true);
if p.at(T!['(']) {
arg_list(p);
+ } else {
+ // emit an error when argument list is missing
+
+ // test_err method_call_missing_argument_list
+ // fn func() {
+ // foo.bar::<>
+ // foo.bar::<i32>;
+ // }
+ p.error("expected argument list");
}
m.complete(p, METHOD_CALL_EXPR)
}
diff --git a/crates/parser/test_data/parser/inline/err/0028_method_call_missing_argument_list.rast b/crates/parser/test_data/parser/inline/err/0028_method_call_missing_argument_list.rast
new file mode 100644
index 0000000000..02544b5e53
--- /dev/null
+++ b/crates/parser/test_data/parser/inline/err/0028_method_call_missing_argument_list.rast
@@ -0,0 +1,56 @@
+SOURCE_FILE
+ FN
+ FN_KW "fn"
+ WHITESPACE " "
+ NAME
+ IDENT "func"
+ PARAM_LIST
+ L_PAREN "("
+ R_PAREN ")"
+ WHITESPACE " "
+ BLOCK_EXPR
+ STMT_LIST
+ L_CURLY "{"
+ WHITESPACE "\n "
+ EXPR_STMT
+ METHOD_CALL_EXPR
+ PATH_EXPR
+ PATH
+ PATH_SEGMENT
+ NAME_REF
+ IDENT "foo"
+ DOT "."
+ NAME_REF
+ IDENT "bar"
+ GENERIC_ARG_LIST
+ COLON2 "::"
+ L_ANGLE "<"
+ R_ANGLE ">"
+ WHITESPACE "\n "
+ EXPR_STMT
+ METHOD_CALL_EXPR
+ PATH_EXPR
+ PATH
+ PATH_SEGMENT
+ NAME_REF
+ IDENT "foo"
+ DOT "."
+ NAME_REF
+ IDENT "bar"
+ GENERIC_ARG_LIST
+ COLON2 "::"
+ L_ANGLE "<"
+ TYPE_ARG
+ PATH_TYPE
+ PATH
+ PATH_SEGMENT
+ NAME_REF
+ IDENT "i32"
+ R_ANGLE ">"
+ SEMICOLON ";"
+ WHITESPACE "\n"
+ R_CURLY "}"
+ WHITESPACE "\n"
+error 27: expected argument list
+error 27: expected SEMICOLON
+error 46: expected argument list
diff --git a/crates/parser/test_data/parser/inline/err/0028_method_call_missing_argument_list.rs b/crates/parser/test_data/parser/inline/err/0028_method_call_missing_argument_list.rs
new file mode 100644
index 0000000000..7c8baecaa9
--- /dev/null
+++ b/crates/parser/test_data/parser/inline/err/0028_method_call_missing_argument_list.rs
@@ -0,0 +1,4 @@
+fn func() {
+ foo.bar::<>
+ foo.bar::<i32>;
+}