Merge pull request #19643 from ChayimFriedman2/generic-const-items

feat: Parse generic consts
This commit is contained in:
Lukas Wirth 2025-04-21 12:17:08 +00:00 committed by GitHub
commit e3f7d18458
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 305 additions and 3 deletions

View file

@ -139,6 +139,10 @@ mod ok {
run_and_expect_no_errors("test_data/parser/inline/ok/const_trait_bound.rs");
}
#[test]
fn const_where_clause() {
run_and_expect_no_errors("test_data/parser/inline/ok/const_where_clause.rs");
}
#[test]
fn continue_expr() { run_and_expect_no_errors("test_data/parser/inline/ok/continue_expr.rs"); }
#[test]
fn crate_path() { run_and_expect_no_errors("test_data/parser/inline/ok/crate_path.rs"); }
@ -278,6 +282,8 @@ mod ok {
run_and_expect_no_errors("test_data/parser/inline/ok/generic_arg_bounds.rs");
}
#[test]
fn generic_const() { run_and_expect_no_errors("test_data/parser/inline/ok/generic_const.rs"); }
#[test]
fn generic_param_attribute() {
run_and_expect_no_errors("test_data/parser/inline/ok/generic_param_attribute.rs");
}
@ -764,6 +770,8 @@ mod err {
run_and_expect_errors("test_data/parser/inline/err/generic_param_list_recover.rs");
}
#[test]
fn generic_static() { run_and_expect_errors("test_data/parser/inline/err/generic_static.rs"); }
#[test]
fn impl_type() { run_and_expect_errors("test_data/parser/inline/err/impl_type.rs"); }
#[test]
fn let_else_right_curly_brace() {
@ -836,6 +844,10 @@ mod err {
run_and_expect_errors("test_data/parser/inline/err/recover_from_missing_const_default.rs");
}
#[test]
fn static_where_clause() {
run_and_expect_errors("test_data/parser/inline/err/static_where_clause.rs");
}
#[test]
fn struct_field_recover() {
run_and_expect_errors("test_data/parser/inline/err/struct_field_recover.rs");
}

View file

@ -0,0 +1,42 @@
SOURCE_FILE
STATIC
STATIC_KW "static"
WHITESPACE " "
NAME
IDENT "C"
ERROR
L_ANGLE "<"
ERROR
PATH
PATH_SEGMENT
NAME_REF
IDENT "i32"
ERROR
R_ANGLE ">"
ERROR
COLON ":"
WHITESPACE " "
ERROR
PATH
PATH_SEGMENT
NAME_REF
IDENT "u32"
WHITESPACE " "
ERROR
EQ "="
WHITESPACE " "
ERROR
INT_NUMBER "0"
ERROR
SEMICOLON ";"
WHITESPACE "\n"
error 8: missing type for `const` or `static`
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

View file

@ -0,0 +1 @@
static C<i32>: u32 = 0;

View file

@ -0,0 +1,44 @@
SOURCE_FILE
STATIC
STATIC_KW "static"
WHITESPACE " "
NAME
IDENT "C"
COLON ":"
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
IDENT "u32"
WHITESPACE " "
EQ "="
WHITESPACE " "
LITERAL
INT_NUMBER "0"
WHITESPACE "\n"
ERROR
WHERE_KW "where"
WHITESPACE " "
ERROR
PATH
PATH_SEGMENT
NAME_REF
IDENT "i32"
ERROR
COLON ":"
WHITESPACE " "
ERROR
PATH
PATH_SEGMENT
NAME_REF
IDENT "Copy"
ERROR
SEMICOLON ";"
WHITESPACE "\n"
error 17: expected SEMICOLON
error 18: expected an item
error 27: expected an item
error 27: expected an item
error 33: expected an item
error 33: expected an item

View file

@ -0,0 +1,2 @@
static C: u32 = 0
where i32: Copy;

View file

@ -0,0 +1,89 @@
SOURCE_FILE
CONST
CONST_KW "const"
WHITESPACE " "
NAME
IDENT "C"
GENERIC_PARAM_LIST
L_ANGLE "<"
TYPE_PARAM
NAME
IDENT "i32"
R_ANGLE ">"
COLON ":"
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
IDENT "u32"
WHITESPACE " "
EQ "="
WHITESPACE " "
LITERAL
INT_NUMBER "0"
WHITESPACE "\n"
WHERE_CLAUSE
WHERE_KW "where"
WHITESPACE " "
WHERE_PRED
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
IDENT "i32"
COLON ":"
WHITESPACE " "
TYPE_BOUND_LIST
TYPE_BOUND
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
IDENT "Copy"
SEMICOLON ";"
WHITESPACE "\n"
TRAIT
TRAIT_KW "trait"
WHITESPACE " "
NAME
IDENT "Foo"
WHITESPACE " "
ASSOC_ITEM_LIST
L_CURLY "{"
WHITESPACE "\n "
CONST
CONST_KW "const"
WHITESPACE " "
NAME
IDENT "C"
COLON ":"
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
IDENT "i32"
WHITESPACE " "
WHERE_CLAUSE
WHERE_KW "where"
WHITESPACE " "
WHERE_PRED
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
IDENT "i32"
COLON ":"
WHITESPACE " "
TYPE_BOUND_LIST
TYPE_BOUND
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
IDENT "Copy"
SEMICOLON ";"
WHITESPACE "\n"
R_CURLY "}"
WHITESPACE "\n"

View file

@ -0,0 +1,5 @@
const C<i32>: u32 = 0
where i32: Copy;
trait Foo {
const C: i32 where i32: Copy;
}

View file

@ -0,0 +1,71 @@
SOURCE_FILE
CONST
CONST_KW "const"
WHITESPACE " "
NAME
IDENT "C"
GENERIC_PARAM_LIST
L_ANGLE "<"
TYPE_PARAM
NAME
IDENT "i32"
R_ANGLE ">"
COLON ":"
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
IDENT "u32"
WHITESPACE " "
EQ "="
WHITESPACE " "
LITERAL
INT_NUMBER "0"
SEMICOLON ";"
WHITESPACE "\n"
IMPL
IMPL_KW "impl"
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
IDENT "Foo"
WHITESPACE " "
ASSOC_ITEM_LIST
L_CURLY "{"
WHITESPACE "\n "
CONST
CONST_KW "const"
WHITESPACE " "
NAME
IDENT "C"
GENERIC_PARAM_LIST
L_ANGLE "<"
LIFETIME_PARAM
LIFETIME
LIFETIME_IDENT "'a"
R_ANGLE ">"
COLON ":"
WHITESPACE " "
REF_TYPE
AMP "&"
LIFETIME
LIFETIME_IDENT "'a"
WHITESPACE " "
TUPLE_TYPE
L_PAREN "("
R_PAREN ")"
WHITESPACE " "
EQ "="
WHITESPACE " "
REF_EXPR
AMP "&"
TUPLE_EXPR
L_PAREN "("
R_PAREN ")"
SEMICOLON ";"
WHITESPACE "\n"
R_CURLY "}"
WHITESPACE "\n"

View file

@ -0,0 +1,4 @@
const C<i32>: u32 = 0;
impl Foo {
const C<'a>: &'a () = &();
}