diff options
| author | bors <bors@rust-lang.org> | 2024-02-05 13:03:03 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-02-05 13:03:03 +0000 |
| commit | cb37fcc616abd8747c13386a8b23bfd7962d6c92 (patch) | |
| tree | c40be9abc8380aa976cdce502883b9c29c484dab | |
| parent | 7fb639ffc18928cfc2fcdc4a0839b6e05bae4298 (diff) | |
| parent | 864c3d58801d5afcb69879720c1e0ed4d305cc73 (diff) | |
| download | rust-cb37fcc616abd8747c13386a8b23bfd7962d6c92.tar.gz rust-cb37fcc616abd8747c13386a8b23bfd7962d6c92.zip | |
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
3 files changed, 69 insertions, 0 deletions
diff --git a/crates/parser/src/grammar/expressions.rs b/crates/parser/src/grammar/expressions.rs index c8626111145..e99c111d39e 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 00000000000..02544b5e532 --- /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 00000000000..7c8baecaa9c --- /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>; +} |
