Skip to content

Commit d786a40

Browse files
Parse TypePathFn with preceding ::
e.g. `impl Fn::() -> ()`.
1 parent 989b09d commit d786a40

File tree

3 files changed

+49
-0
lines changed

3 files changed

+49
-0
lines changed

crates/parser/src/grammar/paths.rs

+5
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,11 @@ fn opt_path_type_args(p: &mut Parser<'_>, mode: Mode) {
118118
match mode {
119119
Mode::Use => {}
120120
Mode::Type => {
121+
// test typepathfn_with_coloncolon
122+
// type F = Start::(Middle) -> (Middle)::End;
123+
if p.at(T![::]) && p.nth_at(2, T!['(']) {
124+
p.bump(T![::]);
125+
}
121126
// test path_fn_trait_args
122127
// type F = Box<Fn(i32) -> ()>;
123128
if p.at(T!['(']) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
SOURCE_FILE
2+
TYPE_ALIAS
3+
TYPE_KW "type"
4+
WHITESPACE " "
5+
NAME
6+
IDENT "F"
7+
WHITESPACE " "
8+
EQ "="
9+
WHITESPACE " "
10+
PATH_TYPE
11+
PATH
12+
PATH
13+
PATH_SEGMENT
14+
NAME_REF
15+
IDENT "Start"
16+
COLON2 "::"
17+
PARAM_LIST
18+
L_PAREN "("
19+
PARAM
20+
PATH_TYPE
21+
PATH
22+
PATH_SEGMENT
23+
NAME_REF
24+
IDENT "Middle"
25+
R_PAREN ")"
26+
WHITESPACE " "
27+
RET_TYPE
28+
THIN_ARROW "->"
29+
WHITESPACE " "
30+
PAREN_TYPE
31+
L_PAREN "("
32+
PATH_TYPE
33+
PATH
34+
PATH_SEGMENT
35+
NAME_REF
36+
IDENT "Middle"
37+
R_PAREN ")"
38+
COLON2 "::"
39+
PATH_SEGMENT
40+
NAME_REF
41+
IDENT "End"
42+
SEMICOLON ";"
43+
WHITESPACE "\n"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
type F = Start::(Middle) -> (Middle)::End;

0 commit comments

Comments
 (0)