diff --git a/crates/parser/src/grammar/items/consts.rs b/crates/parser/src/grammar/items/consts.rs index 6b53493c9a..e6a8aca586 100644 --- a/crates/parser/src/grammar/items/consts.rs +++ b/crates/parser/src/grammar/items/consts.rs @@ -25,18 +25,17 @@ fn const_or_static(p: &mut Parser<'_>, m: Marker, is_const: bool) { } // FIXME: Recover on statics with generic params/where clause. - if is_const { - // test generic_const - // const C: u32 = 0; - // impl Foo { - // const C<'a>: &'a () = &(); - // } - generic_params::opt_generic_param_list(p); - } else if p.at(T![<]) { + if !is_const && p.at(T![<]) { + // test_err generic_static + // static C: u32 = 0; p.error("`static` may not have generic parameters"); } - // test_err generic_static - // static C: u32 = 0; + // test generic_const + // const C: u32 = 0; + // impl Foo { + // const C<'a>: &'a () = &(); + // } + generic_params::opt_generic_param_list(p); if p.at(T![:]) { types::ascription(p); @@ -44,7 +43,7 @@ fn const_or_static(p: &mut Parser<'_>, m: Marker, is_const: bool) { // test_err missing_const_type // const C = 0; p.error("missing type for `const`"); - } else if !p.at(T![<]) { + } else { // test_err missing_static_type // static C = 0; p.error("missing type for `static`"); diff --git a/crates/parser/test_data/parser/inline/err/generic_static.rast b/crates/parser/test_data/parser/inline/err/generic_static.rast index 0c240b7214..08017cb0fc 100644 --- a/crates/parser/test_data/parser/inline/err/generic_static.rast +++ b/crates/parser/test_data/parser/inline/err/generic_static.rast @@ -4,39 +4,24 @@ SOURCE_FILE WHITESPACE " " NAME IDENT "C" - ERROR - L_ANGLE "<" - ERROR - PATH - PATH_SEGMENT - NAME_REF + GENERIC_PARAM_LIST + L_ANGLE "<" + TYPE_PARAM + NAME IDENT "i32" - ERROR - R_ANGLE ">" - ERROR + R_ANGLE ">" COLON ":" - WHITESPACE " " - ERROR - PATH - PATH_SEGMENT - NAME_REF - IDENT "u32" - WHITESPACE " " - ERROR + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + IDENT "u32" + WHITESPACE " " EQ "=" - WHITESPACE " " - ERROR - INT_NUMBER "0" - ERROR + WHITESPACE " " + LITERAL + INT_NUMBER "0" SEMICOLON ";" WHITESPACE "\n" error 8: `static` may not have generic parameters -error 8: expected SEMICOLON -error 8: expected an item -error 12: expected an item -error 12: expected an item -error 13: expected an item -error 18: expected an item -error 19: expected an item -error 21: expected an item -error 22: expected an item