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/0007_type_param_bounds.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/0007_type_param_bounds.txt')
-rw-r--r-- | crates/ra_syntax/tests/data/parser/inline/ok/0007_type_param_bounds.txt | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0007_type_param_bounds.txt b/crates/ra_syntax/tests/data/parser/inline/ok/0007_type_param_bounds.txt index 745cf8798..81479d2ea 100644 --- a/crates/ra_syntax/tests/data/parser/inline/ok/0007_type_param_bounds.txt +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0007_type_param_bounds.txt | |||
@@ -11,26 +11,30 @@ SOURCE_FILE@[0; 35) | |||
11 | IDENT@[9; 10) "T" | 11 | IDENT@[9; 10) "T" |
12 | COLON@[10; 11) | 12 | COLON@[10; 11) |
13 | WHITESPACE@[11; 12) | 13 | WHITESPACE@[11; 12) |
14 | LIFETIME@[12; 14) "'a" | 14 | TYPE_BOUND_LIST@[12; 32) |
15 | WHITESPACE@[14; 15) | 15 | TYPE_BOUND@[12; 14) |
16 | PLUS@[15; 16) | 16 | LIFETIME@[12; 14) "'a" |
17 | WHITESPACE@[16; 17) | 17 | WHITESPACE@[14; 15) |
18 | QUESTION@[17; 18) | 18 | PLUS@[15; 16) |
19 | PATH_TYPE@[18; 32) | 19 | WHITESPACE@[16; 17) |
20 | PATH@[18; 23) | 20 | TYPE_BOUND@[17; 23) |
21 | PATH_SEGMENT@[18; 23) | 21 | QUESTION@[17; 18) |
22 | NAME_REF@[18; 23) | 22 | PATH_TYPE@[18; 23) |
23 | IDENT@[18; 23) "Sized" | 23 | PATH@[18; 23) |
24 | PATH_SEGMENT@[18; 23) | ||
25 | NAME_REF@[18; 23) | ||
26 | IDENT@[18; 23) "Sized" | ||
24 | WHITESPACE@[23; 24) | 27 | WHITESPACE@[23; 24) |
25 | PLUS@[24; 25) | 28 | PLUS@[24; 25) |
26 | WHITESPACE@[25; 26) | 29 | WHITESPACE@[25; 26) |
27 | L_PAREN@[26; 27) | 30 | TYPE_BOUND@[26; 32) |
28 | PATH_TYPE@[27; 31) | 31 | L_PAREN@[26; 27) |
29 | PATH@[27; 31) | 32 | PATH_TYPE@[27; 31) |
30 | PATH_SEGMENT@[27; 31) | 33 | PATH@[27; 31) |
31 | NAME_REF@[27; 31) | 34 | PATH_SEGMENT@[27; 31) |
32 | IDENT@[27; 31) "Copy" | 35 | NAME_REF@[27; 31) |
33 | R_PAREN@[31; 32) | 36 | IDENT@[27; 31) "Copy" |
37 | R_PAREN@[31; 32) | ||
34 | R_ANGLE@[32; 33) | 38 | R_ANGLE@[32; 33) |
35 | SEMI@[33; 34) | 39 | SEMI@[33; 34) |
36 | WHITESPACE@[34; 35) | 40 | WHITESPACE@[34; 35) |