diff options
author | bors[bot] <bors[bot]@users.noreply.github.com> | 2019-03-31 10:11:48 +0100 |
---|---|---|
committer | bors[bot] <bors[bot]@users.noreply.github.com> | 2019-03-31 10:11:48 +0100 |
commit | c5ca49678f129045e59438df279829902034ec71 (patch) | |
tree | 3fd54185e0c064fbd6f718ac345064ce9c559efb /crates/ra_syntax/tests/data/parser/inline/ok/0056_where_clause.txt | |
parent | 23dd53eb35ff50508d0c0fc5878a55754b12d381 (diff) | |
parent | 55dcdb7d094f473c73f87ecf997b24f8e35f2a5e (diff) |
Merge #1077
1077: Improve parsing of type bounds r=matklad a=vipentti
This adds new TYPE_BOUND_LIST and TYPE_BOUND syntax kinds. These are now used when parsing type bounds. In addition parsing paths inside a bound now does not recursively parse paths, rather they are treated as separate bounds, separated by +.
Basically now the generic params `struct S<T: 'a + ?Sized + (Copy)>;` in will be parsed as
```
TYPE_PARAM_LIST@[8; 33)
L_ANGLE@[8; 9)
TYPE_PARAM@[9; 32)
NAME@[9; 10)
IDENT@[9; 10) "T"
COLON@[10; 11)
WHITESPACE@[11; 12)
TYPE_BOUND_LIST@[12; 32)
TYPE_BOUND@[12; 14)
LIFETIME@[12; 14) "'a"
WHITESPACE@[14; 15)
PLUS@[15; 16)
WHITESPACE@[16; 17)
TYPE_BOUND@[17; 23)
QUESTION@[17; 18)
PATH_TYPE@[18; 23)
PATH@[18; 23)
PATH_SEGMENT@[18; 23)
NAME_REF@[18; 23)
IDENT@[18; 23) "Sized"
WHITESPACE@[23; 24)
PLUS@[24; 25)
WHITESPACE@[25; 26)
TYPE_BOUND@[26; 32)
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)
```
Previously it was parsed, with the paths nested:
```
TYPE_PARAM_LIST@[8; 33)
L_ANGLE@[8; 9)
TYPE_PARAM@[9; 32)
NAME@[9; 10)
IDENT@[9; 10) "T"
COLON@[10; 11)
WHITESPACE@[11; 12)
LIFETIME@[12; 14) "'a"
WHITESPACE@[14; 15)
PLUS@[15; 16)
WHITESPACE@[16; 17)
QUESTION@[17; 18)
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)
```
Looking for feedback.
Co-authored-by: Ville Penttinen <[email protected]>
Diffstat (limited to 'crates/ra_syntax/tests/data/parser/inline/ok/0056_where_clause.txt')
-rw-r--r-- | crates/ra_syntax/tests/data/parser/inline/ok/0056_where_clause.txt | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0056_where_clause.txt b/crates/ra_syntax/tests/data/parser/inline/ok/0056_where_clause.txt index 68485dc0b..e04b61eb3 100644 --- a/crates/ra_syntax/tests/data/parser/inline/ok/0056_where_clause.txt +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0056_where_clause.txt | |||
@@ -30,22 +30,26 @@ SOURCE_FILE@[0; 116) | |||
30 | IDENT@[34; 35) "T" | 30 | IDENT@[34; 35) "T" |
31 | COLON@[35; 36) | 31 | COLON@[35; 36) |
32 | WHITESPACE@[36; 37) | 32 | WHITESPACE@[36; 37) |
33 | PATH_TYPE@[37; 59) | 33 | TYPE_BOUND_LIST@[37; 59) |
34 | PATH@[37; 42) | 34 | TYPE_BOUND@[37; 42) |
35 | PATH_SEGMENT@[37; 42) | 35 | PATH_TYPE@[37; 42) |
36 | NAME_REF@[37; 42) | 36 | PATH@[37; 42) |
37 | IDENT@[37; 42) "Clone" | 37 | PATH_SEGMENT@[37; 42) |
38 | NAME_REF@[37; 42) | ||
39 | IDENT@[37; 42) "Clone" | ||
38 | WHITESPACE@[42; 43) | 40 | WHITESPACE@[42; 43) |
39 | PLUS@[43; 44) | 41 | PLUS@[43; 44) |
40 | WHITESPACE@[44; 45) | 42 | WHITESPACE@[44; 45) |
41 | PATH_TYPE@[45; 59) | 43 | TYPE_BOUND@[45; 49) |
42 | PATH@[45; 49) | 44 | PATH_TYPE@[45; 49) |
43 | PATH_SEGMENT@[45; 49) | 45 | PATH@[45; 49) |
44 | NAME_REF@[45; 49) | 46 | PATH_SEGMENT@[45; 49) |
45 | IDENT@[45; 49) "Copy" | 47 | NAME_REF@[45; 49) |
46 | WHITESPACE@[49; 50) | 48 | IDENT@[45; 49) "Copy" |
47 | PLUS@[50; 51) | 49 | WHITESPACE@[49; 50) |
48 | WHITESPACE@[51; 52) | 50 | PLUS@[50; 51) |
51 | WHITESPACE@[51; 52) | ||
52 | TYPE_BOUND@[52; 59) | ||
49 | LIFETIME@[52; 59) "'static" | 53 | LIFETIME@[52; 59) "'static" |
50 | COMMA@[59; 60) | 54 | COMMA@[59; 60) |
51 | WHITESPACE@[60; 64) | 55 | WHITESPACE@[60; 64) |
@@ -62,7 +66,9 @@ SOURCE_FILE@[0; 116) | |||
62 | IDENT@[74; 78) "Item" | 66 | IDENT@[74; 78) "Item" |
63 | COLON@[78; 79) | 67 | COLON@[78; 79) |
64 | WHITESPACE@[79; 80) | 68 | WHITESPACE@[79; 80) |
65 | LIFETIME@[80; 82) "'a" | 69 | TYPE_BOUND_LIST@[80; 82) |
70 | TYPE_BOUND@[80; 82) | ||
71 | LIFETIME@[80; 82) "'a" | ||
66 | COMMA@[82; 83) | 72 | COMMA@[82; 83) |
67 | WHITESPACE@[83; 87) | 73 | WHITESPACE@[83; 87) |
68 | WHERE_PRED@[87; 112) | 74 | WHERE_PRED@[87; 112) |
@@ -91,7 +97,9 @@ SOURCE_FILE@[0; 116) | |||
91 | IDENT@[104; 108) "Item" | 97 | IDENT@[104; 108) "Item" |
92 | COLON@[108; 109) | 98 | COLON@[108; 109) |
93 | WHITESPACE@[109; 110) | 99 | WHITESPACE@[109; 110) |
94 | LIFETIME@[110; 112) "'a" | 100 | TYPE_BOUND_LIST@[110; 112) |
101 | TYPE_BOUND@[110; 112) | ||
102 | LIFETIME@[110; 112) "'a" | ||
95 | WHITESPACE@[112; 113) | 103 | WHITESPACE@[112; 113) |
96 | BLOCK@[113; 115) | 104 | BLOCK@[113; 115) |
97 | L_CURLY@[113; 114) | 105 | L_CURLY@[113; 114) |