Skip to content

Commit f96312b

Browse files
bors[bot]DJMcNab
andcommitted
Merge #486
486: Fix handling of where clauses in tuple structs r=matklad a=DJMcNab Originally reported by @max-frai on discord. As I was writing this, I was wondering if there's any way we can compare our test suite against libsyntax (i.e. check that it similarly fails/succeeds). Any ideas? Co-authored-by: DJMcNab <[email protected]>
2 parents 1a7a68d + afdb569 commit f96312b

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed

crates/ra_syntax/src/grammar/items/nominal.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ pub(super) fn struct_def(p: &mut Parser, kind: SyntaxKind) {
2929
L_CURLY => named_field_def_list(p),
3030
L_PAREN if kind == STRUCT_KW => {
3131
pos_field_list(p);
32+
// test tuple_struct_where
33+
// struct Test<T>(T) where T: Clone;
34+
// struct Test<T>(T);
35+
type_params::opt_where_clause(p);
3236
p.expect(SEMI);
3337
}
3438
_ if kind == STRUCT_KW => {
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
struct Test<T>(T) where T: Clone;
2+
struct Test<T>(T);
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
SOURCE_FILE@[0; 53)
2+
STRUCT_DEF@[0; 33)
3+
STRUCT_KW@[0; 6)
4+
WHITESPACE@[6; 7)
5+
NAME@[7; 11)
6+
IDENT@[7; 11) "Test"
7+
TYPE_PARAM_LIST@[11; 14)
8+
L_ANGLE@[11; 12)
9+
TYPE_PARAM@[12; 13)
10+
NAME@[12; 13)
11+
IDENT@[12; 13) "T"
12+
R_ANGLE@[13; 14)
13+
POS_FIELD_LIST@[14; 17)
14+
L_PAREN@[14; 15)
15+
POS_FIELD@[15; 16)
16+
PATH_TYPE@[15; 16)
17+
PATH@[15; 16)
18+
PATH_SEGMENT@[15; 16)
19+
NAME_REF@[15; 16)
20+
IDENT@[15; 16) "T"
21+
R_PAREN@[16; 17)
22+
WHITESPACE@[17; 18)
23+
WHERE_CLAUSE@[18; 32)
24+
WHERE_KW@[18; 23)
25+
WHITESPACE@[23; 24)
26+
WHERE_PRED@[24; 32)
27+
PATH_TYPE@[24; 25)
28+
PATH@[24; 25)
29+
PATH_SEGMENT@[24; 25)
30+
NAME_REF@[24; 25)
31+
IDENT@[24; 25) "T"
32+
COLON@[25; 26)
33+
WHITESPACE@[26; 27)
34+
PATH_TYPE@[27; 32)
35+
PATH@[27; 32)
36+
PATH_SEGMENT@[27; 32)
37+
NAME_REF@[27; 32)
38+
IDENT@[27; 32) "Clone"
39+
SEMI@[32; 33)
40+
WHITESPACE@[33; 34)
41+
STRUCT_DEF@[34; 52)
42+
STRUCT_KW@[34; 40)
43+
WHITESPACE@[40; 41)
44+
NAME@[41; 45)
45+
IDENT@[41; 45) "Test"
46+
TYPE_PARAM_LIST@[45; 48)
47+
L_ANGLE@[45; 46)
48+
TYPE_PARAM@[46; 47)
49+
NAME@[46; 47)
50+
IDENT@[46; 47) "T"
51+
R_ANGLE@[47; 48)
52+
POS_FIELD_LIST@[48; 51)
53+
L_PAREN@[48; 49)
54+
POS_FIELD@[49; 50)
55+
PATH_TYPE@[49; 50)
56+
PATH@[49; 50)
57+
PATH_SEGMENT@[49; 50)
58+
NAME_REF@[49; 50)
59+
IDENT@[49; 50) "T"
60+
R_PAREN@[50; 51)
61+
SEMI@[51; 52)
62+
WHITESPACE@[52; 53)

0 commit comments

Comments
 (0)