Skip to content

Commit 25cef03

Browse files
committed
Give path segment type anchors their own grammar rule
1 parent c1e3da3 commit 25cef03

File tree

14 files changed

+223
-158
lines changed

14 files changed

+223
-158
lines changed

src/tools/rust-analyzer/crates/hir-def/src/macro_expansion_tests/mbe/regression.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -931,11 +931,12 @@ pub fn new() {
931931
932932
933933
934-
935-
936-
937-
938-
934+
935+
936+
937+
938+
939+
939940
940941
941942

src/tools/rust-analyzer/crates/parser/src/grammar/paths.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,9 @@ fn path_segment(p: &mut Parser<'_>, mode: Mode, first: bool) -> Option<Completed
8989
// test qual_paths
9090
// type X = <A as B>::Output;
9191
// fn foo() { <usize as Default>::default(); }
92-
if first && p.eat(T![<]) {
92+
if first && p.at(T![<]) {
93+
let m = p.start();
94+
p.bump(T![<]);
9395
// test_err angled_path_without_qual
9496
// type X = <()>;
9597
// type Y = <A as B>;
@@ -102,6 +104,7 @@ fn path_segment(p: &mut Parser<'_>, mode: Mode, first: bool) -> Option<Completed
102104
}
103105
}
104106
p.expect(T![>]);
107+
m.complete(p, TYPE_ANCHOR);
105108
if !p.at(T![::]) {
106109
p.error("expected `::`");
107110
}

src/tools/rust-analyzer/crates/parser/src/syntax_kind/generated.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,7 @@ pub enum SyntaxKind {
291291
TUPLE_STRUCT_PAT,
292292
TUPLE_TYPE,
293293
TYPE_ALIAS,
294+
TYPE_ANCHOR,
294295
TYPE_ARG,
295296
TYPE_BOUND,
296297
TYPE_BOUND_LIST,
@@ -463,6 +464,7 @@ impl SyntaxKind {
463464
| TUPLE_STRUCT_PAT
464465
| TUPLE_TYPE
465466
| TYPE_ALIAS
467+
| TYPE_ANCHOR
466468
| TYPE_ARG
467469
| TYPE_BOUND
468470
| TYPE_BOUND_LIST

src/tools/rust-analyzer/crates/parser/test_data/parser/inline/err/angled_path_without_qual.rast

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@ SOURCE_FILE
1010
PATH_TYPE
1111
PATH
1212
PATH_SEGMENT
13-
L_ANGLE "<"
14-
TUPLE_TYPE
15-
L_PAREN "("
16-
R_PAREN ")"
17-
R_ANGLE ">"
13+
TYPE_ANCHOR
14+
L_ANGLE "<"
15+
TUPLE_TYPE
16+
L_PAREN "("
17+
R_PAREN ")"
18+
R_ANGLE ">"
1819
SEMICOLON ";"
1920
WHITESPACE "\n"
2021
TYPE_ALIAS
@@ -28,21 +29,22 @@ SOURCE_FILE
2829
PATH_TYPE
2930
PATH
3031
PATH_SEGMENT
31-
L_ANGLE "<"
32-
PATH_TYPE
33-
PATH
34-
PATH_SEGMENT
35-
NAME_REF
36-
IDENT "A"
37-
WHITESPACE " "
38-
AS_KW "as"
39-
WHITESPACE " "
40-
PATH_TYPE
41-
PATH
42-
PATH_SEGMENT
43-
NAME_REF
44-
IDENT "B"
45-
R_ANGLE ">"
32+
TYPE_ANCHOR
33+
L_ANGLE "<"
34+
PATH_TYPE
35+
PATH
36+
PATH_SEGMENT
37+
NAME_REF
38+
IDENT "A"
39+
WHITESPACE " "
40+
AS_KW "as"
41+
WHITESPACE " "
42+
PATH_TYPE
43+
PATH
44+
PATH_SEGMENT
45+
NAME_REF
46+
IDENT "B"
47+
R_ANGLE ">"
4648
SEMICOLON ";"
4749
WHITESPACE "\n"
4850
error 13: expected `::`

src/tools/rust-analyzer/crates/parser/test_data/parser/inline/ok/call_expr.rast

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,14 @@ SOURCE_FILE
8888
PATH
8989
PATH
9090
PATH_SEGMENT
91-
L_ANGLE "<"
92-
PATH_TYPE
93-
PATH
94-
PATH_SEGMENT
95-
NAME_REF
96-
IDENT "Foo"
97-
R_ANGLE ">"
91+
TYPE_ANCHOR
92+
L_ANGLE "<"
93+
PATH_TYPE
94+
PATH
95+
PATH_SEGMENT
96+
NAME_REF
97+
IDENT "Foo"
98+
R_ANGLE ">"
9899
COLON2 "::"
99100
PATH_SEGMENT
100101
NAME_REF
@@ -119,21 +120,22 @@ SOURCE_FILE
119120
PATH
120121
PATH
121122
PATH_SEGMENT
122-
L_ANGLE "<"
123-
PATH_TYPE
124-
PATH
125-
PATH_SEGMENT
126-
NAME_REF
127-
IDENT "Foo"
128-
WHITESPACE " "
129-
AS_KW "as"
130-
WHITESPACE " "
131-
PATH_TYPE
132-
PATH
133-
PATH_SEGMENT
134-
NAME_REF
135-
IDENT "Trait"
136-
R_ANGLE ">"
123+
TYPE_ANCHOR
124+
L_ANGLE "<"
125+
PATH_TYPE
126+
PATH
127+
PATH_SEGMENT
128+
NAME_REF
129+
IDENT "Foo"
130+
WHITESPACE " "
131+
AS_KW "as"
132+
WHITESPACE " "
133+
PATH_TYPE
134+
PATH
135+
PATH_SEGMENT
136+
NAME_REF
137+
IDENT "Trait"
138+
R_ANGLE ">"
137139
COLON2 "::"
138140
PATH_SEGMENT
139141
NAME_REF

src/tools/rust-analyzer/crates/parser/test_data/parser/inline/ok/qual_paths.rast

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,22 @@ SOURCE_FILE
1111
PATH
1212
PATH
1313
PATH_SEGMENT
14-
L_ANGLE "<"
15-
PATH_TYPE
16-
PATH
17-
PATH_SEGMENT
18-
NAME_REF
19-
IDENT "A"
20-
WHITESPACE " "
21-
AS_KW "as"
22-
WHITESPACE " "
23-
PATH_TYPE
24-
PATH
25-
PATH_SEGMENT
26-
NAME_REF
27-
IDENT "B"
28-
R_ANGLE ">"
14+
TYPE_ANCHOR
15+
L_ANGLE "<"
16+
PATH_TYPE
17+
PATH
18+
PATH_SEGMENT
19+
NAME_REF
20+
IDENT "A"
21+
WHITESPACE " "
22+
AS_KW "as"
23+
WHITESPACE " "
24+
PATH_TYPE
25+
PATH
26+
PATH_SEGMENT
27+
NAME_REF
28+
IDENT "B"
29+
R_ANGLE ">"
2930
COLON2 "::"
3031
PATH_SEGMENT
3132
NAME_REF
@@ -51,21 +52,22 @@ SOURCE_FILE
5152
PATH
5253
PATH
5354
PATH_SEGMENT
54-
L_ANGLE "<"
55-
PATH_TYPE
56-
PATH
57-
PATH_SEGMENT
58-
NAME_REF
59-
IDENT "usize"
60-
WHITESPACE " "
61-
AS_KW "as"
62-
WHITESPACE " "
63-
PATH_TYPE
64-
PATH
65-
PATH_SEGMENT
66-
NAME_REF
67-
IDENT "Default"
68-
R_ANGLE ">"
55+
TYPE_ANCHOR
56+
L_ANGLE "<"
57+
PATH_TYPE
58+
PATH
59+
PATH_SEGMENT
60+
NAME_REF
61+
IDENT "usize"
62+
WHITESPACE " "
63+
AS_KW "as"
64+
WHITESPACE " "
65+
PATH_TYPE
66+
PATH
67+
PATH_SEGMENT
68+
NAME_REF
69+
IDENT "Default"
70+
R_ANGLE ">"
6971
COLON2 "::"
7072
PATH_SEGMENT
7173
NAME_REF

src/tools/rust-analyzer/crates/parser/test_data/parser/inline/ok/type_path_in_pattern.rast

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ SOURCE_FILE
1919
PATH
2020
PATH
2121
PATH_SEGMENT
22-
L_ANGLE "<"
23-
INFER_TYPE
24-
UNDERSCORE "_"
25-
R_ANGLE ">"
22+
TYPE_ANCHOR
23+
L_ANGLE "<"
24+
INFER_TYPE
25+
UNDERSCORE "_"
26+
R_ANGLE ">"
2627
COLON2 "::"
2728
PATH_SEGMENT
2829
NAME_REF

src/tools/rust-analyzer/crates/parser/test_data/parser/inline/ok/where_clause.rast

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -84,21 +84,22 @@ SOURCE_FILE
8484
PATH
8585
PATH
8686
PATH_SEGMENT
87-
L_ANGLE "<"
88-
PATH_TYPE
89-
PATH
90-
PATH_SEGMENT
91-
NAME_REF
92-
IDENT "T"
93-
WHITESPACE " "
94-
AS_KW "as"
95-
WHITESPACE " "
96-
PATH_TYPE
97-
PATH
98-
PATH_SEGMENT
99-
NAME_REF
100-
IDENT "Iterator"
101-
R_ANGLE ">"
87+
TYPE_ANCHOR
88+
L_ANGLE "<"
89+
PATH_TYPE
90+
PATH
91+
PATH_SEGMENT
92+
NAME_REF
93+
IDENT "T"
94+
WHITESPACE " "
95+
AS_KW "as"
96+
WHITESPACE " "
97+
PATH_TYPE
98+
PATH
99+
PATH_SEGMENT
100+
NAME_REF
101+
IDENT "Iterator"
102+
R_ANGLE ">"
102103
COLON2 "::"
103104
PATH_SEGMENT
104105
NAME_REF

src/tools/rust-analyzer/crates/parser/test_data/parser/ok/0036_fully_qualified.rast

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,22 @@ SOURCE_FILE
4545
PATH
4646
PATH
4747
PATH_SEGMENT
48-
L_ANGLE "<"
49-
PATH_TYPE
50-
PATH
51-
PATH_SEGMENT
52-
NAME_REF
53-
IDENT "S"
54-
WHITESPACE " "
55-
AS_KW "as"
56-
WHITESPACE " "
57-
PATH_TYPE
58-
PATH
59-
PATH_SEGMENT
60-
NAME_REF
61-
IDENT "Iterator"
62-
R_ANGLE ">"
48+
TYPE_ANCHOR
49+
L_ANGLE "<"
50+
PATH_TYPE
51+
PATH
52+
PATH_SEGMENT
53+
NAME_REF
54+
IDENT "S"
55+
WHITESPACE " "
56+
AS_KW "as"
57+
WHITESPACE " "
58+
PATH_TYPE
59+
PATH
60+
PATH_SEGMENT
61+
NAME_REF
62+
IDENT "Iterator"
63+
R_ANGLE ">"
6364
COLON2 "::"
6465
PATH_SEGMENT
6566
NAME_REF

src/tools/rust-analyzer/crates/parser/test_data/parser/ok/0042_ufcs_call_list.rast

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,13 +107,14 @@ SOURCE_FILE
107107
PATH
108108
PATH
109109
PATH_SEGMENT
110-
L_ANGLE "<"
111-
PATH_TYPE
112-
PATH
113-
PATH_SEGMENT
114-
NAME_REF
115-
IDENT "Foo"
116-
R_ANGLE ">"
110+
TYPE_ANCHOR
111+
L_ANGLE "<"
112+
PATH_TYPE
113+
PATH
114+
PATH_SEGMENT
115+
NAME_REF
116+
IDENT "Foo"
117+
R_ANGLE ">"
117118
COLON2 "::"
118119
PATH_SEGMENT
119120
NAME_REF

0 commit comments

Comments
 (0)