From e44a6bcc8208f9d906febf9278120b75a6af67f9 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 4 Sep 2018 12:25:23 +0300 Subject: for types in bounds --- crates/libsyntax2/src/grammar/type_params.rs | 18 ++--- crates/libsyntax2/src/grammar/types.rs | 15 +++- .../parser/inline/0016_type_item_where_clause.txt | 11 +-- .../data/parser/inline/0041_type_param_bounds.txt | 28 +++---- .../data/parser/inline/0049_trait_item_list.txt | 9 ++- .../tests/data/parser/inline/0056_trait_item.txt | 33 +++++---- .../parser/inline/0059_function_where_clause.txt | 9 ++- .../parser/inline/0060_function_type_params.txt | 24 +++--- .../data/parser/inline/0063_impl_trait_type.txt | 51 ++++++------- .../parser/inline/0097_param_list_opt_patterns.txt | 45 ++++++------ .../tests/data/parser/inline/0098_where_clause.txt | 32 ++++---- .../data/parser/inline/0100_dyn_trait_type.txt | 51 ++++++------- .../tests/data/parser/ok/0001_struct_item.txt | 9 ++- .../data/parser/ok/0020_type_param_bounds.txt | 75 ++++++++++--------- .../tests/data/parser/ok/0032_where_for.rs | 4 + .../tests/data/parser/ok/0032_where_for.txt | 85 ++++++++++++++++++++++ 16 files changed, 309 insertions(+), 190 deletions(-) create mode 100644 crates/libsyntax2/tests/data/parser/ok/0032_where_for.rs create mode 100644 crates/libsyntax2/tests/data/parser/ok/0032_where_for.txt (limited to 'crates/libsyntax2') diff --git a/crates/libsyntax2/src/grammar/type_params.rs b/crates/libsyntax2/src/grammar/type_params.rs index 3fb4bd356..79bc95ce4 100644 --- a/crates/libsyntax2/src/grammar/type_params.rs +++ b/crates/libsyntax2/src/grammar/type_params.rs @@ -70,15 +70,15 @@ pub(super) fn bounds_without_colon(p: &mut Parser) { loop { let has_paren = p.eat(L_PAREN); p.eat(QUESTION); - if p.at(FOR_KW) { - //TODO - } - if p.at(LIFETIME) { - p.bump(); - } else if paths::is_path_start(p) { - paths::type_path(p); - } else { - break; + match p.current() { + LIFETIME => p.bump(), + FOR_KW => { + types::for_type(p) + } + _ if paths::is_path_start(p) => { + types::path_type(p) + } + _ => break, } if has_paren { p.expect(R_PAREN); diff --git a/crates/libsyntax2/src/grammar/types.rs b/crates/libsyntax2/src/grammar/types.rs index a52355b50..27e5b086e 100644 --- a/crates/libsyntax2/src/grammar/types.rs +++ b/crates/libsyntax2/src/grammar/types.rs @@ -191,12 +191,17 @@ fn fn_pointer_type(p: &mut Parser) { // test for_type // type A = for<'a> fn() -> (); -fn for_type(p: &mut Parser) { +pub(super) fn for_type(p: &mut Parser) { assert!(p.at(FOR_KW)); let m = p.start(); p.bump(); type_params::opt_type_param_list(p); - type_(p); + match p.current() { + FN_KW | UNSAFE_KW | EXTERN_KW => fn_pointer_type(p), + _ if paths::is_path_start(p) => path_type_(p, false), + _ => p.error("expected a path"), + + } m.complete(p, FOR_TYPE); } @@ -226,12 +231,16 @@ fn dyn_trait_type(p: &mut Parser) { // type C = self::Foo; // type D = super::Foo; pub(super) fn path_type(p: &mut Parser) { + path_type_(p, true) +} + +pub(super) fn path_type_(p: &mut Parser, allow_bounds: bool) { assert!(paths::is_path_start(p) || p.at(L_ANGLE)); let m = p.start(); paths::type_path(p); // test path_type_with_bounds // fn foo() -> Box {} - if p.eat(PLUS) { + if allow_bounds && p.eat(PLUS) { type_params::bounds_without_colon(p); } m.complete(p, PATH_TYPE); diff --git a/crates/libsyntax2/tests/data/parser/inline/0016_type_item_where_clause.txt b/crates/libsyntax2/tests/data/parser/inline/0016_type_item_where_clause.txt index 5309b9a7b..c3fca013e 100644 --- a/crates/libsyntax2/tests/data/parser/inline/0016_type_item_where_clause.txt +++ b/crates/libsyntax2/tests/data/parser/inline/0016_type_item_where_clause.txt @@ -16,11 +16,12 @@ ROOT@[0; 31) IDENT@[15; 18) "Foo" COLON@[18; 19) WHITESPACE@[19; 20) - PATH@[20; 24) - PATH_SEGMENT@[20; 24) - NAME_REF@[20; 24) - IDENT@[20; 24) "Copy" - err: `expected COMMA` + PATH_TYPE@[20; 24) + PATH@[20; 24) + PATH_SEGMENT@[20; 24) + NAME_REF@[20; 24) + IDENT@[20; 24) "Copy" + err: `expected COMMA` WHITESPACE@[24; 25) EQ@[25; 26) WHITESPACE@[26; 27) diff --git a/crates/libsyntax2/tests/data/parser/inline/0041_type_param_bounds.txt b/crates/libsyntax2/tests/data/parser/inline/0041_type_param_bounds.txt index ef9d1f31e..549b571c2 100644 --- a/crates/libsyntax2/tests/data/parser/inline/0041_type_param_bounds.txt +++ b/crates/libsyntax2/tests/data/parser/inline/0041_type_param_bounds.txt @@ -16,19 +16,21 @@ ROOT@[0; 35) PLUS@[15; 16) WHITESPACE@[16; 17) QUESTION@[17; 18) - PATH@[18; 23) - PATH_SEGMENT@[18; 23) - NAME_REF@[18; 23) - IDENT@[18; 23) "Sized" - WHITESPACE@[23; 24) - PLUS@[24; 25) - WHITESPACE@[25; 26) - L_PAREN@[26; 27) - PATH@[27; 31) - PATH_SEGMENT@[27; 31) - NAME_REF@[27; 31) - IDENT@[27; 31) "Copy" - R_PAREN@[31; 32) + PATH_TYPE@[18; 32) + PATH@[18; 23) + PATH_SEGMENT@[18; 23) + NAME_REF@[18; 23) + IDENT@[18; 23) "Sized" + WHITESPACE@[23; 24) + PLUS@[24; 25) + WHITESPACE@[25; 26) + L_PAREN@[26; 27) + PATH_TYPE@[27; 31) + PATH@[27; 31) + PATH_SEGMENT@[27; 31) + NAME_REF@[27; 31) + IDENT@[27; 31) "Copy" + R_PAREN@[31; 32) R_ANGLE@[32; 33) SEMI@[33; 34) WHITESPACE@[34; 35) diff --git a/crates/libsyntax2/tests/data/parser/inline/0049_trait_item_list.txt b/crates/libsyntax2/tests/data/parser/inline/0049_trait_item_list.txt index e18c166f6..72d9220e8 100644 --- a/crates/libsyntax2/tests/data/parser/inline/0049_trait_item_list.txt +++ b/crates/libsyntax2/tests/data/parser/inline/0049_trait_item_list.txt @@ -18,10 +18,11 @@ ROOT@[0; 83) IDENT@[18; 19) "A" COLON@[19; 20) WHITESPACE@[20; 21) - PATH@[21; 26) - PATH_SEGMENT@[21; 26) - NAME_REF@[21; 26) - IDENT@[21; 26) "Clone" + PATH_TYPE@[21; 26) + PATH@[21; 26) + PATH_SEGMENT@[21; 26) + NAME_REF@[21; 26) + IDENT@[21; 26) "Clone" SEMI@[26; 27) WHITESPACE@[27; 32) CONST_DEF@[32; 45) diff --git a/crates/libsyntax2/tests/data/parser/inline/0056_trait_item.txt b/crates/libsyntax2/tests/data/parser/inline/0056_trait_item.txt index 6e9ddcfb4..40c77db4b 100644 --- a/crates/libsyntax2/tests/data/parser/inline/0056_trait_item.txt +++ b/crates/libsyntax2/tests/data/parser/inline/0056_trait_item.txt @@ -12,17 +12,19 @@ ROOT@[0; 42) R_ANGLE@[9; 10) COLON@[10; 11) WHITESPACE@[11; 12) - PATH@[12; 16) - PATH_SEGMENT@[12; 16) - NAME_REF@[12; 16) - IDENT@[12; 16) "Hash" - WHITESPACE@[16; 17) - PLUS@[17; 18) - WHITESPACE@[18; 19) - PATH@[19; 24) - PATH_SEGMENT@[19; 24) - NAME_REF@[19; 24) - IDENT@[19; 24) "Clone" + PATH_TYPE@[12; 24) + PATH@[12; 16) + PATH_SEGMENT@[12; 16) + NAME_REF@[12; 16) + IDENT@[12; 16) "Hash" + WHITESPACE@[16; 17) + PLUS@[17; 18) + WHITESPACE@[18; 19) + PATH_TYPE@[19; 24) + PATH@[19; 24) + PATH_SEGMENT@[19; 24) + NAME_REF@[19; 24) + IDENT@[19; 24) "Clone" WHITESPACE@[24; 25) WHERE_CLAUSE@[25; 38) WHERE_KW@[25; 30) @@ -35,10 +37,11 @@ ROOT@[0; 42) IDENT@[31; 32) "U" COLON@[32; 33) WHITESPACE@[33; 34) - PATH@[34; 38) - PATH_SEGMENT@[34; 38) - NAME_REF@[34; 38) - IDENT@[34; 38) "Copy" + PATH_TYPE@[34; 38) + PATH@[34; 38) + PATH_SEGMENT@[34; 38) + NAME_REF@[34; 38) + IDENT@[34; 38) "Copy" WHITESPACE@[38; 39) ITEM_LIST@[39; 41) L_CURLY@[39; 40) diff --git a/crates/libsyntax2/tests/data/parser/inline/0059_function_where_clause.txt b/crates/libsyntax2/tests/data/parser/inline/0059_function_where_clause.txt index dc90bfc28..281e79deb 100644 --- a/crates/libsyntax2/tests/data/parser/inline/0059_function_where_clause.txt +++ b/crates/libsyntax2/tests/data/parser/inline/0059_function_where_clause.txt @@ -25,10 +25,11 @@ ROOT@[0; 29) IDENT@[18; 19) "T" COLON@[19; 20) WHITESPACE@[20; 21) - PATH@[21; 25) - PATH_SEGMENT@[21; 25) - NAME_REF@[21; 25) - IDENT@[21; 25) "Copy" + PATH_TYPE@[21; 25) + PATH@[21; 25) + PATH_SEGMENT@[21; 25) + NAME_REF@[21; 25) + IDENT@[21; 25) "Copy" WHITESPACE@[25; 26) BLOCK@[26; 28) L_CURLY@[26; 27) diff --git a/crates/libsyntax2/tests/data/parser/inline/0060_function_type_params.txt b/crates/libsyntax2/tests/data/parser/inline/0060_function_type_params.txt index 640a84355..b6fea5ab2 100644 --- a/crates/libsyntax2/tests/data/parser/inline/0060_function_type_params.txt +++ b/crates/libsyntax2/tests/data/parser/inline/0060_function_type_params.txt @@ -11,17 +11,19 @@ ROOT@[0; 28) IDENT@[7; 8) "T" COLON@[8; 9) WHITESPACE@[9; 10) - PATH@[10; 15) - PATH_SEGMENT@[10; 15) - NAME_REF@[10; 15) - IDENT@[10; 15) "Clone" - WHITESPACE@[15; 16) - PLUS@[16; 17) - WHITESPACE@[17; 18) - PATH@[18; 22) - PATH_SEGMENT@[18; 22) - NAME_REF@[18; 22) - IDENT@[18; 22) "Copy" + PATH_TYPE@[10; 22) + PATH@[10; 15) + PATH_SEGMENT@[10; 15) + NAME_REF@[10; 15) + IDENT@[10; 15) "Clone" + WHITESPACE@[15; 16) + PLUS@[16; 17) + WHITESPACE@[17; 18) + PATH_TYPE@[18; 22) + PATH@[18; 22) + PATH_SEGMENT@[18; 22) + NAME_REF@[18; 22) + IDENT@[18; 22) "Copy" R_ANGLE@[22; 23) PARAM_LIST@[23; 25) L_PAREN@[23; 24) diff --git a/crates/libsyntax2/tests/data/parser/inline/0063_impl_trait_type.txt b/crates/libsyntax2/tests/data/parser/inline/0063_impl_trait_type.txt index 4d54204f8..68fce58ee 100644 --- a/crates/libsyntax2/tests/data/parser/inline/0063_impl_trait_type.txt +++ b/crates/libsyntax2/tests/data/parser/inline/0063_impl_trait_type.txt @@ -10,30 +10,31 @@ ROOT@[0; 43) IMPL_TRAIT_TYPE@[9; 41) IMPL_KW@[9; 13) WHITESPACE@[13; 14) - PATH@[14; 36) - PATH_SEGMENT@[14; 36) - NAME_REF@[14; 22) - IDENT@[14; 22) "Iterator" - TYPE_ARG_LIST@[22; 36) - L_ANGLE@[22; 23) - ASSOC_TYPE_ARG@[23; 35) - NAME_REF@[23; 27) - IDENT@[23; 27) "Item" - EQ@[27; 28) - PATH_TYPE@[28; 35) - PATH@[28; 35) - PATH_SEGMENT@[28; 35) - NAME_REF@[28; 31) - IDENT@[28; 31) "Foo" - TYPE_ARG_LIST@[31; 35) - L_ANGLE@[31; 32) - LIFETIME_ARG@[32; 34) - LIFETIME@[32; 34) "'a" - R_ANGLE@[34; 35) - R_ANGLE@[35; 36) - WHITESPACE@[36; 37) - PLUS@[37; 38) - WHITESPACE@[38; 39) - LIFETIME@[39; 41) "'a" + PATH_TYPE@[14; 41) + PATH@[14; 36) + PATH_SEGMENT@[14; 36) + NAME_REF@[14; 22) + IDENT@[14; 22) "Iterator" + TYPE_ARG_LIST@[22; 36) + L_ANGLE@[22; 23) + ASSOC_TYPE_ARG@[23; 35) + NAME_REF@[23; 27) + IDENT@[23; 27) "Item" + EQ@[27; 28) + PATH_TYPE@[28; 35) + PATH@[28; 35) + PATH_SEGMENT@[28; 35) + NAME_REF@[28; 31) + IDENT@[28; 31) "Foo" + TYPE_ARG_LIST@[31; 35) + L_ANGLE@[31; 32) + LIFETIME_ARG@[32; 34) + LIFETIME@[32; 34) "'a" + R_ANGLE@[34; 35) + R_ANGLE@[35; 36) + WHITESPACE@[36; 37) + PLUS@[37; 38) + WHITESPACE@[38; 39) + LIFETIME@[39; 41) "'a" SEMI@[41; 42) WHITESPACE@[42; 43) diff --git a/crates/libsyntax2/tests/data/parser/inline/0097_param_list_opt_patterns.txt b/crates/libsyntax2/tests/data/parser/inline/0097_param_list_opt_patterns.txt index 289a899a9..39bab8dd2 100644 --- a/crates/libsyntax2/tests/data/parser/inline/0097_param_list_opt_patterns.txt +++ b/crates/libsyntax2/tests/data/parser/inline/0097_param_list_opt_patterns.txt @@ -11,28 +11,29 @@ ROOT@[0; 35) IDENT@[7; 8) "F" COLON@[8; 9) WHITESPACE@[9; 10) - PATH@[10; 29) - PATH_SEGMENT@[10; 29) - NAME_REF@[10; 15) - IDENT@[10; 15) "FnMut" - PARAM_LIST@[15; 29) - L_PAREN@[15; 16) - PARAM@[16; 28) - REFERENCE_TYPE@[16; 28) - AMP@[16; 17) - MUT_KW@[17; 20) - WHITESPACE@[20; 21) - PATH_TYPE@[21; 28) - PATH@[21; 28) - PATH_SEGMENT@[21; 28) - NAME_REF@[21; 24) - IDENT@[21; 24) "Foo" - TYPE_ARG_LIST@[24; 28) - L_ANGLE@[24; 25) - LIFETIME_ARG@[25; 27) - LIFETIME@[25; 27) "'a" - R_ANGLE@[27; 28) - R_PAREN@[28; 29) + PATH_TYPE@[10; 29) + PATH@[10; 29) + PATH_SEGMENT@[10; 29) + NAME_REF@[10; 15) + IDENT@[10; 15) "FnMut" + PARAM_LIST@[15; 29) + L_PAREN@[15; 16) + PARAM@[16; 28) + REFERENCE_TYPE@[16; 28) + AMP@[16; 17) + MUT_KW@[17; 20) + WHITESPACE@[20; 21) + PATH_TYPE@[21; 28) + PATH@[21; 28) + PATH_SEGMENT@[21; 28) + NAME_REF@[21; 24) + IDENT@[21; 24) "Foo" + TYPE_ARG_LIST@[24; 28) + L_ANGLE@[24; 25) + LIFETIME_ARG@[25; 27) + LIFETIME@[25; 27) "'a" + R_ANGLE@[27; 28) + R_PAREN@[28; 29) R_ANGLE@[29; 30) PARAM_LIST@[30; 32) L_PAREN@[30; 31) diff --git a/crates/libsyntax2/tests/data/parser/inline/0098_where_clause.txt b/crates/libsyntax2/tests/data/parser/inline/0098_where_clause.txt index 7642c0704..9fe803554 100644 --- a/crates/libsyntax2/tests/data/parser/inline/0098_where_clause.txt +++ b/crates/libsyntax2/tests/data/parser/inline/0098_where_clause.txt @@ -30,21 +30,23 @@ ROOT@[0; 87) IDENT@[34; 35) "T" COLON@[35; 36) WHITESPACE@[36; 37) - PATH@[37; 42) - PATH_SEGMENT@[37; 42) - NAME_REF@[37; 42) - IDENT@[37; 42) "Clone" - WHITESPACE@[42; 43) - PLUS@[43; 44) - WHITESPACE@[44; 45) - PATH@[45; 49) - PATH_SEGMENT@[45; 49) - NAME_REF@[45; 49) - IDENT@[45; 49) "Copy" - WHITESPACE@[49; 50) - PLUS@[50; 51) - WHITESPACE@[51; 52) - LIFETIME@[52; 59) "'static" + PATH_TYPE@[37; 59) + PATH@[37; 42) + PATH_SEGMENT@[37; 42) + NAME_REF@[37; 42) + IDENT@[37; 42) "Clone" + WHITESPACE@[42; 43) + PLUS@[43; 44) + WHITESPACE@[44; 45) + PATH_TYPE@[45; 59) + PATH@[45; 49) + PATH_SEGMENT@[45; 49) + NAME_REF@[45; 49) + IDENT@[45; 49) "Copy" + WHITESPACE@[49; 50) + PLUS@[50; 51) + WHITESPACE@[51; 52) + LIFETIME@[52; 59) "'static" COMMA@[59; 60) WHITESPACE@[60; 64) WHERE_PRED@[64; 82) diff --git a/crates/libsyntax2/tests/data/parser/inline/0100_dyn_trait_type.txt b/crates/libsyntax2/tests/data/parser/inline/0100_dyn_trait_type.txt index ca53c0b52..c81ae5545 100644 --- a/crates/libsyntax2/tests/data/parser/inline/0100_dyn_trait_type.txt +++ b/crates/libsyntax2/tests/data/parser/inline/0100_dyn_trait_type.txt @@ -10,30 +10,31 @@ ROOT@[0; 42) DYN_TRAIT_TYPE@[9; 40) DYN_KW@[9; 12) WHITESPACE@[12; 13) - PATH@[13; 35) - PATH_SEGMENT@[13; 35) - NAME_REF@[13; 21) - IDENT@[13; 21) "Iterator" - TYPE_ARG_LIST@[21; 35) - L_ANGLE@[21; 22) - ASSOC_TYPE_ARG@[22; 34) - NAME_REF@[22; 26) - IDENT@[22; 26) "Item" - EQ@[26; 27) - PATH_TYPE@[27; 34) - PATH@[27; 34) - PATH_SEGMENT@[27; 34) - NAME_REF@[27; 30) - IDENT@[27; 30) "Foo" - TYPE_ARG_LIST@[30; 34) - L_ANGLE@[30; 31) - LIFETIME_ARG@[31; 33) - LIFETIME@[31; 33) "'a" - R_ANGLE@[33; 34) - R_ANGLE@[34; 35) - WHITESPACE@[35; 36) - PLUS@[36; 37) - WHITESPACE@[37; 38) - LIFETIME@[38; 40) "'a" + PATH_TYPE@[13; 40) + PATH@[13; 35) + PATH_SEGMENT@[13; 35) + NAME_REF@[13; 21) + IDENT@[13; 21) "Iterator" + TYPE_ARG_LIST@[21; 35) + L_ANGLE@[21; 22) + ASSOC_TYPE_ARG@[22; 34) + NAME_REF@[22; 26) + IDENT@[22; 26) "Item" + EQ@[26; 27) + PATH_TYPE@[27; 34) + PATH@[27; 34) + PATH_SEGMENT@[27; 34) + NAME_REF@[27; 30) + IDENT@[27; 30) "Foo" + TYPE_ARG_LIST@[30; 34) + L_ANGLE@[30; 31) + LIFETIME_ARG@[31; 33) + LIFETIME@[31; 33) "'a" + R_ANGLE@[33; 34) + R_ANGLE@[34; 35) + WHITESPACE@[35; 36) + PLUS@[36; 37) + WHITESPACE@[37; 38) + LIFETIME@[38; 40) "'a" SEMI@[40; 41) WHITESPACE@[41; 42) diff --git a/crates/libsyntax2/tests/data/parser/ok/0001_struct_item.txt b/crates/libsyntax2/tests/data/parser/ok/0001_struct_item.txt index 90df3416a..aa2f1b712 100644 --- a/crates/libsyntax2/tests/data/parser/ok/0001_struct_item.txt +++ b/crates/libsyntax2/tests/data/parser/ok/0001_struct_item.txt @@ -11,10 +11,11 @@ ROOT@[0; 32) IDENT@[9; 10) "T" COLON@[10; 11) WHITESPACE@[11; 12) - PATH@[12; 16) - PATH_SEGMENT@[12; 16) - NAME_REF@[12; 16) - IDENT@[12; 16) "Copy" + PATH_TYPE@[12; 16) + PATH@[12; 16) + PATH_SEGMENT@[12; 16) + NAME_REF@[12; 16) + IDENT@[12; 16) "Copy" R_ANGLE@[16; 17) WHITESPACE@[17; 18) NAMED_FIELD_DEF_LIST@[18; 31) diff --git a/crates/libsyntax2/tests/data/parser/ok/0020_type_param_bounds.txt b/crates/libsyntax2/tests/data/parser/ok/0020_type_param_bounds.txt index eb01dc8f1..ac1a58e9a 100644 --- a/crates/libsyntax2/tests/data/parser/ok/0020_type_param_bounds.txt +++ b/crates/libsyntax2/tests/data/parser/ok/0020_type_param_bounds.txt @@ -102,10 +102,11 @@ ROOT@[0; 200) WHITESPACE@[106; 107) PLUS@[107; 108) WHITESPACE@[108; 109) - PATH@[109; 114) - PATH_SEGMENT@[109; 114) - NAME_REF@[109; 114) - IDENT@[109; 114) "Clone" + PATH_TYPE@[109; 114) + PATH@[109; 114) + PATH_SEGMENT@[109; 114) + NAME_REF@[109; 114) + IDENT@[109; 114) "Clone" R_ANGLE@[114; 115) SEMI@[115; 116) WHITESPACE@[116; 117) @@ -121,17 +122,19 @@ ROOT@[0; 200) IDENT@[126; 127) "T" COLON@[127; 128) WHITESPACE@[128; 129) - PATH@[129; 134) - PATH_SEGMENT@[129; 134) - NAME_REF@[129; 134) - IDENT@[129; 134) "Clone" - WHITESPACE@[134; 135) - PLUS@[135; 136) - WHITESPACE@[136; 137) - PATH@[137; 141) - PATH_SEGMENT@[137; 141) - NAME_REF@[137; 141) - IDENT@[137; 141) "Copy" + PATH_TYPE@[129; 141) + PATH@[129; 134) + PATH_SEGMENT@[129; 134) + NAME_REF@[129; 134) + IDENT@[129; 134) "Clone" + WHITESPACE@[134; 135) + PLUS@[135; 136) + WHITESPACE@[136; 137) + PATH_TYPE@[137; 141) + PATH@[137; 141) + PATH_SEGMENT@[137; 141) + NAME_REF@[137; 141) + IDENT@[137; 141) "Copy" R_ANGLE@[141; 142) SEMI@[142; 143) WHITESPACE@[143; 144) @@ -147,26 +150,28 @@ ROOT@[0; 200) IDENT@[153; 154) "T" COLON@[154; 155) WHITESPACE@[155; 156) - PATH@[156; 161) - PATH_SEGMENT@[156; 161) - COLONCOLON@[156; 158) - NAME_REF@[158; 161) - IDENT@[158; 161) "Foo" - WHITESPACE@[161; 162) - PLUS@[162; 163) - WHITESPACE@[163; 164) - PATH@[164; 173) - PATH@[164; 168) - PATH_SEGMENT@[164; 168) - SELF_KW@[164; 168) - COLONCOLON@[168; 170) - PATH_SEGMENT@[170; 173) - NAME_REF@[170; 173) - IDENT@[170; 173) "Bar" - WHITESPACE@[173; 174) - PLUS@[174; 175) - WHITESPACE@[175; 176) - LIFETIME@[176; 178) "'a" + PATH_TYPE@[156; 178) + PATH@[156; 161) + PATH_SEGMENT@[156; 161) + COLONCOLON@[156; 158) + NAME_REF@[158; 161) + IDENT@[158; 161) "Foo" + WHITESPACE@[161; 162) + PLUS@[162; 163) + WHITESPACE@[163; 164) + PATH_TYPE@[164; 178) + PATH@[164; 173) + PATH@[164; 168) + PATH_SEGMENT@[164; 168) + SELF_KW@[164; 168) + COLONCOLON@[168; 170) + PATH_SEGMENT@[170; 173) + NAME_REF@[170; 173) + IDENT@[170; 173) "Bar" + WHITESPACE@[173; 174) + PLUS@[174; 175) + WHITESPACE@[175; 176) + LIFETIME@[176; 178) "'a" R_ANGLE@[178; 179) SEMI@[179; 180) WHITESPACE@[180; 181) diff --git a/crates/libsyntax2/tests/data/parser/ok/0032_where_for.rs b/crates/libsyntax2/tests/data/parser/ok/0032_where_for.rs new file mode 100644 index 000000000..588170fbe --- /dev/null +++ b/crates/libsyntax2/tests/data/parser/ok/0032_where_for.rs @@ -0,0 +1,4 @@ +fn test_serialization() +where + SER: Serialize + for<'de> Deserialize<'de> + PartialEq + std::fmt::Debug, +{} diff --git a/crates/libsyntax2/tests/data/parser/ok/0032_where_for.txt b/crates/libsyntax2/tests/data/parser/ok/0032_where_for.txt new file mode 100644 index 000000000..e3b9386a8 --- /dev/null +++ b/crates/libsyntax2/tests/data/parser/ok/0032_where_for.txt @@ -0,0 +1,85 @@ +ROOT@[0; 116) + FN_DEF@[0; 115) + FN_KW@[0; 2) + WHITESPACE@[2; 3) + NAME@[3; 21) + IDENT@[3; 21) "test_serialization" + TYPE_PARAM_LIST@[21; 26) + L_ANGLE@[21; 22) + TYPE_PARAM@[22; 25) + NAME@[22; 25) + IDENT@[22; 25) "SER" + R_ANGLE@[25; 26) + PARAM_LIST@[26; 28) + L_PAREN@[26; 27) + R_PAREN@[27; 28) + WHITESPACE@[28; 29) + WHERE_CLAUSE@[29; 112) + WHERE_KW@[29; 34) + WHITESPACE@[34; 39) + WHERE_PRED@[39; 111) + PATH_TYPE@[39; 42) + PATH@[39; 42) + PATH_SEGMENT@[39; 42) + NAME_REF@[39; 42) + IDENT@[39; 42) "SER" + COLON@[42; 43) + WHITESPACE@[43; 44) + PATH_TYPE@[44; 111) + PATH@[44; 53) + PATH_SEGMENT@[44; 53) + NAME_REF@[44; 53) + IDENT@[44; 53) "Serialize" + WHITESPACE@[53; 54) + PLUS@[54; 55) + WHITESPACE@[55; 56) + FOR_TYPE@[56; 81) + FOR_KW@[56; 59) + TYPE_PARAM_LIST@[59; 64) + L_ANGLE@[59; 60) + LIFETIME_PARAM@[60; 63) + LIFETIME@[60; 63) "'de" + R_ANGLE@[63; 64) + WHITESPACE@[64; 65) + PATH_TYPE@[65; 81) + PATH@[65; 81) + PATH_SEGMENT@[65; 81) + NAME_REF@[65; 76) + IDENT@[65; 76) "Deserialize" + TYPE_ARG_LIST@[76; 81) + L_ANGLE@[76; 77) + LIFETIME_ARG@[77; 80) + LIFETIME@[77; 80) "'de" + R_ANGLE@[80; 81) + WHITESPACE@[81; 82) + PLUS@[82; 83) + WHITESPACE@[83; 84) + PATH_TYPE@[84; 111) + PATH@[84; 93) + PATH_SEGMENT@[84; 93) + NAME_REF@[84; 93) + IDENT@[84; 93) "PartialEq" + WHITESPACE@[93; 94) + PLUS@[94; 95) + WHITESPACE@[95; 96) + PATH_TYPE@[96; 111) + PATH@[96; 111) + PATH@[96; 104) + PATH@[96; 99) + PATH_SEGMENT@[96; 99) + NAME_REF@[96; 99) + IDENT@[96; 99) "std" + COLONCOLON@[99; 101) + PATH_SEGMENT@[101; 104) + NAME_REF@[101; 104) + IDENT@[101; 104) "fmt" + COLONCOLON@[104; 106) + PATH_SEGMENT@[106; 111) + NAME_REF@[106; 111) + IDENT@[106; 111) "Debug" + COMMA@[111; 112) + WHITESPACE@[112; 113) + BLOCK@[113; 115) + L_CURLY@[113; 114) + R_CURLY@[114; 115) + WHITESPACE@[115; 116) -- cgit v1.2.3