diff options
Diffstat (limited to 'crates/ra_syntax')
11 files changed, 828 insertions, 282 deletions
diff --git a/crates/ra_syntax/src/ast.rs b/crates/ra_syntax/src/ast.rs index eddc807d5..9d02aeef3 100644 --- a/crates/ra_syntax/src/ast.rs +++ b/crates/ra_syntax/src/ast.rs | |||
@@ -285,6 +285,8 @@ where | |||
285 | let pred = predicates.next().unwrap(); | 285 | let pred = predicates.next().unwrap(); |
286 | let mut bounds = pred.type_bound_list().unwrap().bounds(); | 286 | let mut bounds = pred.type_bound_list().unwrap().bounds(); |
287 | 287 | ||
288 | assert!(pred.for_token().is_none()); | ||
289 | assert!(pred.type_param_list().is_none()); | ||
288 | assert_eq!("T", pred.type_ref().unwrap().syntax().text().to_string()); | 290 | assert_eq!("T", pred.type_ref().unwrap().syntax().text().to_string()); |
289 | assert_bound("Clone", bounds.next()); | 291 | assert_bound("Clone", bounds.next()); |
290 | assert_bound("Copy", bounds.next()); | 292 | assert_bound("Copy", bounds.next()); |
@@ -322,6 +324,8 @@ where | |||
322 | let pred = predicates.next().unwrap(); | 324 | let pred = predicates.next().unwrap(); |
323 | let mut bounds = pred.type_bound_list().unwrap().bounds(); | 325 | let mut bounds = pred.type_bound_list().unwrap().bounds(); |
324 | 326 | ||
325 | assert_eq!("for<'a> F", pred.type_ref().unwrap().syntax().text().to_string()); | 327 | assert!(pred.for_token().is_some()); |
328 | assert_eq!("<'a>", pred.type_param_list().unwrap().syntax().text().to_string()); | ||
329 | assert_eq!("F", pred.type_ref().unwrap().syntax().text().to_string()); | ||
326 | assert_bound("Fn(&'a str)", bounds.next()); | 330 | assert_bound("Fn(&'a str)", bounds.next()); |
327 | } | 331 | } |
diff --git a/crates/ra_syntax/src/ast/generated/nodes.rs b/crates/ra_syntax/src/ast/generated/nodes.rs index cb430ca01..40081ebb1 100644 --- a/crates/ra_syntax/src/ast/generated/nodes.rs +++ b/crates/ra_syntax/src/ast/generated/nodes.rs | |||
@@ -2052,6 +2052,8 @@ pub struct WherePred { | |||
2052 | } | 2052 | } |
2053 | impl ast::TypeBoundsOwner for WherePred {} | 2053 | impl ast::TypeBoundsOwner for WherePred {} |
2054 | impl WherePred { | 2054 | impl WherePred { |
2055 | pub fn for_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![for]) } | ||
2056 | pub fn type_param_list(&self) -> Option<TypeParamList> { support::child(&self.syntax) } | ||
2055 | pub fn lifetime_token(&self) -> Option<SyntaxToken> { | 2057 | pub fn lifetime_token(&self) -> Option<SyntaxToken> { |
2056 | support::token(&self.syntax, T![lifetime]) | 2058 | support::token(&self.syntax, T![lifetime]) |
2057 | } | 2059 | } |
diff --git a/crates/ra_syntax/test_data/parser/err/0027_incomplere_where_for.rast b/crates/ra_syntax/test_data/parser/err/0027_incomplere_where_for.rast index 568a4cc02..4d6461d1e 100644 --- a/crates/ra_syntax/test_data/parser/err/0027_incomplere_where_for.rast +++ b/crates/ra_syntax/test_data/parser/err/0027_incomplere_where_for.rast | |||
@@ -12,17 +12,16 @@ SOURCE_FILE@0..30 | |||
12 | WHERE_KW@13..18 "where" | 12 | WHERE_KW@13..18 "where" |
13 | WHITESPACE@18..19 " " | 13 | WHITESPACE@18..19 " " |
14 | WHERE_PRED@19..26 | 14 | WHERE_PRED@19..26 |
15 | FOR_TYPE@19..26 | 15 | FOR_KW@19..22 "for" |
16 | FOR_KW@19..22 "for" | 16 | TYPE_PARAM_LIST@22..26 |
17 | TYPE_PARAM_LIST@22..26 | 17 | L_ANGLE@22..23 "<" |
18 | L_ANGLE@22..23 "<" | 18 | LIFETIME_PARAM@23..25 |
19 | LIFETIME_PARAM@23..25 | 19 | LIFETIME@23..25 "\'a" |
20 | LIFETIME@23..25 "\'a" | 20 | R_ANGLE@25..26 ">" |
21 | R_ANGLE@25..26 ">" | ||
22 | WHITESPACE@26..27 "\n" | 21 | WHITESPACE@26..27 "\n" |
23 | BLOCK_EXPR@27..29 | 22 | BLOCK_EXPR@27..29 |
24 | L_CURLY@27..28 "{" | 23 | L_CURLY@27..28 "{" |
25 | R_CURLY@28..29 "}" | 24 | R_CURLY@28..29 "}" |
26 | WHITESPACE@29..30 "\n" | 25 | WHITESPACE@29..30 "\n" |
27 | error 26..26: expected a path | 26 | error 26..26: expected type |
28 | error 26..26: expected colon | 27 | error 26..26: expected colon |
diff --git a/crates/ra_syntax/test_data/parser/err/0044_unexpected_for_type.rast b/crates/ra_syntax/test_data/parser/err/0044_unexpected_for_type.rast new file mode 100644 index 000000000..cb90f28bc --- /dev/null +++ b/crates/ra_syntax/test_data/parser/err/0044_unexpected_for_type.rast | |||
@@ -0,0 +1,240 @@ | |||
1 | SOURCE_FILE@0..239 | ||
2 | TYPE_ALIAS_DEF@0..30 | ||
3 | TYPE_KW@0..4 "type" | ||
4 | WHITESPACE@4..5 " " | ||
5 | NAME@5..11 | ||
6 | IDENT@5..11 "ForRef" | ||
7 | WHITESPACE@11..12 " " | ||
8 | EQ@12..13 "=" | ||
9 | WHITESPACE@13..14 " " | ||
10 | FOR_TYPE@14..29 | ||
11 | FOR_KW@14..17 "for" | ||
12 | TYPE_PARAM_LIST@17..21 | ||
13 | L_ANGLE@17..18 "<" | ||
14 | LIFETIME_PARAM@18..20 | ||
15 | LIFETIME@18..20 "\'a" | ||
16 | R_ANGLE@20..21 ">" | ||
17 | WHITESPACE@21..22 " " | ||
18 | REFERENCE_TYPE@22..29 | ||
19 | AMP@22..23 "&" | ||
20 | LIFETIME@23..25 "\'a" | ||
21 | WHITESPACE@25..26 " " | ||
22 | PATH_TYPE@26..29 | ||
23 | PATH@26..29 | ||
24 | PATH_SEGMENT@26..29 | ||
25 | NAME_REF@26..29 | ||
26 | IDENT@26..29 "u32" | ||
27 | SEMICOLON@29..30 ";" | ||
28 | WHITESPACE@30..31 "\n" | ||
29 | TYPE_ALIAS_DEF@31..64 | ||
30 | TYPE_KW@31..35 "type" | ||
31 | WHITESPACE@35..36 " " | ||
32 | NAME@36..42 | ||
33 | IDENT@36..42 "ForTup" | ||
34 | WHITESPACE@42..43 " " | ||
35 | EQ@43..44 "=" | ||
36 | WHITESPACE@44..45 " " | ||
37 | FOR_TYPE@45..63 | ||
38 | FOR_KW@45..48 "for" | ||
39 | TYPE_PARAM_LIST@48..52 | ||
40 | L_ANGLE@48..49 "<" | ||
41 | LIFETIME_PARAM@49..51 | ||
42 | LIFETIME@49..51 "\'a" | ||
43 | R_ANGLE@51..52 ">" | ||
44 | WHITESPACE@52..53 " " | ||
45 | TUPLE_TYPE@53..63 | ||
46 | L_PAREN@53..54 "(" | ||
47 | REFERENCE_TYPE@54..61 | ||
48 | AMP@54..55 "&" | ||
49 | LIFETIME@55..57 "\'a" | ||
50 | WHITESPACE@57..58 " " | ||
51 | PATH_TYPE@58..61 | ||
52 | PATH@58..61 | ||
53 | PATH_SEGMENT@58..61 | ||
54 | NAME_REF@58..61 | ||
55 | IDENT@58..61 "u32" | ||
56 | COMMA@61..62 "," | ||
57 | R_PAREN@62..63 ")" | ||
58 | SEMICOLON@63..64 ";" | ||
59 | WHITESPACE@64..65 "\n" | ||
60 | TYPE_ALIAS_DEF@65..95 | ||
61 | TYPE_KW@65..69 "type" | ||
62 | WHITESPACE@69..70 " " | ||
63 | NAME@70..78 | ||
64 | IDENT@70..78 "ForSlice" | ||
65 | WHITESPACE@78..79 " " | ||
66 | EQ@79..80 "=" | ||
67 | WHITESPACE@80..81 " " | ||
68 | FOR_TYPE@81..94 | ||
69 | FOR_KW@81..84 "for" | ||
70 | TYPE_PARAM_LIST@84..88 | ||
71 | L_ANGLE@84..85 "<" | ||
72 | LIFETIME_PARAM@85..87 | ||
73 | LIFETIME@85..87 "\'a" | ||
74 | R_ANGLE@87..88 ">" | ||
75 | WHITESPACE@88..89 " " | ||
76 | SLICE_TYPE@89..94 | ||
77 | L_BRACK@89..90 "[" | ||
78 | PATH_TYPE@90..93 | ||
79 | PATH@90..93 | ||
80 | PATH_SEGMENT@90..93 | ||
81 | NAME_REF@90..93 | ||
82 | IDENT@90..93 "u32" | ||
83 | R_BRACK@93..94 "]" | ||
84 | SEMICOLON@94..95 ";" | ||
85 | WHITESPACE@95..96 "\n" | ||
86 | TYPE_ALIAS_DEF@96..149 | ||
87 | TYPE_KW@96..100 "type" | ||
88 | WHITESPACE@100..101 " " | ||
89 | NAME@101..109 | ||
90 | IDENT@101..109 "ForForFn" | ||
91 | WHITESPACE@109..110 " " | ||
92 | EQ@110..111 "=" | ||
93 | WHITESPACE@111..112 " " | ||
94 | FOR_TYPE@112..148 | ||
95 | FOR_KW@112..115 "for" | ||
96 | TYPE_PARAM_LIST@115..119 | ||
97 | L_ANGLE@115..116 "<" | ||
98 | LIFETIME_PARAM@116..118 | ||
99 | LIFETIME@116..118 "\'a" | ||
100 | R_ANGLE@118..119 ">" | ||
101 | WHITESPACE@119..120 " " | ||
102 | FOR_TYPE@120..148 | ||
103 | FOR_KW@120..123 "for" | ||
104 | TYPE_PARAM_LIST@123..127 | ||
105 | L_ANGLE@123..124 "<" | ||
106 | LIFETIME_PARAM@124..126 | ||
107 | LIFETIME@124..126 "\'b" | ||
108 | R_ANGLE@126..127 ">" | ||
109 | WHITESPACE@127..128 " " | ||
110 | FN_POINTER_TYPE@128..148 | ||
111 | FN_KW@128..130 "fn" | ||
112 | PARAM_LIST@130..148 | ||
113 | L_PAREN@130..131 "(" | ||
114 | PARAM@131..138 | ||
115 | REFERENCE_TYPE@131..138 | ||
116 | AMP@131..132 "&" | ||
117 | LIFETIME@132..134 "\'a" | ||
118 | WHITESPACE@134..135 " " | ||
119 | PATH_TYPE@135..138 | ||
120 | PATH@135..138 | ||
121 | PATH_SEGMENT@135..138 | ||
122 | NAME_REF@135..138 | ||
123 | IDENT@135..138 "i32" | ||
124 | COMMA@138..139 "," | ||
125 | WHITESPACE@139..140 " " | ||
126 | PARAM@140..147 | ||
127 | REFERENCE_TYPE@140..147 | ||
128 | AMP@140..141 "&" | ||
129 | LIFETIME@141..143 "\'b" | ||
130 | WHITESPACE@143..144 " " | ||
131 | PATH_TYPE@144..147 | ||
132 | PATH@144..147 | ||
133 | PATH_SEGMENT@144..147 | ||
134 | NAME_REF@144..147 | ||
135 | IDENT@144..147 "i32" | ||
136 | R_PAREN@147..148 ")" | ||
137 | SEMICOLON@148..149 ";" | ||
138 | WHITESPACE@149..150 "\n" | ||
139 | FN_DEF@150..238 | ||
140 | FN_KW@150..152 "fn" | ||
141 | WHITESPACE@152..153 " " | ||
142 | NAME@153..164 | ||
143 | IDENT@153..164 "for_for_for" | ||
144 | TYPE_PARAM_LIST@164..167 | ||
145 | L_ANGLE@164..165 "<" | ||
146 | TYPE_PARAM@165..166 | ||
147 | NAME@165..166 | ||
148 | IDENT@165..166 "T" | ||
149 | R_ANGLE@166..167 ">" | ||
150 | PARAM_LIST@167..169 | ||
151 | L_PAREN@167..168 "(" | ||
152 | R_PAREN@168..169 ")" | ||
153 | WHITESPACE@169..170 "\n" | ||
154 | WHERE_CLAUSE@170..234 | ||
155 | WHERE_KW@170..175 "where" | ||
156 | WHITESPACE@175..180 "\n " | ||
157 | WHERE_PRED@180..233 | ||
158 | FOR_KW@180..183 "for" | ||
159 | TYPE_PARAM_LIST@183..187 | ||
160 | L_ANGLE@183..184 "<" | ||
161 | LIFETIME_PARAM@184..186 | ||
162 | LIFETIME@184..186 "\'a" | ||
163 | R_ANGLE@186..187 ">" | ||
164 | WHITESPACE@187..188 " " | ||
165 | FOR_TYPE@188..227 | ||
166 | FOR_KW@188..191 "for" | ||
167 | TYPE_PARAM_LIST@191..195 | ||
168 | L_ANGLE@191..192 "<" | ||
169 | LIFETIME_PARAM@192..194 | ||
170 | LIFETIME@192..194 "\'b" | ||
171 | R_ANGLE@194..195 ">" | ||
172 | WHITESPACE@195..196 " " | ||
173 | FOR_TYPE@196..227 | ||
174 | FOR_KW@196..199 "for" | ||
175 | TYPE_PARAM_LIST@199..203 | ||
176 | L_ANGLE@199..200 "<" | ||
177 | LIFETIME_PARAM@200..202 | ||
178 | LIFETIME@200..202 "\'c" | ||
179 | R_ANGLE@202..203 ">" | ||
180 | WHITESPACE@203..204 " " | ||
181 | FN_POINTER_TYPE@204..227 | ||
182 | FN_KW@204..206 "fn" | ||
183 | PARAM_LIST@206..227 | ||
184 | L_PAREN@206..207 "(" | ||
185 | PARAM@207..212 | ||
186 | REFERENCE_TYPE@207..212 | ||
187 | AMP@207..208 "&" | ||
188 | LIFETIME@208..210 "\'a" | ||
189 | WHITESPACE@210..211 " " | ||
190 | PATH_TYPE@211..212 | ||
191 | PATH@211..212 | ||
192 | PATH_SEGMENT@211..212 | ||
193 | NAME_REF@211..212 | ||
194 | IDENT@211..212 "T" | ||
195 | COMMA@212..213 "," | ||
196 | WHITESPACE@213..214 " " | ||
197 | PARAM@214..219 | ||
198 | REFERENCE_TYPE@214..219 | ||
199 | AMP@214..215 "&" | ||
200 | LIFETIME@215..217 "\'b" | ||
201 | WHITESPACE@217..218 " " | ||
202 | PATH_TYPE@218..219 | ||
203 | PATH@218..219 | ||
204 | PATH_SEGMENT@218..219 | ||
205 | NAME_REF@218..219 | ||
206 | IDENT@218..219 "T" | ||
207 | COMMA@219..220 "," | ||
208 | WHITESPACE@220..221 " " | ||
209 | PARAM@221..226 | ||
210 | REFERENCE_TYPE@221..226 | ||
211 | AMP@221..222 "&" | ||
212 | LIFETIME@222..224 "\'c" | ||
213 | WHITESPACE@224..225 " " | ||
214 | PATH_TYPE@225..226 | ||
215 | PATH@225..226 | ||
216 | PATH_SEGMENT@225..226 | ||
217 | NAME_REF@225..226 | ||
218 | IDENT@225..226 "T" | ||
219 | R_PAREN@226..227 ")" | ||
220 | COLON@227..228 ":" | ||
221 | WHITESPACE@228..229 " " | ||
222 | TYPE_BOUND_LIST@229..233 | ||
223 | TYPE_BOUND@229..233 | ||
224 | PATH_TYPE@229..233 | ||
225 | PATH@229..233 | ||
226 | PATH_SEGMENT@229..233 | ||
227 | NAME_REF@229..233 | ||
228 | IDENT@229..233 "Copy" | ||
229 | COMMA@233..234 "," | ||
230 | WHITESPACE@234..235 "\n" | ||
231 | BLOCK_EXPR@235..238 | ||
232 | L_CURLY@235..236 "{" | ||
233 | WHITESPACE@236..237 "\n" | ||
234 | R_CURLY@237..238 "}" | ||
235 | WHITESPACE@238..239 "\n" | ||
236 | error 21..21: expected a function pointer or path | ||
237 | error 52..52: expected a function pointer or path | ||
238 | error 88..88: expected a function pointer or path | ||
239 | error 119..119: expected a function pointer or path | ||
240 | error 195..195: expected a function pointer or path | ||
diff --git a/crates/ra_syntax/test_data/parser/err/0044_unexpected_for_type.rs b/crates/ra_syntax/test_data/parser/err/0044_unexpected_for_type.rs new file mode 100644 index 000000000..0e9f8ccb4 --- /dev/null +++ b/crates/ra_syntax/test_data/parser/err/0044_unexpected_for_type.rs | |||
@@ -0,0 +1,9 @@ | |||
1 | type ForRef = for<'a> &'a u32; | ||
2 | type ForTup = for<'a> (&'a u32,); | ||
3 | type ForSlice = for<'a> [u32]; | ||
4 | type ForForFn = for<'a> for<'b> fn(&'a i32, &'b i32); | ||
5 | fn for_for_for<T>() | ||
6 | where | ||
7 | for<'a> for<'b> for<'c> fn(&'a T, &'b T, &'c T): Copy, | ||
8 | { | ||
9 | } | ||
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0003_where_pred_for.rast b/crates/ra_syntax/test_data/parser/inline/ok/0003_where_pred_for.rast index 9dc473e43..cd0892451 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0003_where_pred_for.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0003_where_pred_for.rast | |||
@@ -1,61 +1,60 @@ | |||
1 | SOURCE_FILE@0..49 | 1 | SOURCE_FILE@0..54 |
2 | FN_DEF@0..48 | 2 | FN_DEF@0..53 |
3 | FN_KW@0..2 "fn" | 3 | FN_KW@0..2 "fn" |
4 | WHITESPACE@2..3 " " | 4 | WHITESPACE@2..3 " " |
5 | NAME@3..7 | 5 | NAME@3..12 |
6 | IDENT@3..7 "test" | 6 | IDENT@3..12 "for_trait" |
7 | TYPE_PARAM_LIST@7..10 | 7 | TYPE_PARAM_LIST@12..15 |
8 | L_ANGLE@7..8 "<" | 8 | L_ANGLE@12..13 "<" |
9 | TYPE_PARAM@8..9 | 9 | TYPE_PARAM@13..14 |
10 | NAME@8..9 | 10 | NAME@13..14 |
11 | IDENT@8..9 "F" | 11 | IDENT@13..14 "F" |
12 | R_ANGLE@9..10 ">" | 12 | R_ANGLE@14..15 ">" |
13 | PARAM_LIST@10..12 | 13 | PARAM_LIST@15..17 |
14 | L_PAREN@10..11 "(" | 14 | L_PAREN@15..16 "(" |
15 | R_PAREN@11..12 ")" | 15 | R_PAREN@16..17 ")" |
16 | WHITESPACE@12..13 "\n" | 16 | WHITESPACE@17..18 "\n" |
17 | WHERE_CLAUSE@13..44 | 17 | WHERE_CLAUSE@18..49 |
18 | WHERE_KW@13..18 "where" | 18 | WHERE_KW@18..23 "where" |
19 | WHITESPACE@18..22 "\n " | 19 | WHITESPACE@23..27 "\n " |
20 | WHERE_PRED@22..44 | 20 | WHERE_PRED@27..49 |
21 | FOR_TYPE@22..31 | 21 | FOR_KW@27..30 "for" |
22 | FOR_KW@22..25 "for" | 22 | TYPE_PARAM_LIST@30..34 |
23 | TYPE_PARAM_LIST@25..29 | 23 | L_ANGLE@30..31 "<" |
24 | L_ANGLE@25..26 "<" | 24 | LIFETIME_PARAM@31..33 |
25 | LIFETIME_PARAM@26..28 | 25 | LIFETIME@31..33 "\'a" |
26 | LIFETIME@26..28 "\'a" | 26 | R_ANGLE@33..34 ">" |
27 | R_ANGLE@28..29 ">" | 27 | WHITESPACE@34..35 " " |
28 | WHITESPACE@29..30 " " | 28 | PATH_TYPE@35..36 |
29 | PATH_TYPE@30..31 | 29 | PATH@35..36 |
30 | PATH@30..31 | 30 | PATH_SEGMENT@35..36 |
31 | PATH_SEGMENT@30..31 | 31 | NAME_REF@35..36 |
32 | NAME_REF@30..31 | 32 | IDENT@35..36 "F" |
33 | IDENT@30..31 "F" | 33 | COLON@36..37 ":" |
34 | COLON@31..32 ":" | 34 | WHITESPACE@37..38 " " |
35 | WHITESPACE@32..33 " " | 35 | TYPE_BOUND_LIST@38..49 |
36 | TYPE_BOUND_LIST@33..44 | 36 | TYPE_BOUND@38..49 |
37 | TYPE_BOUND@33..44 | 37 | PATH_TYPE@38..49 |
38 | PATH_TYPE@33..44 | 38 | PATH@38..49 |
39 | PATH@33..44 | 39 | PATH_SEGMENT@38..49 |
40 | PATH_SEGMENT@33..44 | 40 | NAME_REF@38..40 |
41 | NAME_REF@33..35 | 41 | IDENT@38..40 "Fn" |
42 | IDENT@33..35 "Fn" | 42 | PARAM_LIST@40..49 |
43 | PARAM_LIST@35..44 | 43 | L_PAREN@40..41 "(" |
44 | L_PAREN@35..36 "(" | 44 | PARAM@41..48 |
45 | PARAM@36..43 | 45 | REFERENCE_TYPE@41..48 |
46 | REFERENCE_TYPE@36..43 | 46 | AMP@41..42 "&" |
47 | AMP@36..37 "&" | 47 | LIFETIME@42..44 "\'a" |
48 | LIFETIME@37..39 "\'a" | 48 | WHITESPACE@44..45 " " |
49 | WHITESPACE@39..40 " " | 49 | PATH_TYPE@45..48 |
50 | PATH_TYPE@40..43 | 50 | PATH@45..48 |
51 | PATH@40..43 | 51 | PATH_SEGMENT@45..48 |
52 | PATH_SEGMENT@40..43 | 52 | NAME_REF@45..48 |
53 | NAME_REF@40..43 | 53 | IDENT@45..48 "str" |
54 | IDENT@40..43 "str" | 54 | R_PAREN@48..49 ")" |
55 | R_PAREN@43..44 ")" | 55 | WHITESPACE@49..50 "\n" |
56 | WHITESPACE@44..45 "\n" | 56 | BLOCK_EXPR@50..53 |
57 | BLOCK_EXPR@45..48 | 57 | L_CURLY@50..51 "{" |
58 | L_CURLY@45..46 "{" | 58 | WHITESPACE@51..52 " " |
59 | WHITESPACE@46..47 " " | 59 | R_CURLY@52..53 "}" |
60 | R_CURLY@47..48 "}" | 60 | WHITESPACE@53..54 "\n" |
61 | WHITESPACE@48..49 "\n" | ||
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0003_where_pred_for.rs b/crates/ra_syntax/test_data/parser/inline/ok/0003_where_pred_for.rs index b448c6178..423bc105b 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0003_where_pred_for.rs +++ b/crates/ra_syntax/test_data/parser/inline/ok/0003_where_pred_for.rs | |||
@@ -1,4 +1,4 @@ | |||
1 | fn test<F>() | 1 | fn for_trait<F>() |
2 | where | 2 | where |
3 | for<'a> F: Fn(&'a str) | 3 | for<'a> F: Fn(&'a str) |
4 | { } | 4 | { } |
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0081_for_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0081_for_type.rast index dfb8d57ad..b26ac2d36 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0081_for_type.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0081_for_type.rast | |||
@@ -1,4 +1,4 @@ | |||
1 | SOURCE_FILE@0..200 | 1 | SOURCE_FILE@0..121 |
2 | TYPE_ALIAS_DEF@0..28 | 2 | TYPE_ALIAS_DEF@0..28 |
3 | TYPE_KW@0..4 "type" | 3 | TYPE_KW@0..4 "type" |
4 | WHITESPACE@4..5 " " | 4 | WHITESPACE@4..5 " " |
@@ -29,212 +29,84 @@ SOURCE_FILE@0..200 | |||
29 | R_PAREN@26..27 ")" | 29 | R_PAREN@26..27 ")" |
30 | SEMICOLON@27..28 ";" | 30 | SEMICOLON@27..28 ";" |
31 | WHITESPACE@28..29 "\n" | 31 | WHITESPACE@28..29 "\n" |
32 | FN_DEF@29..79 | 32 | TYPE_ALIAS_DEF@29..81 |
33 | FN_KW@29..31 "fn" | 33 | TYPE_KW@29..33 "type" |
34 | WHITESPACE@31..32 " " | 34 | WHITESPACE@33..34 " " |
35 | NAME@32..35 | 35 | NAME@34..35 |
36 | IDENT@32..35 "foo" | 36 | IDENT@34..35 "B" |
37 | TYPE_PARAM_LIST@35..38 | 37 | WHITESPACE@35..36 " " |
38 | L_ANGLE@35..36 "<" | 38 | EQ@36..37 "=" |
39 | TYPE_PARAM@36..37 | 39 | WHITESPACE@37..38 " " |
40 | NAME@36..37 | 40 | FOR_TYPE@38..80 |
41 | IDENT@36..37 "T" | 41 | FOR_KW@38..41 "for" |
42 | R_ANGLE@37..38 ">" | 42 | TYPE_PARAM_LIST@41..45 |
43 | PARAM_LIST@38..46 | 43 | L_ANGLE@41..42 "<" |
44 | L_PAREN@38..39 "(" | 44 | LIFETIME_PARAM@42..44 |
45 | PARAM@39..45 | 45 | LIFETIME@42..44 "\'a" |
46 | BIND_PAT@39..41 | 46 | R_ANGLE@44..45 ">" |
47 | NAME@39..41 | 47 | WHITESPACE@45..46 " " |
48 | IDENT@39..41 "_t" | 48 | FN_POINTER_TYPE@46..80 |
49 | COLON@41..42 ":" | 49 | UNSAFE_KW@46..52 "unsafe" |
50 | WHITESPACE@42..43 " " | 50 | WHITESPACE@52..53 " " |
51 | REFERENCE_TYPE@43..45 | 51 | ABI@53..63 |
52 | AMP@43..44 "&" | 52 | EXTERN_KW@53..59 "extern" |
53 | PATH_TYPE@44..45 | 53 | WHITESPACE@59..60 " " |
54 | PATH@44..45 | 54 | STRING@60..63 "\"C\"" |
55 | PATH_SEGMENT@44..45 | 55 | WHITESPACE@63..64 " " |
56 | NAME_REF@44..45 | 56 | FN_KW@64..66 "fn" |
57 | IDENT@44..45 "T" | 57 | PARAM_LIST@66..74 |
58 | R_PAREN@45..46 ")" | 58 | L_PAREN@66..67 "(" |
59 | WHITESPACE@46..47 " " | 59 | PARAM@67..73 |
60 | WHERE_CLAUSE@47..76 | 60 | REFERENCE_TYPE@67..73 |
61 | WHERE_KW@47..52 "where" | 61 | AMP@67..68 "&" |
62 | WHITESPACE@52..53 " " | 62 | LIFETIME@68..70 "\'a" |
63 | WHERE_PRED@53..76 | 63 | WHITESPACE@70..71 " " |
64 | FOR_TYPE@53..66 | 64 | TUPLE_TYPE@71..73 |
65 | FOR_KW@53..56 "for" | 65 | L_PAREN@71..72 "(" |
66 | TYPE_PARAM_LIST@56..60 | 66 | R_PAREN@72..73 ")" |
67 | L_ANGLE@56..57 "<" | 67 | R_PAREN@73..74 ")" |
68 | LIFETIME_PARAM@57..59 | 68 | WHITESPACE@74..75 " " |
69 | LIFETIME@57..59 "\'a" | 69 | RET_TYPE@75..80 |
70 | R_ANGLE@59..60 ">" | 70 | THIN_ARROW@75..77 "->" |
71 | WHITESPACE@60..61 " " | 71 | WHITESPACE@77..78 " " |
72 | REFERENCE_TYPE@61..66 | 72 | TUPLE_TYPE@78..80 |
73 | AMP@61..62 "&" | 73 | L_PAREN@78..79 "(" |
74 | LIFETIME@62..64 "\'a" | 74 | R_PAREN@79..80 ")" |
75 | WHITESPACE@64..65 " " | 75 | SEMICOLON@80..81 ";" |
76 | PATH_TYPE@65..66 | 76 | WHITESPACE@81..82 "\n" |
77 | PATH@65..66 | 77 | TYPE_ALIAS_DEF@82..120 |
78 | PATH_SEGMENT@65..66 | 78 | TYPE_KW@82..86 "type" |
79 | NAME_REF@65..66 | 79 | WHITESPACE@86..87 " " |
80 | IDENT@65..66 "T" | 80 | NAME@87..90 |
81 | COLON@66..67 ":" | 81 | IDENT@87..90 "Obj" |
82 | WHITESPACE@67..68 " " | 82 | WHITESPACE@90..91 " " |
83 | TYPE_BOUND_LIST@68..76 | 83 | EQ@91..92 "=" |
84 | TYPE_BOUND@68..76 | 84 | WHITESPACE@92..93 " " |
85 | PATH_TYPE@68..76 | 85 | FOR_TYPE@93..119 |
86 | PATH@68..76 | 86 | FOR_KW@93..96 "for" |
87 | PATH_SEGMENT@68..76 | 87 | TYPE_PARAM_LIST@96..100 |
88 | NAME_REF@68..76 | 88 | L_ANGLE@96..97 "<" |
89 | IDENT@68..76 "Iterator" | 89 | LIFETIME_PARAM@97..99 |
90 | WHITESPACE@76..77 " " | 90 | LIFETIME@97..99 "\'a" |
91 | BLOCK_EXPR@77..79 | 91 | R_ANGLE@99..100 ">" |
92 | L_CURLY@77..78 "{" | 92 | WHITESPACE@100..101 " " |
93 | R_CURLY@78..79 "}" | 93 | PATH_TYPE@101..119 |
94 | WHITESPACE@79..80 "\n" | 94 | PATH@101..119 |
95 | FN_DEF@80..134 | 95 | PATH_SEGMENT@101..119 |
96 | FN_KW@80..82 "fn" | 96 | NAME_REF@101..110 |
97 | WHITESPACE@82..83 " " | 97 | IDENT@101..110 "PartialEq" |
98 | NAME@83..86 | 98 | TYPE_ARG_LIST@110..119 |
99 | IDENT@83..86 "bar" | 99 | L_ANGLE@110..111 "<" |
100 | TYPE_PARAM_LIST@86..89 | 100 | TYPE_ARG@111..118 |
101 | L_ANGLE@86..87 "<" | 101 | REFERENCE_TYPE@111..118 |
102 | TYPE_PARAM@87..88 | 102 | AMP@111..112 "&" |
103 | NAME@87..88 | 103 | LIFETIME@112..114 "\'a" |
104 | IDENT@87..88 "T" | 104 | WHITESPACE@114..115 " " |
105 | R_ANGLE@88..89 ">" | 105 | PATH_TYPE@115..118 |
106 | PARAM_LIST@89..97 | 106 | PATH@115..118 |
107 | L_PAREN@89..90 "(" | 107 | PATH_SEGMENT@115..118 |
108 | PARAM@90..96 | 108 | NAME_REF@115..118 |
109 | BIND_PAT@90..92 | 109 | IDENT@115..118 "i32" |
110 | NAME@90..92 | 110 | R_ANGLE@118..119 ">" |
111 | IDENT@90..92 "_t" | 111 | SEMICOLON@119..120 ";" |
112 | COLON@92..93 ":" | 112 | WHITESPACE@120..121 "\n" |
113 | WHITESPACE@93..94 " " | ||
114 | REFERENCE_TYPE@94..96 | ||
115 | AMP@94..95 "&" | ||
116 | PATH_TYPE@95..96 | ||
117 | PATH@95..96 | ||
118 | PATH_SEGMENT@95..96 | ||
119 | NAME_REF@95..96 | ||
120 | IDENT@95..96 "T" | ||
121 | R_PAREN@96..97 ")" | ||
122 | WHITESPACE@97..98 " " | ||
123 | WHERE_CLAUSE@98..131 | ||
124 | WHERE_KW@98..103 "where" | ||
125 | WHITESPACE@103..104 " " | ||
126 | WHERE_PRED@104..131 | ||
127 | FOR_TYPE@104..121 | ||
128 | FOR_KW@104..107 "for" | ||
129 | TYPE_PARAM_LIST@107..111 | ||
130 | L_ANGLE@107..108 "<" | ||
131 | LIFETIME_PARAM@108..110 | ||
132 | LIFETIME@108..110 "\'a" | ||
133 | R_ANGLE@110..111 ">" | ||
134 | WHITESPACE@111..112 " " | ||
135 | REFERENCE_TYPE@112..121 | ||
136 | AMP@112..113 "&" | ||
137 | LIFETIME@113..115 "\'a" | ||
138 | WHITESPACE@115..116 " " | ||
139 | MUT_KW@116..119 "mut" | ||
140 | WHITESPACE@119..120 " " | ||
141 | PATH_TYPE@120..121 | ||
142 | PATH@120..121 | ||
143 | PATH_SEGMENT@120..121 | ||
144 | NAME_REF@120..121 | ||
145 | IDENT@120..121 "T" | ||
146 | COLON@121..122 ":" | ||
147 | WHITESPACE@122..123 " " | ||
148 | TYPE_BOUND_LIST@123..131 | ||
149 | TYPE_BOUND@123..131 | ||
150 | PATH_TYPE@123..131 | ||
151 | PATH@123..131 | ||
152 | PATH_SEGMENT@123..131 | ||
153 | NAME_REF@123..131 | ||
154 | IDENT@123..131 "Iterator" | ||
155 | WHITESPACE@131..132 " " | ||
156 | BLOCK_EXPR@132..134 | ||
157 | L_CURLY@132..133 "{" | ||
158 | R_CURLY@133..134 "}" | ||
159 | WHITESPACE@134..135 "\n" | ||
160 | FN_DEF@135..199 | ||
161 | FN_KW@135..137 "fn" | ||
162 | WHITESPACE@137..138 " " | ||
163 | NAME@138..141 | ||
164 | IDENT@138..141 "baz" | ||
165 | TYPE_PARAM_LIST@141..144 | ||
166 | L_ANGLE@141..142 "<" | ||
167 | TYPE_PARAM@142..143 | ||
168 | NAME@142..143 | ||
169 | IDENT@142..143 "T" | ||
170 | R_ANGLE@143..144 ">" | ||
171 | PARAM_LIST@144..152 | ||
172 | L_PAREN@144..145 "(" | ||
173 | PARAM@145..151 | ||
174 | BIND_PAT@145..147 | ||
175 | NAME@145..147 | ||
176 | IDENT@145..147 "_t" | ||
177 | COLON@147..148 ":" | ||
178 | WHITESPACE@148..149 " " | ||
179 | REFERENCE_TYPE@149..151 | ||
180 | AMP@149..150 "&" | ||
181 | PATH_TYPE@150..151 | ||
182 | PATH@150..151 | ||
183 | PATH_SEGMENT@150..151 | ||
184 | NAME_REF@150..151 | ||
185 | IDENT@150..151 "T" | ||
186 | R_PAREN@151..152 ")" | ||
187 | WHITESPACE@152..153 " " | ||
188 | WHERE_CLAUSE@153..196 | ||
189 | WHERE_KW@153..158 "where" | ||
190 | WHITESPACE@158..159 " " | ||
191 | WHERE_PRED@159..196 | ||
192 | FOR_TYPE@159..186 | ||
193 | FOR_KW@159..162 "for" | ||
194 | TYPE_PARAM_LIST@162..166 | ||
195 | L_ANGLE@162..163 "<" | ||
196 | LIFETIME_PARAM@163..165 | ||
197 | LIFETIME@163..165 "\'a" | ||
198 | R_ANGLE@165..166 ">" | ||
199 | WHITESPACE@166..167 " " | ||
200 | PATH_TYPE@167..186 | ||
201 | PATH@167..186 | ||
202 | PATH@167..181 | ||
203 | PATH_SEGMENT@167..181 | ||
204 | L_ANGLE@167..168 "<" | ||
205 | REFERENCE_TYPE@168..173 | ||
206 | AMP@168..169 "&" | ||
207 | LIFETIME@169..171 "\'a" | ||
208 | WHITESPACE@171..172 " " | ||
209 | PATH_TYPE@172..173 | ||
210 | PATH@172..173 | ||
211 | PATH_SEGMENT@172..173 | ||
212 | NAME_REF@172..173 | ||
213 | IDENT@172..173 "T" | ||
214 | WHITESPACE@173..174 " " | ||
215 | AS_KW@174..176 "as" | ||
216 | WHITESPACE@176..177 " " | ||
217 | PATH_TYPE@177..180 | ||
218 | PATH@177..180 | ||
219 | PATH_SEGMENT@177..180 | ||
220 | NAME_REF@177..180 | ||
221 | IDENT@177..180 "Baz" | ||
222 | R_ANGLE@180..181 ">" | ||
223 | COLON2@181..183 "::" | ||
224 | PATH_SEGMENT@183..186 | ||
225 | NAME_REF@183..186 | ||
226 | IDENT@183..186 "Foo" | ||
227 | COLON@186..187 ":" | ||
228 | WHITESPACE@187..188 " " | ||
229 | TYPE_BOUND_LIST@188..196 | ||
230 | TYPE_BOUND@188..196 | ||
231 | PATH_TYPE@188..196 | ||
232 | PATH@188..196 | ||
233 | PATH_SEGMENT@188..196 | ||
234 | NAME_REF@188..196 | ||
235 | IDENT@188..196 "Iterator" | ||
236 | WHITESPACE@196..197 " " | ||
237 | BLOCK_EXPR@197..199 | ||
238 | L_CURLY@197..198 "{" | ||
239 | R_CURLY@198..199 "}" | ||
240 | WHITESPACE@199..200 "\n" | ||
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0081_for_type.rs b/crates/ra_syntax/test_data/parser/inline/ok/0081_for_type.rs index d6774d438..8ac7b9e10 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0081_for_type.rs +++ b/crates/ra_syntax/test_data/parser/inline/ok/0081_for_type.rs | |||
@@ -1,4 +1,3 @@ | |||
1 | type A = for<'a> fn() -> (); | 1 | type A = for<'a> fn() -> (); |
2 | fn foo<T>(_t: &T) where for<'a> &'a T: Iterator {} | 2 | type B = for<'a> unsafe extern "C" fn(&'a ()) -> (); |
3 | fn bar<T>(_t: &T) where for<'a> &'a mut T: Iterator {} | 3 | type Obj = for<'a> PartialEq<&'a i32>; |
4 | fn baz<T>(_t: &T) where for<'a> <&'a T as Baz>::Foo: Iterator {} | ||
diff --git a/crates/ra_syntax/test_data/parser/ok/0067_where_for_pred.rast b/crates/ra_syntax/test_data/parser/ok/0067_where_for_pred.rast new file mode 100644 index 000000000..503585103 --- /dev/null +++ b/crates/ra_syntax/test_data/parser/ok/0067_where_for_pred.rast | |||
@@ -0,0 +1,392 @@ | |||
1 | SOURCE_FILE@0..374 | ||
2 | FN_DEF@0..55 | ||
3 | FN_KW@0..2 "fn" | ||
4 | WHITESPACE@2..3 " " | ||
5 | NAME@3..12 | ||
6 | IDENT@3..12 "for_trait" | ||
7 | TYPE_PARAM_LIST@12..15 | ||
8 | L_ANGLE@12..13 "<" | ||
9 | TYPE_PARAM@13..14 | ||
10 | NAME@13..14 | ||
11 | IDENT@13..14 "F" | ||
12 | R_ANGLE@14..15 ">" | ||
13 | PARAM_LIST@15..17 | ||
14 | L_PAREN@15..16 "(" | ||
15 | R_PAREN@16..17 ")" | ||
16 | WHITESPACE@17..18 "\n" | ||
17 | WHERE_CLAUSE@18..51 | ||
18 | WHERE_KW@18..23 "where" | ||
19 | WHITESPACE@23..28 "\n " | ||
20 | WHERE_PRED@28..50 | ||
21 | FOR_KW@28..31 "for" | ||
22 | TYPE_PARAM_LIST@31..35 | ||
23 | L_ANGLE@31..32 "<" | ||
24 | LIFETIME_PARAM@32..34 | ||
25 | LIFETIME@32..34 "\'a" | ||
26 | R_ANGLE@34..35 ">" | ||
27 | WHITESPACE@35..36 " " | ||
28 | PATH_TYPE@36..37 | ||
29 | PATH@36..37 | ||
30 | PATH_SEGMENT@36..37 | ||
31 | NAME_REF@36..37 | ||
32 | IDENT@36..37 "F" | ||
33 | COLON@37..38 ":" | ||
34 | WHITESPACE@38..39 " " | ||
35 | TYPE_BOUND_LIST@39..50 | ||
36 | TYPE_BOUND@39..50 | ||
37 | PATH_TYPE@39..50 | ||
38 | PATH@39..50 | ||
39 | PATH_SEGMENT@39..50 | ||
40 | NAME_REF@39..41 | ||
41 | IDENT@39..41 "Fn" | ||
42 | PARAM_LIST@41..50 | ||
43 | L_PAREN@41..42 "(" | ||
44 | PARAM@42..49 | ||
45 | REFERENCE_TYPE@42..49 | ||
46 | AMP@42..43 "&" | ||
47 | LIFETIME@43..45 "\'a" | ||
48 | WHITESPACE@45..46 " " | ||
49 | PATH_TYPE@46..49 | ||
50 | PATH@46..49 | ||
51 | PATH_SEGMENT@46..49 | ||
52 | NAME_REF@46..49 | ||
53 | IDENT@46..49 "str" | ||
54 | R_PAREN@49..50 ")" | ||
55 | COMMA@50..51 "," | ||
56 | WHITESPACE@51..52 "\n" | ||
57 | BLOCK_EXPR@52..55 | ||
58 | L_CURLY@52..53 "{" | ||
59 | WHITESPACE@53..54 "\n" | ||
60 | R_CURLY@54..55 "}" | ||
61 | WHITESPACE@55..56 "\n" | ||
62 | FN_DEF@56..107 | ||
63 | FN_KW@56..58 "fn" | ||
64 | WHITESPACE@58..59 " " | ||
65 | NAME@59..66 | ||
66 | IDENT@59..66 "for_ref" | ||
67 | TYPE_PARAM_LIST@66..69 | ||
68 | L_ANGLE@66..67 "<" | ||
69 | TYPE_PARAM@67..68 | ||
70 | NAME@67..68 | ||
71 | IDENT@67..68 "F" | ||
72 | R_ANGLE@68..69 ">" | ||
73 | PARAM_LIST@69..71 | ||
74 | L_PAREN@69..70 "(" | ||
75 | R_PAREN@70..71 ")" | ||
76 | WHITESPACE@71..72 "\n" | ||
77 | WHERE_CLAUSE@72..103 | ||
78 | WHERE_KW@72..77 "where" | ||
79 | WHITESPACE@77..82 "\n " | ||
80 | WHERE_PRED@82..102 | ||
81 | FOR_KW@82..85 "for" | ||
82 | TYPE_PARAM_LIST@85..89 | ||
83 | L_ANGLE@85..86 "<" | ||
84 | LIFETIME_PARAM@86..88 | ||
85 | LIFETIME@86..88 "\'a" | ||
86 | R_ANGLE@88..89 ">" | ||
87 | WHITESPACE@89..90 " " | ||
88 | REFERENCE_TYPE@90..95 | ||
89 | AMP@90..91 "&" | ||
90 | LIFETIME@91..93 "\'a" | ||
91 | WHITESPACE@93..94 " " | ||
92 | PATH_TYPE@94..95 | ||
93 | PATH@94..95 | ||
94 | PATH_SEGMENT@94..95 | ||
95 | NAME_REF@94..95 | ||
96 | IDENT@94..95 "F" | ||
97 | COLON@95..96 ":" | ||
98 | WHITESPACE@96..97 " " | ||
99 | TYPE_BOUND_LIST@97..102 | ||
100 | TYPE_BOUND@97..102 | ||
101 | PATH_TYPE@97..102 | ||
102 | PATH@97..102 | ||
103 | PATH_SEGMENT@97..102 | ||
104 | NAME_REF@97..102 | ||
105 | IDENT@97..102 "Debug" | ||
106 | COMMA@102..103 "," | ||
107 | WHITESPACE@103..104 "\n" | ||
108 | BLOCK_EXPR@104..107 | ||
109 | L_CURLY@104..105 "{" | ||
110 | WHITESPACE@105..106 "\n" | ||
111 | R_CURLY@106..107 "}" | ||
112 | WHITESPACE@107..108 "\n" | ||
113 | FN_DEF@108..170 | ||
114 | FN_KW@108..110 "fn" | ||
115 | WHITESPACE@110..111 " " | ||
116 | NAME@111..121 | ||
117 | IDENT@111..121 "for_parens" | ||
118 | TYPE_PARAM_LIST@121..124 | ||
119 | L_ANGLE@121..122 "<" | ||
120 | TYPE_PARAM@122..123 | ||
121 | NAME@122..123 | ||
122 | IDENT@122..123 "F" | ||
123 | R_ANGLE@123..124 ">" | ||
124 | PARAM_LIST@124..126 | ||
125 | L_PAREN@124..125 "(" | ||
126 | R_PAREN@125..126 ")" | ||
127 | WHITESPACE@126..127 "\n" | ||
128 | WHERE_CLAUSE@127..166 | ||
129 | WHERE_KW@127..132 "where" | ||
130 | WHITESPACE@132..137 "\n " | ||
131 | WHERE_PRED@137..165 | ||
132 | FOR_KW@137..140 "for" | ||
133 | TYPE_PARAM_LIST@140..144 | ||
134 | L_ANGLE@140..141 "<" | ||
135 | LIFETIME_PARAM@141..143 | ||
136 | LIFETIME@141..143 "\'a" | ||
137 | R_ANGLE@143..144 ">" | ||
138 | WHITESPACE@144..145 " " | ||
139 | PAREN_TYPE@145..152 | ||
140 | L_PAREN@145..146 "(" | ||
141 | REFERENCE_TYPE@146..151 | ||
142 | AMP@146..147 "&" | ||
143 | LIFETIME@147..149 "\'a" | ||
144 | WHITESPACE@149..150 " " | ||
145 | PATH_TYPE@150..151 | ||
146 | PATH@150..151 | ||
147 | PATH_SEGMENT@150..151 | ||
148 | NAME_REF@150..151 | ||
149 | IDENT@150..151 "F" | ||
150 | R_PAREN@151..152 ")" | ||
151 | COLON@152..153 ":" | ||
152 | WHITESPACE@153..154 " " | ||
153 | TYPE_BOUND_LIST@154..165 | ||
154 | TYPE_BOUND@154..165 | ||
155 | PATH_TYPE@154..165 | ||
156 | PATH@154..165 | ||
157 | PATH_SEGMENT@154..165 | ||
158 | NAME_REF@154..156 | ||
159 | IDENT@154..156 "Fn" | ||
160 | PARAM_LIST@156..165 | ||
161 | L_PAREN@156..157 "(" | ||
162 | PARAM@157..164 | ||
163 | REFERENCE_TYPE@157..164 | ||
164 | AMP@157..158 "&" | ||
165 | LIFETIME@158..160 "\'a" | ||
166 | WHITESPACE@160..161 " " | ||
167 | PATH_TYPE@161..164 | ||
168 | PATH@161..164 | ||
169 | PATH_SEGMENT@161..164 | ||
170 | NAME_REF@161..164 | ||
171 | IDENT@161..164 "str" | ||
172 | R_PAREN@164..165 ")" | ||
173 | COMMA@165..166 "," | ||
174 | WHITESPACE@166..167 "\n" | ||
175 | BLOCK_EXPR@167..170 | ||
176 | L_CURLY@167..168 "{" | ||
177 | WHITESPACE@168..169 "\n" | ||
178 | R_CURLY@169..170 "}" | ||
179 | WHITESPACE@170..171 "\n" | ||
180 | FN_DEF@171..223 | ||
181 | FN_KW@171..173 "fn" | ||
182 | WHITESPACE@173..174 " " | ||
183 | NAME@174..183 | ||
184 | IDENT@174..183 "for_slice" | ||
185 | TYPE_PARAM_LIST@183..186 | ||
186 | L_ANGLE@183..184 "<" | ||
187 | TYPE_PARAM@184..185 | ||
188 | NAME@184..185 | ||
189 | IDENT@184..185 "F" | ||
190 | R_ANGLE@185..186 ">" | ||
191 | PARAM_LIST@186..188 | ||
192 | L_PAREN@186..187 "(" | ||
193 | R_PAREN@187..188 ")" | ||
194 | WHITESPACE@188..189 "\n" | ||
195 | WHERE_CLAUSE@189..219 | ||
196 | WHERE_KW@189..194 "where" | ||
197 | WHITESPACE@194..199 "\n " | ||
198 | WHERE_PRED@199..218 | ||
199 | FOR_KW@199..202 "for" | ||
200 | TYPE_PARAM_LIST@202..206 | ||
201 | L_ANGLE@202..203 "<" | ||
202 | LIFETIME_PARAM@203..205 | ||
203 | LIFETIME@203..205 "\'a" | ||
204 | R_ANGLE@205..206 ">" | ||
205 | WHITESPACE@206..207 " " | ||
206 | SLICE_TYPE@207..214 | ||
207 | L_BRACK@207..208 "[" | ||
208 | REFERENCE_TYPE@208..213 | ||
209 | AMP@208..209 "&" | ||
210 | LIFETIME@209..211 "\'a" | ||
211 | WHITESPACE@211..212 " " | ||
212 | PATH_TYPE@212..213 | ||
213 | PATH@212..213 | ||
214 | PATH_SEGMENT@212..213 | ||
215 | NAME_REF@212..213 | ||
216 | IDENT@212..213 "F" | ||
217 | R_BRACK@213..214 "]" | ||
218 | COLON@214..215 ":" | ||
219 | WHITESPACE@215..216 " " | ||
220 | TYPE_BOUND_LIST@216..218 | ||
221 | TYPE_BOUND@216..218 | ||
222 | PATH_TYPE@216..218 | ||
223 | PATH@216..218 | ||
224 | PATH_SEGMENT@216..218 | ||
225 | NAME_REF@216..218 | ||
226 | IDENT@216..218 "Eq" | ||
227 | COMMA@218..219 "," | ||
228 | WHITESPACE@219..220 "\n" | ||
229 | BLOCK_EXPR@220..223 | ||
230 | L_CURLY@220..221 "{" | ||
231 | WHITESPACE@221..222 "\n" | ||
232 | R_CURLY@222..223 "}" | ||
233 | WHITESPACE@223..224 "\n" | ||
234 | FN_DEF@224..300 | ||
235 | FN_KW@224..226 "fn" | ||
236 | WHITESPACE@226..227 " " | ||
237 | NAME@227..236 | ||
238 | IDENT@227..236 "for_qpath" | ||
239 | TYPE_PARAM_LIST@236..239 | ||
240 | L_ANGLE@236..237 "<" | ||
241 | TYPE_PARAM@237..238 | ||
242 | NAME@237..238 | ||
243 | IDENT@237..238 "T" | ||
244 | R_ANGLE@238..239 ">" | ||
245 | PARAM_LIST@239..247 | ||
246 | L_PAREN@239..240 "(" | ||
247 | PARAM@240..246 | ||
248 | BIND_PAT@240..242 | ||
249 | NAME@240..242 | ||
250 | IDENT@240..242 "_t" | ||
251 | COLON@242..243 ":" | ||
252 | WHITESPACE@243..244 " " | ||
253 | REFERENCE_TYPE@244..246 | ||
254 | AMP@244..245 "&" | ||
255 | PATH_TYPE@245..246 | ||
256 | PATH@245..246 | ||
257 | PATH_SEGMENT@245..246 | ||
258 | NAME_REF@245..246 | ||
259 | IDENT@245..246 "T" | ||
260 | R_PAREN@246..247 ")" | ||
261 | WHITESPACE@247..248 "\n" | ||
262 | WHERE_CLAUSE@248..296 | ||
263 | WHERE_KW@248..253 "where" | ||
264 | WHITESPACE@253..258 "\n " | ||
265 | WHERE_PRED@258..295 | ||
266 | FOR_KW@258..261 "for" | ||
267 | TYPE_PARAM_LIST@261..265 | ||
268 | L_ANGLE@261..262 "<" | ||
269 | LIFETIME_PARAM@262..264 | ||
270 | LIFETIME@262..264 "\'a" | ||
271 | R_ANGLE@264..265 ">" | ||
272 | WHITESPACE@265..266 " " | ||
273 | PATH_TYPE@266..285 | ||
274 | PATH@266..285 | ||
275 | PATH@266..280 | ||
276 | PATH_SEGMENT@266..280 | ||
277 | L_ANGLE@266..267 "<" | ||
278 | REFERENCE_TYPE@267..272 | ||
279 | AMP@267..268 "&" | ||
280 | LIFETIME@268..270 "\'a" | ||
281 | WHITESPACE@270..271 " " | ||
282 | PATH_TYPE@271..272 | ||
283 | PATH@271..272 | ||
284 | PATH_SEGMENT@271..272 | ||
285 | NAME_REF@271..272 | ||
286 | IDENT@271..272 "T" | ||
287 | WHITESPACE@272..273 " " | ||
288 | AS_KW@273..275 "as" | ||
289 | WHITESPACE@275..276 " " | ||
290 | PATH_TYPE@276..279 | ||
291 | PATH@276..279 | ||
292 | PATH_SEGMENT@276..279 | ||
293 | NAME_REF@276..279 | ||
294 | IDENT@276..279 "Baz" | ||
295 | R_ANGLE@279..280 ">" | ||
296 | COLON2@280..282 "::" | ||
297 | PATH_SEGMENT@282..285 | ||
298 | NAME_REF@282..285 | ||
299 | IDENT@282..285 "Foo" | ||
300 | COLON@285..286 ":" | ||
301 | WHITESPACE@286..287 " " | ||
302 | TYPE_BOUND_LIST@287..295 | ||
303 | TYPE_BOUND@287..295 | ||
304 | PATH_TYPE@287..295 | ||
305 | PATH@287..295 | ||
306 | PATH_SEGMENT@287..295 | ||
307 | NAME_REF@287..295 | ||
308 | IDENT@287..295 "Iterator" | ||
309 | COMMA@295..296 "," | ||
310 | WHITESPACE@296..297 "\n" | ||
311 | BLOCK_EXPR@297..300 | ||
312 | L_CURLY@297..298 "{" | ||
313 | WHITESPACE@298..299 "\n" | ||
314 | R_CURLY@299..300 "}" | ||
315 | WHITESPACE@300..301 "\n" | ||
316 | FN_DEF@301..373 | ||
317 | FN_KW@301..303 "fn" | ||
318 | WHITESPACE@303..304 " " | ||
319 | NAME@304..314 | ||
320 | IDENT@304..314 "for_for_fn" | ||
321 | TYPE_PARAM_LIST@314..317 | ||
322 | L_ANGLE@314..315 "<" | ||
323 | TYPE_PARAM@315..316 | ||
324 | NAME@315..316 | ||
325 | IDENT@315..316 "T" | ||
326 | R_ANGLE@316..317 ">" | ||
327 | PARAM_LIST@317..319 | ||
328 | L_PAREN@317..318 "(" | ||
329 | R_PAREN@318..319 ")" | ||
330 | WHITESPACE@319..320 "\n" | ||
331 | WHERE_CLAUSE@320..369 | ||
332 | WHERE_KW@320..325 "where" | ||
333 | WHITESPACE@325..330 "\n " | ||
334 | WHERE_PRED@330..368 | ||
335 | FOR_KW@330..333 "for" | ||
336 | TYPE_PARAM_LIST@333..337 | ||
337 | L_ANGLE@333..334 "<" | ||
338 | LIFETIME_PARAM@334..336 | ||
339 | LIFETIME@334..336 "\'a" | ||
340 | R_ANGLE@336..337 ">" | ||
341 | WHITESPACE@337..338 " " | ||
342 | FOR_TYPE@338..362 | ||
343 | FOR_KW@338..341 "for" | ||
344 | TYPE_PARAM_LIST@341..345 | ||
345 | L_ANGLE@341..342 "<" | ||
346 | LIFETIME_PARAM@342..344 | ||
347 | LIFETIME@342..344 "\'b" | ||
348 | R_ANGLE@344..345 ">" | ||
349 | WHITESPACE@345..346 " " | ||
350 | FN_POINTER_TYPE@346..362 | ||
351 | FN_KW@346..348 "fn" | ||
352 | PARAM_LIST@348..362 | ||
353 | L_PAREN@348..349 "(" | ||
354 | PARAM@349..354 | ||
355 | REFERENCE_TYPE@349..354 | ||
356 | AMP@349..350 "&" | ||
357 | LIFETIME@350..352 "\'a" | ||
358 | WHITESPACE@352..353 " " | ||
359 | PATH_TYPE@353..354 | ||
360 | PATH@353..354 | ||
361 | PATH_SEGMENT@353..354 | ||
362 | NAME_REF@353..354 | ||
363 | IDENT@353..354 "T" | ||
364 | COMMA@354..355 "," | ||
365 | WHITESPACE@355..356 " " | ||
366 | PARAM@356..361 | ||
367 | REFERENCE_TYPE@356..361 | ||
368 | AMP@356..357 "&" | ||
369 | LIFETIME@357..359 "\'b" | ||
370 | WHITESPACE@359..360 " " | ||
371 | PATH_TYPE@360..361 | ||
372 | PATH@360..361 | ||
373 | PATH_SEGMENT@360..361 | ||
374 | NAME_REF@360..361 | ||
375 | IDENT@360..361 "T" | ||
376 | R_PAREN@361..362 ")" | ||
377 | COLON@362..363 ":" | ||
378 | WHITESPACE@363..364 " " | ||
379 | TYPE_BOUND_LIST@364..368 | ||
380 | TYPE_BOUND@364..368 | ||
381 | PATH_TYPE@364..368 | ||
382 | PATH@364..368 | ||
383 | PATH_SEGMENT@364..368 | ||
384 | NAME_REF@364..368 | ||
385 | IDENT@364..368 "Copy" | ||
386 | COMMA@368..369 "," | ||
387 | WHITESPACE@369..370 "\n" | ||
388 | BLOCK_EXPR@370..373 | ||
389 | L_CURLY@370..371 "{" | ||
390 | WHITESPACE@371..372 "\n" | ||
391 | R_CURLY@372..373 "}" | ||
392 | WHITESPACE@373..374 "\n" | ||
diff --git a/crates/ra_syntax/test_data/parser/ok/0067_where_for_pred.rs b/crates/ra_syntax/test_data/parser/ok/0067_where_for_pred.rs new file mode 100644 index 000000000..9058c4619 --- /dev/null +++ b/crates/ra_syntax/test_data/parser/ok/0067_where_for_pred.rs | |||
@@ -0,0 +1,30 @@ | |||
1 | fn for_trait<F>() | ||
2 | where | ||
3 | for<'a> F: Fn(&'a str), | ||
4 | { | ||
5 | } | ||
6 | fn for_ref<F>() | ||
7 | where | ||
8 | for<'a> &'a F: Debug, | ||
9 | { | ||
10 | } | ||
11 | fn for_parens<F>() | ||
12 | where | ||
13 | for<'a> (&'a F): Fn(&'a str), | ||
14 | { | ||
15 | } | ||
16 | fn for_slice<F>() | ||
17 | where | ||
18 | for<'a> [&'a F]: Eq, | ||
19 | { | ||
20 | } | ||
21 | fn for_qpath<T>(_t: &T) | ||
22 | where | ||
23 | for<'a> <&'a T as Baz>::Foo: Iterator, | ||
24 | { | ||
25 | } | ||
26 | fn for_for_fn<T>() | ||
27 | where | ||
28 | for<'a> for<'b> fn(&'a T, &'b T): Copy, | ||
29 | { | ||
30 | } | ||