aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_syntax/src/grammar/types.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-11-05 08:39:35 +0000
committerAleksey Kladov <[email protected]>2018-11-05 08:39:51 +0000
commit6502bd2c966d57bdb8fbba7f43da9ddd004d87d3 (patch)
tree683be88ba9b42bffd83a3a323caca27cd874ac89 /crates/ra_syntax/src/grammar/types.rs
parent9d29c717ac3fcc3f4cbeb2fb7ec5ad33c9f10efb (diff)
reduce code duplication
Diffstat (limited to 'crates/ra_syntax/src/grammar/types.rs')
-rw-r--r--crates/ra_syntax/src/grammar/types.rs13
1 files changed, 11 insertions, 2 deletions
diff --git a/crates/ra_syntax/src/grammar/types.rs b/crates/ra_syntax/src/grammar/types.rs
index f308aef89..ed2718e73 100644
--- a/crates/ra_syntax/src/grammar/types.rs
+++ b/crates/ra_syntax/src/grammar/types.rs
@@ -188,13 +188,22 @@ fn fn_pointer_type(p: &mut Parser) {
188 m.complete(p, FN_POINTER_TYPE); 188 m.complete(p, FN_POINTER_TYPE);
189} 189}
190 190
191pub(super) fn for_binder(p: &mut Parser) {
192 assert!(p.at(FOR_KW));
193 p.bump();
194 if p.at(L_ANGLE) {
195 type_params::opt_type_param_list(p);
196 } else {
197 p.error("expected `<`");
198 }
199}
200
191// test for_type 201// test for_type
192// type A = for<'a> fn() -> (); 202// type A = for<'a> fn() -> ();
193pub(super) fn for_type(p: &mut Parser) { 203pub(super) fn for_type(p: &mut Parser) {
194 assert!(p.at(FOR_KW)); 204 assert!(p.at(FOR_KW));
195 let m = p.start(); 205 let m = p.start();
196 p.bump(); 206 for_binder(p);
197 type_params::opt_type_param_list(p);
198 match p.current() { 207 match p.current() {
199 FN_KW | UNSAFE_KW | EXTERN_KW => fn_pointer_type(p), 208 FN_KW | UNSAFE_KW | EXTERN_KW => fn_pointer_type(p),
200 _ if paths::is_path_start(p) => path_type_(p, false), 209 _ if paths::is_path_start(p) => path_type_(p, false),