Skip to content

Commit 3e4deab

Browse files
Add support for const and async trait bounds
1 parent bb0f93a commit 3e4deab

File tree

5 files changed

+89
-0
lines changed

5 files changed

+89
-0
lines changed

crates/parser/src/grammar/generic_params.rs

+10
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,16 @@ fn type_bound(p: &mut Parser<'_>) -> bool {
157157
p.bump_any();
158158
p.expect(T![const]);
159159
}
160+
// test const_trait_bound
161+
// const fn foo(_: impl const Trait) {}
162+
T![const] => {
163+
p.bump_any();
164+
}
165+
// test async_trait_bound
166+
// fn async_foo(_: impl async Fn(&i32)) {}
167+
T![async] => {
168+
p.bump_any();
169+
}
160170
_ => (),
161171
}
162172
if paths::is_use_path_start(p) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
SOURCE_FILE
2+
FN
3+
FN_KW "fn"
4+
WHITESPACE " "
5+
NAME
6+
IDENT "async_foo"
7+
PARAM_LIST
8+
L_PAREN "("
9+
PARAM
10+
WILDCARD_PAT
11+
UNDERSCORE "_"
12+
COLON ":"
13+
WHITESPACE " "
14+
IMPL_TRAIT_TYPE
15+
IMPL_KW "impl"
16+
WHITESPACE " "
17+
TYPE_BOUND_LIST
18+
TYPE_BOUND
19+
ASYNC_KW "async"
20+
WHITESPACE " "
21+
PATH_TYPE
22+
PATH
23+
PATH_SEGMENT
24+
NAME_REF
25+
IDENT "Fn"
26+
PARAM_LIST
27+
L_PAREN "("
28+
PARAM
29+
REF_TYPE
30+
AMP "&"
31+
PATH_TYPE
32+
PATH
33+
PATH_SEGMENT
34+
NAME_REF
35+
IDENT "i32"
36+
R_PAREN ")"
37+
R_PAREN ")"
38+
WHITESPACE " "
39+
BLOCK_EXPR
40+
STMT_LIST
41+
L_CURLY "{"
42+
R_CURLY "}"
43+
WHITESPACE "\n"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
fn async_foo(_: impl async Fn(&i32)) {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
SOURCE_FILE
2+
FN
3+
CONST_KW "const"
4+
WHITESPACE " "
5+
FN_KW "fn"
6+
WHITESPACE " "
7+
NAME
8+
IDENT "foo"
9+
PARAM_LIST
10+
L_PAREN "("
11+
PARAM
12+
WILDCARD_PAT
13+
UNDERSCORE "_"
14+
COLON ":"
15+
WHITESPACE " "
16+
IMPL_TRAIT_TYPE
17+
IMPL_KW "impl"
18+
WHITESPACE " "
19+
TYPE_BOUND_LIST
20+
TYPE_BOUND
21+
CONST_KW "const"
22+
WHITESPACE " "
23+
PATH_TYPE
24+
PATH
25+
PATH_SEGMENT
26+
NAME_REF
27+
IDENT "Trait"
28+
R_PAREN ")"
29+
WHITESPACE " "
30+
BLOCK_EXPR
31+
STMT_LIST
32+
L_CURLY "{"
33+
R_CURLY "}"
34+
WHITESPACE "\n"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
const fn foo(_: impl const Trait) {}

0 commit comments

Comments
 (0)