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/0041_trait_item.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/0041_trait_item.txt')
-rw-r--r-- | crates/ra_syntax/tests/data/parser/inline/ok/0041_trait_item.txt | 108 |
1 files changed, 92 insertions, 16 deletions
diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0041_trait_item.txt b/crates/ra_syntax/tests/data/parser/inline/ok/0041_trait_item.txt index 333a737ec..56cfea5b3 100644 --- a/crates/ra_syntax/tests/data/parser/inline/ok/0041_trait_item.txt +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0041_trait_item.txt | |||
@@ -1,4 +1,4 @@ | |||
1 | SOURCE_FILE@[0; 42) | 1 | SOURCE_FILE@[0; 101) |
2 | TRAIT_DEF@[0; 41) | 2 | TRAIT_DEF@[0; 41) |
3 | TRAIT_KW@[0; 5) | 3 | TRAIT_KW@[0; 5) |
4 | WHITESPACE@[5; 6) | 4 | WHITESPACE@[5; 6) |
@@ -12,19 +12,22 @@ SOURCE_FILE@[0; 42) | |||
12 | R_ANGLE@[9; 10) | 12 | R_ANGLE@[9; 10) |
13 | COLON@[10; 11) | 13 | COLON@[10; 11) |
14 | WHITESPACE@[11; 12) | 14 | WHITESPACE@[11; 12) |
15 | PATH_TYPE@[12; 24) | 15 | TYPE_BOUND_LIST@[12; 24) |
16 | PATH@[12; 16) | 16 | TYPE_BOUND@[12; 16) |
17 | PATH_SEGMENT@[12; 16) | 17 | PATH_TYPE@[12; 16) |
18 | NAME_REF@[12; 16) | 18 | PATH@[12; 16) |
19 | IDENT@[12; 16) "Hash" | 19 | PATH_SEGMENT@[12; 16) |
20 | NAME_REF@[12; 16) | ||
21 | IDENT@[12; 16) "Hash" | ||
20 | WHITESPACE@[16; 17) | 22 | WHITESPACE@[16; 17) |
21 | PLUS@[17; 18) | 23 | PLUS@[17; 18) |
22 | WHITESPACE@[18; 19) | 24 | WHITESPACE@[18; 19) |
23 | PATH_TYPE@[19; 24) | 25 | TYPE_BOUND@[19; 24) |
24 | PATH@[19; 24) | 26 | PATH_TYPE@[19; 24) |
25 | PATH_SEGMENT@[19; 24) | 27 | PATH@[19; 24) |
26 | NAME_REF@[19; 24) | 28 | PATH_SEGMENT@[19; 24) |
27 | IDENT@[19; 24) "Clone" | 29 | NAME_REF@[19; 24) |
30 | IDENT@[19; 24) "Clone" | ||
28 | WHITESPACE@[24; 25) | 31 | WHITESPACE@[24; 25) |
29 | WHERE_CLAUSE@[25; 38) | 32 | WHERE_CLAUSE@[25; 38) |
30 | WHERE_KW@[25; 30) | 33 | WHERE_KW@[25; 30) |
@@ -37,13 +40,86 @@ SOURCE_FILE@[0; 42) | |||
37 | IDENT@[31; 32) "U" | 40 | IDENT@[31; 32) "U" |
38 | COLON@[32; 33) | 41 | COLON@[32; 33) |
39 | WHITESPACE@[33; 34) | 42 | WHITESPACE@[33; 34) |
40 | PATH_TYPE@[34; 38) | 43 | TYPE_BOUND_LIST@[34; 38) |
41 | PATH@[34; 38) | 44 | TYPE_BOUND@[34; 38) |
42 | PATH_SEGMENT@[34; 38) | 45 | PATH_TYPE@[34; 38) |
43 | NAME_REF@[34; 38) | 46 | PATH@[34; 38) |
44 | IDENT@[34; 38) "Copy" | 47 | PATH_SEGMENT@[34; 38) |
48 | NAME_REF@[34; 38) | ||
49 | IDENT@[34; 38) "Copy" | ||
45 | WHITESPACE@[38; 39) | 50 | WHITESPACE@[38; 39) |
46 | ITEM_LIST@[39; 41) | 51 | ITEM_LIST@[39; 41) |
47 | L_CURLY@[39; 40) | 52 | L_CURLY@[39; 40) |
48 | R_CURLY@[40; 41) | 53 | R_CURLY@[40; 41) |
49 | WHITESPACE@[41; 42) | 54 | WHITESPACE@[41; 42) |
55 | TRAIT_DEF@[42; 100) | ||
56 | TRAIT_KW@[42; 47) | ||
57 | WHITESPACE@[47; 48) | ||
58 | NAME@[48; 49) | ||
59 | IDENT@[48; 49) "X" | ||
60 | TYPE_PARAM_LIST@[49; 69) | ||
61 | L_ANGLE@[49; 50) | ||
62 | TYPE_PARAM@[50; 68) | ||
63 | NAME@[50; 51) | ||
64 | IDENT@[50; 51) "U" | ||
65 | COLON@[51; 52) | ||
66 | WHITESPACE@[52; 53) | ||
67 | TYPE_BOUND_LIST@[53; 68) | ||
68 | TYPE_BOUND@[53; 58) | ||
69 | PATH_TYPE@[53; 58) | ||
70 | PATH@[53; 58) | ||
71 | PATH_SEGMENT@[53; 58) | ||
72 | NAME_REF@[53; 58) | ||
73 | IDENT@[53; 58) "Debug" | ||
74 | WHITESPACE@[58; 59) | ||
75 | PLUS@[59; 60) | ||
76 | WHITESPACE@[60; 61) | ||
77 | TYPE_BOUND@[61; 68) | ||
78 | PATH_TYPE@[61; 68) | ||
79 | PATH@[61; 68) | ||
80 | PATH_SEGMENT@[61; 68) | ||
81 | NAME_REF@[61; 68) | ||
82 | IDENT@[61; 68) "Display" | ||
83 | R_ANGLE@[68; 69) | ||
84 | COLON@[69; 70) | ||
85 | WHITESPACE@[70; 71) | ||
86 | TYPE_BOUND_LIST@[71; 83) | ||
87 | TYPE_BOUND@[71; 75) | ||
88 | PATH_TYPE@[71; 75) | ||
89 | PATH@[71; 75) | ||
90 | PATH_SEGMENT@[71; 75) | ||
91 | NAME_REF@[71; 75) | ||
92 | IDENT@[71; 75) "Hash" | ||
93 | WHITESPACE@[75; 76) | ||
94 | PLUS@[76; 77) | ||
95 | WHITESPACE@[77; 78) | ||
96 | TYPE_BOUND@[78; 83) | ||
97 | PATH_TYPE@[78; 83) | ||
98 | PATH@[78; 83) | ||
99 | PATH_SEGMENT@[78; 83) | ||
100 | NAME_REF@[78; 83) | ||
101 | IDENT@[78; 83) "Clone" | ||
102 | WHITESPACE@[83; 84) | ||
103 | WHERE_CLAUSE@[84; 97) | ||
104 | WHERE_KW@[84; 89) | ||
105 | WHITESPACE@[89; 90) | ||
106 | WHERE_PRED@[90; 97) | ||
107 | PATH_TYPE@[90; 91) | ||
108 | PATH@[90; 91) | ||
109 | PATH_SEGMENT@[90; 91) | ||
110 | NAME_REF@[90; 91) | ||
111 | IDENT@[90; 91) "U" | ||
112 | COLON@[91; 92) | ||
113 | WHITESPACE@[92; 93) | ||
114 | TYPE_BOUND_LIST@[93; 97) | ||
115 | TYPE_BOUND@[93; 97) | ||
116 | PATH_TYPE@[93; 97) | ||
117 | PATH@[93; 97) | ||
118 | PATH_SEGMENT@[93; 97) | ||
119 | NAME_REF@[93; 97) | ||
120 | IDENT@[93; 97) "Copy" | ||
121 | WHITESPACE@[97; 98) | ||
122 | ITEM_LIST@[98; 100) | ||
123 | L_CURLY@[98; 99) | ||
124 | R_CURLY@[99; 100) | ||
125 | WHITESPACE@[100; 101) | ||