aboutsummaryrefslogtreecommitdiff
path: root/crates/libsyntax2/tests/data/parser/ok
diff options
context:
space:
mode:
Diffstat (limited to 'crates/libsyntax2/tests/data/parser/ok')
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0000_empty.rs0
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0000_empty.txt1
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0001_struct_item.rs3
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0001_struct_item.txt10
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0002_struct_item_field.rs3
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0002_struct_item_field.txt21
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0004_file_shebang.rs1
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0004_file_shebang.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0005_fn_item.rs2
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0005_fn_item.txt15
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0006_inner_attributes.rs10
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0006_inner_attributes.txt176
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0007_extern_crate.rs2
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0007_extern_crate.txt25
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0008_mod_item.rs17
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0008_mod_item.txt85
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0009_use_item.rs2
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0009_use_item.txt21
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0010_use_path_segments.rs2
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0010_use_path_segments.txt42
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0011_outer_attribute.rs3
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0011_outer_attribute.txt32
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0012_visibility.rs5
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0012_visibility.txt102
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0013_use_path_self_super.rs3
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0013_use_path_self_super.txt57
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0014_use_tree.rs7
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0014_use_tree.txt91
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0015_use_tree.rs2
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0015_use_tree.txt64
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0016_struct_flavors.rs10
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0016_struct_flavors.txt89
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0017_attr_trailing_comma.rs2
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0017_attr_trailing_comma.txt26
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0018_struct_type_params.rs17
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0018_struct_type_params.txt255
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0019_enums.rs25
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0019_enums.txt146
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0020_type_param_bounds.rs9
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0020_type_param_bounds.txt193
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0021_extern_fn.rs8
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0021_extern_fn.txt56
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0022_empty_extern_block.rs5
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0022_empty_extern_block.txt19
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0023_static_items.rs2
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0023_static_items.txt41
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0024_const_item.rs2
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0024_const_item.txt41
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0025_extern_fn_in_block.rs3
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0025_extern_fn_in_block.txt31
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0026_const_fn_in_block.rs3
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0026_const_fn_in_block.txt30
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0027_unsafe_fn_in_block.rs4
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0027_unsafe_fn_in_block.txt40
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0028_operator_binding_power.rs14
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0028_operator_binding_power.txt185
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0029_range_forms.rs6
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0029_range_forms.txt83
58 files changed, 2151 insertions, 0 deletions
diff --git a/crates/libsyntax2/tests/data/parser/ok/0000_empty.rs b/crates/libsyntax2/tests/data/parser/ok/0000_empty.rs
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0000_empty.rs
diff --git a/crates/libsyntax2/tests/data/parser/ok/0000_empty.txt b/crates/libsyntax2/tests/data/parser/ok/0000_empty.txt
new file mode 100644
index 000000000..54be3e7bc
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0000_empty.txt
@@ -0,0 +1 @@
FILE@[0; 0)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0001_struct_item.rs b/crates/libsyntax2/tests/data/parser/ok/0001_struct_item.rs
new file mode 100644
index 000000000..d3a8c1d23
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0001_struct_item.rs
@@ -0,0 +1,3 @@
1struct S {
2
3} \ No newline at end of file
diff --git a/crates/libsyntax2/tests/data/parser/ok/0001_struct_item.txt b/crates/libsyntax2/tests/data/parser/ok/0001_struct_item.txt
new file mode 100644
index 000000000..3d5b5cb7f
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0001_struct_item.txt
@@ -0,0 +1,10 @@
1FILE@[0; 13)
2 STRUCT_ITEM@[0; 13)
3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7)
5 NAME@[7; 8)
6 IDENT@[7; 8) "S"
7 WHITESPACE@[8; 9)
8 L_CURLY@[9; 10)
9 WHITESPACE@[10; 12)
10 R_CURLY@[12; 13)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0002_struct_item_field.rs b/crates/libsyntax2/tests/data/parser/ok/0002_struct_item_field.rs
new file mode 100644
index 000000000..cc3866d25
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0002_struct_item_field.rs
@@ -0,0 +1,3 @@
1struct S {
2 foo: u32
3} \ No newline at end of file
diff --git a/crates/libsyntax2/tests/data/parser/ok/0002_struct_item_field.txt b/crates/libsyntax2/tests/data/parser/ok/0002_struct_item_field.txt
new file mode 100644
index 000000000..1129ce39e
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0002_struct_item_field.txt
@@ -0,0 +1,21 @@
1FILE@[0; 25)
2 STRUCT_ITEM@[0; 25)
3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7)
5 NAME@[7; 8)
6 IDENT@[7; 8) "S"
7 WHITESPACE@[8; 9)
8 L_CURLY@[9; 10)
9 WHITESPACE@[10; 15)
10 NAMED_FIELD@[15; 23)
11 NAME@[15; 18)
12 IDENT@[15; 18) "foo"
13 COLON@[18; 19)
14 WHITESPACE@[19; 20)
15 PATH_TYPE@[20; 23)
16 PATH@[20; 23)
17 PATH_SEGMENT@[20; 23)
18 NAME_REF@[20; 23)
19 IDENT@[20; 23) "u32"
20 WHITESPACE@[23; 24)
21 R_CURLY@[24; 25)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0004_file_shebang.rs b/crates/libsyntax2/tests/data/parser/ok/0004_file_shebang.rs
new file mode 100644
index 000000000..53dc9e617
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0004_file_shebang.rs
@@ -0,0 +1 @@
#!/use/bin/env rusti \ No newline at end of file
diff --git a/crates/libsyntax2/tests/data/parser/ok/0004_file_shebang.txt b/crates/libsyntax2/tests/data/parser/ok/0004_file_shebang.txt
new file mode 100644
index 000000000..33055cf3d
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0004_file_shebang.txt
@@ -0,0 +1,2 @@
1FILE@[0; 20)
2 SHEBANG@[0; 20)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0005_fn_item.rs b/crates/libsyntax2/tests/data/parser/ok/0005_fn_item.rs
new file mode 100644
index 000000000..03210551c
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0005_fn_item.rs
@@ -0,0 +1,2 @@
1fn foo() {
2}
diff --git a/crates/libsyntax2/tests/data/parser/ok/0005_fn_item.txt b/crates/libsyntax2/tests/data/parser/ok/0005_fn_item.txt
new file mode 100644
index 000000000..4ab93d408
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0005_fn_item.txt
@@ -0,0 +1,15 @@
1FILE@[0; 13)
2 FUNCTION@[0; 12)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 6)
6 IDENT@[3; 6) "foo"
7 PARAM_LIST@[6; 8)
8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 12)
12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 11)
14 R_CURLY@[11; 12)
15 WHITESPACE@[12; 13)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0006_inner_attributes.rs b/crates/libsyntax2/tests/data/parser/ok/0006_inner_attributes.rs
new file mode 100644
index 000000000..e81f8b1e8
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0006_inner_attributes.rs
@@ -0,0 +1,10 @@
1#![attr]
2#![attr(true)]
3#![attr(ident)]
4#![attr(ident, 100, true, "true", ident = 100, ident = "hello", ident(100))]
5#![attr(100)]
6#![attr(enabled = true)]
7#![enabled(true)]
8#![attr("hello")]
9#![repr(C, align = 4)]
10#![repr(C, align(4))] \ No newline at end of file
diff --git a/crates/libsyntax2/tests/data/parser/ok/0006_inner_attributes.txt b/crates/libsyntax2/tests/data/parser/ok/0006_inner_attributes.txt
new file mode 100644
index 000000000..562c8d917
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0006_inner_attributes.txt
@@ -0,0 +1,176 @@
1FILE@[0; 236)
2 ATTR@[0; 8)
3 POUND@[0; 1)
4 EXCL@[1; 2)
5 L_BRACK@[2; 3)
6 META_ITEM@[3; 7)
7 IDENT@[3; 7) "attr"
8 R_BRACK@[7; 8)
9 WHITESPACE@[8; 9)
10 ATTR@[9; 23)
11 POUND@[9; 10)
12 EXCL@[10; 11)
13 L_BRACK@[11; 12)
14 META_ITEM@[12; 22)
15 IDENT@[12; 16) "attr"
16 L_PAREN@[16; 17)
17 LITERAL@[17; 21)
18 TRUE_KW@[17; 21)
19 R_PAREN@[21; 22)
20 R_BRACK@[22; 23)
21 WHITESPACE@[23; 24)
22 ATTR@[24; 39)
23 POUND@[24; 25)
24 EXCL@[25; 26)
25 L_BRACK@[26; 27)
26 META_ITEM@[27; 38)
27 IDENT@[27; 31) "attr"
28 L_PAREN@[31; 32)
29 META_ITEM@[32; 37)
30 IDENT@[32; 37) "ident"
31 R_PAREN@[37; 38)
32 R_BRACK@[38; 39)
33 WHITESPACE@[39; 40)
34 ATTR@[40; 116)
35 POUND@[40; 41)
36 EXCL@[41; 42)
37 L_BRACK@[42; 43)
38 META_ITEM@[43; 115)
39 IDENT@[43; 47) "attr"
40 L_PAREN@[47; 48)
41 META_ITEM@[48; 53)
42 IDENT@[48; 53) "ident"
43 COMMA@[53; 54)
44 WHITESPACE@[54; 55)
45 LITERAL@[55; 58)
46 INT_NUMBER@[55; 58) "100"
47 COMMA@[58; 59)
48 WHITESPACE@[59; 60)
49 LITERAL@[60; 64)
50 TRUE_KW@[60; 64)
51 COMMA@[64; 65)
52 WHITESPACE@[65; 66)
53 LITERAL@[66; 72)
54 STRING@[66; 72)
55 COMMA@[72; 73)
56 WHITESPACE@[73; 74)
57 META_ITEM@[74; 85)
58 IDENT@[74; 79) "ident"
59 WHITESPACE@[79; 80)
60 EQ@[80; 81)
61 WHITESPACE@[81; 82)
62 LITERAL@[82; 85)
63 INT_NUMBER@[82; 85) "100"
64 COMMA@[85; 86)
65 WHITESPACE@[86; 87)
66 META_ITEM@[87; 102)
67 IDENT@[87; 92) "ident"
68 WHITESPACE@[92; 93)
69 EQ@[93; 94)
70 WHITESPACE@[94; 95)
71 LITERAL@[95; 102)
72 STRING@[95; 102)
73 COMMA@[102; 103)
74 WHITESPACE@[103; 104)
75 META_ITEM@[104; 114)
76 IDENT@[104; 109) "ident"
77 L_PAREN@[109; 110)
78 LITERAL@[110; 113)
79 INT_NUMBER@[110; 113) "100"
80 R_PAREN@[113; 114)
81 R_PAREN@[114; 115)
82 R_BRACK@[115; 116)
83 WHITESPACE@[116; 117)
84 ATTR@[117; 130)
85 POUND@[117; 118)
86 EXCL@[118; 119)
87 L_BRACK@[119; 120)
88 META_ITEM@[120; 129)
89 IDENT@[120; 124) "attr"
90 L_PAREN@[124; 125)
91 LITERAL@[125; 128)
92 INT_NUMBER@[125; 128) "100"
93 R_PAREN@[128; 129)
94 R_BRACK@[129; 130)
95 WHITESPACE@[130; 131)
96 ATTR@[131; 155)
97 POUND@[131; 132)
98 EXCL@[132; 133)
99 L_BRACK@[133; 134)
100 META_ITEM@[134; 154)
101 IDENT@[134; 138) "attr"
102 L_PAREN@[138; 139)
103 META_ITEM@[139; 153)
104 IDENT@[139; 146) "enabled"
105 WHITESPACE@[146; 147)
106 EQ@[147; 148)
107 WHITESPACE@[148; 149)
108 LITERAL@[149; 153)
109 TRUE_KW@[149; 153)
110 R_PAREN@[153; 154)
111 R_BRACK@[154; 155)
112 WHITESPACE@[155; 156)
113 ATTR@[156; 173)
114 POUND@[156; 157)
115 EXCL@[157; 158)
116 L_BRACK@[158; 159)
117 META_ITEM@[159; 172)
118 IDENT@[159; 166) "enabled"
119 L_PAREN@[166; 167)
120 LITERAL@[167; 171)
121 TRUE_KW@[167; 171)
122 R_PAREN@[171; 172)
123 R_BRACK@[172; 173)
124 WHITESPACE@[173; 174)
125 ATTR@[174; 191)
126 POUND@[174; 175)
127 EXCL@[175; 176)
128 L_BRACK@[176; 177)
129 META_ITEM@[177; 190)
130 IDENT@[177; 181) "attr"
131 L_PAREN@[181; 182)
132 LITERAL@[182; 189)
133 STRING@[182; 189)
134 R_PAREN@[189; 190)
135 R_BRACK@[190; 191)
136 WHITESPACE@[191; 192)
137 ATTR@[192; 214)
138 POUND@[192; 193)
139 EXCL@[193; 194)
140 L_BRACK@[194; 195)
141 META_ITEM@[195; 213)
142 IDENT@[195; 199) "repr"
143 L_PAREN@[199; 200)
144 META_ITEM@[200; 201)
145 IDENT@[200; 201) "C"
146 COMMA@[201; 202)
147 WHITESPACE@[202; 203)
148 META_ITEM@[203; 212)
149 IDENT@[203; 208) "align"
150 WHITESPACE@[208; 209)
151 EQ@[209; 210)
152 WHITESPACE@[210; 211)
153 LITERAL@[211; 212)
154 INT_NUMBER@[211; 212) "4"
155 R_PAREN@[212; 213)
156 R_BRACK@[213; 214)
157 WHITESPACE@[214; 215)
158 ATTR@[215; 236)
159 POUND@[215; 216)
160 EXCL@[216; 217)
161 L_BRACK@[217; 218)
162 META_ITEM@[218; 235)
163 IDENT@[218; 222) "repr"
164 L_PAREN@[222; 223)
165 META_ITEM@[223; 224)
166 IDENT@[223; 224) "C"
167 COMMA@[224; 225)
168 WHITESPACE@[225; 226)
169 META_ITEM@[226; 234)
170 IDENT@[226; 231) "align"
171 L_PAREN@[231; 232)
172 LITERAL@[232; 233)
173 INT_NUMBER@[232; 233) "4"
174 R_PAREN@[233; 234)
175 R_PAREN@[234; 235)
176 R_BRACK@[235; 236)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0007_extern_crate.rs b/crates/libsyntax2/tests/data/parser/ok/0007_extern_crate.rs
new file mode 100644
index 000000000..3ce336676
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0007_extern_crate.rs
@@ -0,0 +1,2 @@
1extern crate foo;
2extern crate foo as bar;
diff --git a/crates/libsyntax2/tests/data/parser/ok/0007_extern_crate.txt b/crates/libsyntax2/tests/data/parser/ok/0007_extern_crate.txt
new file mode 100644
index 000000000..533af33c4
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0007_extern_crate.txt
@@ -0,0 +1,25 @@
1FILE@[0; 43)
2 EXTERN_CRATE_ITEM@[0; 17)
3 EXTERN_KW@[0; 6)
4 WHITESPACE@[6; 7)
5 CRATE_KW@[7; 12)
6 WHITESPACE@[12; 13)
7 NAME@[13; 16)
8 IDENT@[13; 16) "foo"
9 SEMI@[16; 17)
10 WHITESPACE@[17; 18)
11 EXTERN_CRATE_ITEM@[18; 42)
12 EXTERN_KW@[18; 24)
13 WHITESPACE@[24; 25)
14 CRATE_KW@[25; 30)
15 WHITESPACE@[30; 31)
16 NAME@[31; 34)
17 IDENT@[31; 34) "foo"
18 WHITESPACE@[34; 35)
19 ALIAS@[35; 41)
20 AS_KW@[35; 37)
21 WHITESPACE@[37; 38)
22 NAME@[38; 41)
23 IDENT@[38; 41) "bar"
24 SEMI@[41; 42)
25 WHITESPACE@[42; 43)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0008_mod_item.rs b/crates/libsyntax2/tests/data/parser/ok/0008_mod_item.rs
new file mode 100644
index 000000000..d22993bc1
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0008_mod_item.rs
@@ -0,0 +1,17 @@
1mod a;
2
3mod b {
4}
5
6mod c {
7 fn foo() {
8 }
9 struct S {}
10}
11
12mod d {
13 #![attr]
14 mod e;
15 mod f {
16 }
17} \ No newline at end of file
diff --git a/crates/libsyntax2/tests/data/parser/ok/0008_mod_item.txt b/crates/libsyntax2/tests/data/parser/ok/0008_mod_item.txt
new file mode 100644
index 000000000..1dcaaedce
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0008_mod_item.txt
@@ -0,0 +1,85 @@
1FILE@[0; 118)
2 MOD_ITEM@[0; 6)
3 MOD_KW@[0; 3)
4 WHITESPACE@[3; 4)
5 NAME@[4; 5)
6 IDENT@[4; 5) "a"
7 SEMI@[5; 6)
8 WHITESPACE@[6; 8)
9 MOD_ITEM@[8; 17)
10 MOD_KW@[8; 11)
11 WHITESPACE@[11; 12)
12 NAME@[12; 13)
13 IDENT@[12; 13) "b"
14 WHITESPACE@[13; 14)
15 L_CURLY@[14; 15)
16 WHITESPACE@[15; 16)
17 R_CURLY@[16; 17)
18 WHITESPACE@[17; 19)
19 MOD_ITEM@[19; 65)
20 MOD_KW@[19; 22)
21 WHITESPACE@[22; 23)
22 NAME@[23; 24)
23 IDENT@[23; 24) "c"
24 WHITESPACE@[24; 25)
25 L_CURLY@[25; 26)
26 WHITESPACE@[26; 31)
27 FUNCTION@[31; 47)
28 FN_KW@[31; 33)
29 WHITESPACE@[33; 34)
30 NAME@[34; 37)
31 IDENT@[34; 37) "foo"
32 PARAM_LIST@[37; 39)
33 L_PAREN@[37; 38)
34 R_PAREN@[38; 39)
35 WHITESPACE@[39; 40)
36 BLOCK_EXPR@[40; 47)
37 L_CURLY@[40; 41)
38 WHITESPACE@[41; 46)
39 R_CURLY@[46; 47)
40 WHITESPACE@[47; 52)
41 STRUCT_ITEM@[52; 63)
42 STRUCT_KW@[52; 58)
43 WHITESPACE@[58; 59)
44 NAME@[59; 60)
45 IDENT@[59; 60) "S"
46 WHITESPACE@[60; 61)
47 L_CURLY@[61; 62)
48 R_CURLY@[62; 63)
49 WHITESPACE@[63; 64)
50 R_CURLY@[64; 65)
51 WHITESPACE@[65; 67)
52 MOD_ITEM@[67; 118)
53 MOD_KW@[67; 70)
54 WHITESPACE@[70; 71)
55 NAME@[71; 72)
56 IDENT@[71; 72) "d"
57 WHITESPACE@[72; 73)
58 L_CURLY@[73; 74)
59 WHITESPACE@[74; 79)
60 ATTR@[79; 87)
61 POUND@[79; 80)
62 EXCL@[80; 81)
63 L_BRACK@[81; 82)
64 META_ITEM@[82; 86)
65 IDENT@[82; 86) "attr"
66 R_BRACK@[86; 87)
67 WHITESPACE@[87; 92)
68 MOD_ITEM@[92; 98)
69 MOD_KW@[92; 95)
70 WHITESPACE@[95; 96)
71 NAME@[96; 97)
72 IDENT@[96; 97) "e"
73 SEMI@[97; 98)
74 WHITESPACE@[98; 103)
75 MOD_ITEM@[103; 116)
76 MOD_KW@[103; 106)
77 WHITESPACE@[106; 107)
78 NAME@[107; 108)
79 IDENT@[107; 108) "f"
80 WHITESPACE@[108; 109)
81 L_CURLY@[109; 110)
82 WHITESPACE@[110; 115)
83 R_CURLY@[115; 116)
84 WHITESPACE@[116; 117)
85 R_CURLY@[117; 118)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0009_use_item.rs b/crates/libsyntax2/tests/data/parser/ok/0009_use_item.rs
new file mode 100644
index 000000000..05a6aff83
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0009_use_item.rs
@@ -0,0 +1,2 @@
1use foo;
2use ::bar; \ No newline at end of file
diff --git a/crates/libsyntax2/tests/data/parser/ok/0009_use_item.txt b/crates/libsyntax2/tests/data/parser/ok/0009_use_item.txt
new file mode 100644
index 000000000..8f850cd1c
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0009_use_item.txt
@@ -0,0 +1,21 @@
1FILE@[0; 19)
2 USE_ITEM@[0; 8)
3 USE_KW@[0; 3)
4 WHITESPACE@[3; 4)
5 USE_TREE@[4; 7)
6 PATH@[4; 7)
7 PATH_SEGMENT@[4; 7)
8 NAME_REF@[4; 7)
9 IDENT@[4; 7) "foo"
10 SEMI@[7; 8)
11 WHITESPACE@[8; 9)
12 USE_ITEM@[9; 19)
13 USE_KW@[9; 12)
14 WHITESPACE@[12; 13)
15 USE_TREE@[13; 18)
16 PATH@[13; 18)
17 PATH_SEGMENT@[13; 18)
18 COLONCOLON@[13; 15)
19 NAME_REF@[15; 18)
20 IDENT@[15; 18) "bar"
21 SEMI@[18; 19)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0010_use_path_segments.rs b/crates/libsyntax2/tests/data/parser/ok/0010_use_path_segments.rs
new file mode 100644
index 000000000..1e71b7a6c
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0010_use_path_segments.rs
@@ -0,0 +1,2 @@
1use ::foo::bar::baz;
2use foo::bar::baz;
diff --git a/crates/libsyntax2/tests/data/parser/ok/0010_use_path_segments.txt b/crates/libsyntax2/tests/data/parser/ok/0010_use_path_segments.txt
new file mode 100644
index 000000000..03ec342c2
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0010_use_path_segments.txt
@@ -0,0 +1,42 @@
1FILE@[0; 40)
2 USE_ITEM@[0; 20)
3 USE_KW@[0; 3)
4 WHITESPACE@[3; 4)
5 USE_TREE@[4; 19)
6 PATH@[4; 19)
7 PATH@[4; 14)
8 PATH@[4; 9)
9 PATH_SEGMENT@[4; 9)
10 COLONCOLON@[4; 6)
11 NAME_REF@[6; 9)
12 IDENT@[6; 9) "foo"
13 COLONCOLON@[9; 11)
14 PATH_SEGMENT@[11; 14)
15 NAME_REF@[11; 14)
16 IDENT@[11; 14) "bar"
17 COLONCOLON@[14; 16)
18 PATH_SEGMENT@[16; 19)
19 NAME_REF@[16; 19)
20 IDENT@[16; 19) "baz"
21 SEMI@[19; 20)
22 WHITESPACE@[20; 21)
23 USE_ITEM@[21; 39)
24 USE_KW@[21; 24)
25 WHITESPACE@[24; 25)
26 USE_TREE@[25; 38)
27 PATH@[25; 38)
28 PATH@[25; 33)
29 PATH@[25; 28)
30 PATH_SEGMENT@[25; 28)
31 NAME_REF@[25; 28)
32 IDENT@[25; 28) "foo"
33 COLONCOLON@[28; 30)
34 PATH_SEGMENT@[30; 33)
35 NAME_REF@[30; 33)
36 IDENT@[30; 33) "bar"
37 COLONCOLON@[33; 35)
38 PATH_SEGMENT@[35; 38)
39 NAME_REF@[35; 38)
40 IDENT@[35; 38) "baz"
41 SEMI@[38; 39)
42 WHITESPACE@[39; 40)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0011_outer_attribute.rs b/crates/libsyntax2/tests/data/parser/ok/0011_outer_attribute.rs
new file mode 100644
index 000000000..8b80c0d90
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0011_outer_attribute.rs
@@ -0,0 +1,3 @@
1#[cfg(test)]
2#[ignore]
3fn foo() {}
diff --git a/crates/libsyntax2/tests/data/parser/ok/0011_outer_attribute.txt b/crates/libsyntax2/tests/data/parser/ok/0011_outer_attribute.txt
new file mode 100644
index 000000000..9824c9083
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0011_outer_attribute.txt
@@ -0,0 +1,32 @@
1FILE@[0; 35)
2 FUNCTION@[0; 34)
3 ATTR@[0; 12)
4 POUND@[0; 1)
5 L_BRACK@[1; 2)
6 META_ITEM@[2; 11)
7 IDENT@[2; 5) "cfg"
8 L_PAREN@[5; 6)
9 META_ITEM@[6; 10)
10 IDENT@[6; 10) "test"
11 R_PAREN@[10; 11)
12 R_BRACK@[11; 12)
13 WHITESPACE@[12; 13)
14 ATTR@[13; 22)
15 POUND@[13; 14)
16 L_BRACK@[14; 15)
17 META_ITEM@[15; 21)
18 IDENT@[15; 21) "ignore"
19 R_BRACK@[21; 22)
20 WHITESPACE@[22; 23)
21 FN_KW@[23; 25)
22 WHITESPACE@[25; 26)
23 NAME@[26; 29)
24 IDENT@[26; 29) "foo"
25 PARAM_LIST@[29; 31)
26 L_PAREN@[29; 30)
27 R_PAREN@[30; 31)
28 WHITESPACE@[31; 32)
29 BLOCK_EXPR@[32; 34)
30 L_CURLY@[32; 33)
31 R_CURLY@[33; 34)
32 WHITESPACE@[34; 35)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0012_visibility.rs b/crates/libsyntax2/tests/data/parser/ok/0012_visibility.rs
new file mode 100644
index 000000000..75b1db121
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0012_visibility.rs
@@ -0,0 +1,5 @@
1fn a() {}
2pub fn b() {}
3pub(crate) fn c() {}
4pub(super) fn d() {}
5pub(in foo::bar::baz) fn e() {}
diff --git a/crates/libsyntax2/tests/data/parser/ok/0012_visibility.txt b/crates/libsyntax2/tests/data/parser/ok/0012_visibility.txt
new file mode 100644
index 000000000..af0c59543
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0012_visibility.txt
@@ -0,0 +1,102 @@
1FILE@[0; 98)
2 FUNCTION@[0; 9)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 4)
6 IDENT@[3; 4) "a"
7 PARAM_LIST@[4; 6)
8 L_PAREN@[4; 5)
9 R_PAREN@[5; 6)
10 WHITESPACE@[6; 7)
11 BLOCK_EXPR@[7; 9)
12 L_CURLY@[7; 8)
13 R_CURLY@[8; 9)
14 WHITESPACE@[9; 10)
15 FUNCTION@[10; 23)
16 VISIBILITY@[10; 13)
17 PUB_KW@[10; 13)
18 WHITESPACE@[13; 14)
19 FN_KW@[14; 16)
20 WHITESPACE@[16; 17)
21 NAME@[17; 18)
22 IDENT@[17; 18) "b"
23 PARAM_LIST@[18; 20)
24 L_PAREN@[18; 19)
25 R_PAREN@[19; 20)
26 WHITESPACE@[20; 21)
27 BLOCK_EXPR@[21; 23)
28 L_CURLY@[21; 22)
29 R_CURLY@[22; 23)
30 WHITESPACE@[23; 24)
31 FUNCTION@[24; 44)
32 VISIBILITY@[24; 34)
33 PUB_KW@[24; 27)
34 L_PAREN@[27; 28)
35 CRATE_KW@[28; 33)
36 R_PAREN@[33; 34)
37 WHITESPACE@[34; 35)
38 FN_KW@[35; 37)
39 WHITESPACE@[37; 38)
40 NAME@[38; 39)
41 IDENT@[38; 39) "c"
42 PARAM_LIST@[39; 41)
43 L_PAREN@[39; 40)
44 R_PAREN@[40; 41)
45 WHITESPACE@[41; 42)
46 BLOCK_EXPR@[42; 44)
47 L_CURLY@[42; 43)
48 R_CURLY@[43; 44)
49 WHITESPACE@[44; 45)
50 FUNCTION@[45; 65)
51 VISIBILITY@[45; 55)
52 PUB_KW@[45; 48)
53 L_PAREN@[48; 49)
54 SUPER_KW@[49; 54)
55 R_PAREN@[54; 55)
56 WHITESPACE@[55; 56)
57 FN_KW@[56; 58)
58 WHITESPACE@[58; 59)
59 NAME@[59; 60)
60 IDENT@[59; 60) "d"
61 PARAM_LIST@[60; 62)
62 L_PAREN@[60; 61)
63 R_PAREN@[61; 62)
64 WHITESPACE@[62; 63)
65 BLOCK_EXPR@[63; 65)
66 L_CURLY@[63; 64)
67 R_CURLY@[64; 65)
68 WHITESPACE@[65; 66)
69 FUNCTION@[66; 97)
70 VISIBILITY@[66; 87)
71 PUB_KW@[66; 69)
72 L_PAREN@[69; 70)
73 IN_KW@[70; 72)
74 WHITESPACE@[72; 73)
75 PATH@[73; 86)
76 PATH@[73; 81)
77 PATH@[73; 76)
78 PATH_SEGMENT@[73; 76)
79 NAME_REF@[73; 76)
80 IDENT@[73; 76) "foo"
81 COLONCOLON@[76; 78)
82 PATH_SEGMENT@[78; 81)
83 NAME_REF@[78; 81)
84 IDENT@[78; 81) "bar"
85 COLONCOLON@[81; 83)
86 PATH_SEGMENT@[83; 86)
87 NAME_REF@[83; 86)
88 IDENT@[83; 86) "baz"
89 R_PAREN@[86; 87)
90 WHITESPACE@[87; 88)
91 FN_KW@[88; 90)
92 WHITESPACE@[90; 91)
93 NAME@[91; 92)
94 IDENT@[91; 92) "e"
95 PARAM_LIST@[92; 94)
96 L_PAREN@[92; 93)
97 R_PAREN@[93; 94)
98 WHITESPACE@[94; 95)
99 BLOCK_EXPR@[95; 97)
100 L_CURLY@[95; 96)
101 R_CURLY@[96; 97)
102 WHITESPACE@[97; 98)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0013_use_path_self_super.rs b/crates/libsyntax2/tests/data/parser/ok/0013_use_path_self_super.rs
new file mode 100644
index 000000000..faf6a42c7
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0013_use_path_self_super.rs
@@ -0,0 +1,3 @@
1use self::foo;
2use super::super::bar;
3use ::self::a::super::bar;
diff --git a/crates/libsyntax2/tests/data/parser/ok/0013_use_path_self_super.txt b/crates/libsyntax2/tests/data/parser/ok/0013_use_path_self_super.txt
new file mode 100644
index 000000000..5ed27ca37
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0013_use_path_self_super.txt
@@ -0,0 +1,57 @@
1FILE@[0; 65)
2 USE_ITEM@[0; 14)
3 USE_KW@[0; 3)
4 WHITESPACE@[3; 4)
5 USE_TREE@[4; 13)
6 PATH@[4; 13)
7 PATH@[4; 8)
8 PATH_SEGMENT@[4; 8)
9 SELF_KW@[4; 8)
10 COLONCOLON@[8; 10)
11 PATH_SEGMENT@[10; 13)
12 NAME_REF@[10; 13)
13 IDENT@[10; 13) "foo"
14 SEMI@[13; 14)
15 WHITESPACE@[14; 15)
16 USE_ITEM@[15; 37)
17 USE_KW@[15; 18)
18 WHITESPACE@[18; 19)
19 USE_TREE@[19; 36)
20 PATH@[19; 36)
21 PATH@[19; 31)
22 PATH@[19; 24)
23 PATH_SEGMENT@[19; 24)
24 SUPER_KW@[19; 24)
25 COLONCOLON@[24; 26)
26 PATH_SEGMENT@[26; 31)
27 SUPER_KW@[26; 31)
28 COLONCOLON@[31; 33)
29 PATH_SEGMENT@[33; 36)
30 NAME_REF@[33; 36)
31 IDENT@[33; 36) "bar"
32 SEMI@[36; 37)
33 WHITESPACE@[37; 38)
34 USE_ITEM@[38; 64)
35 USE_KW@[38; 41)
36 WHITESPACE@[41; 42)
37 USE_TREE@[42; 63)
38 PATH@[42; 63)
39 PATH@[42; 58)
40 PATH@[42; 51)
41 PATH@[42; 48)
42 PATH_SEGMENT@[42; 48)
43 COLONCOLON@[42; 44)
44 SELF_KW@[44; 48)
45 COLONCOLON@[48; 50)
46 PATH_SEGMENT@[50; 51)
47 NAME_REF@[50; 51)
48 IDENT@[50; 51) "a"
49 COLONCOLON@[51; 53)
50 PATH_SEGMENT@[53; 58)
51 SUPER_KW@[53; 58)
52 COLONCOLON@[58; 60)
53 PATH_SEGMENT@[60; 63)
54 NAME_REF@[60; 63)
55 IDENT@[60; 63) "bar"
56 SEMI@[63; 64)
57 WHITESPACE@[64; 65)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0014_use_tree.rs b/crates/libsyntax2/tests/data/parser/ok/0014_use_tree.rs
new file mode 100644
index 000000000..5e4aa3a33
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0014_use_tree.rs
@@ -0,0 +1,7 @@
1use *;
2use ::*;
3use ::{};
4use {};
5use foo::*;
6use foo::{};
7use ::foo::{a, b, c};
diff --git a/crates/libsyntax2/tests/data/parser/ok/0014_use_tree.txt b/crates/libsyntax2/tests/data/parser/ok/0014_use_tree.txt
new file mode 100644
index 000000000..730d5539b
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0014_use_tree.txt
@@ -0,0 +1,91 @@
1FILE@[0; 81)
2 USE_ITEM@[0; 6)
3 USE_KW@[0; 3)
4 WHITESPACE@[3; 4)
5 USE_TREE@[4; 5)
6 STAR@[4; 5)
7 SEMI@[5; 6)
8 WHITESPACE@[6; 7)
9 USE_ITEM@[7; 15)
10 USE_KW@[7; 10)
11 WHITESPACE@[10; 11)
12 USE_TREE@[11; 14)
13 COLONCOLON@[11; 13)
14 STAR@[13; 14)
15 SEMI@[14; 15)
16 WHITESPACE@[15; 16)
17 USE_ITEM@[16; 25)
18 USE_KW@[16; 19)
19 WHITESPACE@[19; 20)
20 USE_TREE@[20; 24)
21 COLONCOLON@[20; 22)
22 L_CURLY@[22; 23)
23 R_CURLY@[23; 24)
24 SEMI@[24; 25)
25 WHITESPACE@[25; 26)
26 USE_ITEM@[26; 33)
27 USE_KW@[26; 29)
28 WHITESPACE@[29; 30)
29 USE_TREE@[30; 32)
30 L_CURLY@[30; 31)
31 R_CURLY@[31; 32)
32 SEMI@[32; 33)
33 WHITESPACE@[33; 34)
34 USE_ITEM@[34; 45)
35 USE_KW@[34; 37)
36 WHITESPACE@[37; 38)
37 USE_TREE@[38; 44)
38 PATH@[38; 41)
39 PATH_SEGMENT@[38; 41)
40 NAME_REF@[38; 41)
41 IDENT@[38; 41) "foo"
42 COLONCOLON@[41; 43)
43 STAR@[43; 44)
44 SEMI@[44; 45)
45 WHITESPACE@[45; 46)
46 USE_ITEM@[46; 58)
47 USE_KW@[46; 49)
48 WHITESPACE@[49; 50)
49 USE_TREE@[50; 57)
50 PATH@[50; 53)
51 PATH_SEGMENT@[50; 53)
52 NAME_REF@[50; 53)
53 IDENT@[50; 53) "foo"
54 COLONCOLON@[53; 55)
55 L_CURLY@[55; 56)
56 R_CURLY@[56; 57)
57 SEMI@[57; 58)
58 WHITESPACE@[58; 59)
59 USE_ITEM@[59; 80)
60 USE_KW@[59; 62)
61 WHITESPACE@[62; 63)
62 USE_TREE@[63; 79)
63 PATH@[63; 68)
64 PATH_SEGMENT@[63; 68)
65 COLONCOLON@[63; 65)
66 NAME_REF@[65; 68)
67 IDENT@[65; 68) "foo"
68 COLONCOLON@[68; 70)
69 L_CURLY@[70; 71)
70 USE_TREE@[71; 72)
71 PATH@[71; 72)
72 PATH_SEGMENT@[71; 72)
73 NAME_REF@[71; 72)
74 IDENT@[71; 72) "a"
75 COMMA@[72; 73)
76 WHITESPACE@[73; 74)
77 USE_TREE@[74; 75)
78 PATH@[74; 75)
79 PATH_SEGMENT@[74; 75)
80 NAME_REF@[74; 75)
81 IDENT@[74; 75) "b"
82 COMMA@[75; 76)
83 WHITESPACE@[76; 77)
84 USE_TREE@[77; 78)
85 PATH@[77; 78)
86 PATH_SEGMENT@[77; 78)
87 NAME_REF@[77; 78)
88 IDENT@[77; 78) "c"
89 R_CURLY@[78; 79)
90 SEMI@[79; 80)
91 WHITESPACE@[80; 81)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0015_use_tree.rs b/crates/libsyntax2/tests/data/parser/ok/0015_use_tree.rs
new file mode 100644
index 000000000..46a0783a2
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0015_use_tree.rs
@@ -0,0 +1,2 @@
1use foo as bar;
2use foo::{a as b, *, ::*, ::foo as x};
diff --git a/crates/libsyntax2/tests/data/parser/ok/0015_use_tree.txt b/crates/libsyntax2/tests/data/parser/ok/0015_use_tree.txt
new file mode 100644
index 000000000..4438e417b
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0015_use_tree.txt
@@ -0,0 +1,64 @@
1FILE@[0; 55)
2 USE_ITEM@[0; 15)
3 USE_KW@[0; 3)
4 WHITESPACE@[3; 4)
5 USE_TREE@[4; 14)
6 PATH@[4; 7)
7 PATH_SEGMENT@[4; 7)
8 NAME_REF@[4; 7)
9 IDENT@[4; 7) "foo"
10 WHITESPACE@[7; 8)
11 ALIAS@[8; 14)
12 AS_KW@[8; 10)
13 WHITESPACE@[10; 11)
14 NAME@[11; 14)
15 IDENT@[11; 14) "bar"
16 SEMI@[14; 15)
17 WHITESPACE@[15; 16)
18 USE_ITEM@[16; 54)
19 USE_KW@[16; 19)
20 WHITESPACE@[19; 20)
21 USE_TREE@[20; 53)
22 PATH@[20; 23)
23 PATH_SEGMENT@[20; 23)
24 NAME_REF@[20; 23)
25 IDENT@[20; 23) "foo"
26 COLONCOLON@[23; 25)
27 L_CURLY@[25; 26)
28 USE_TREE@[26; 32)
29 PATH@[26; 27)
30 PATH_SEGMENT@[26; 27)
31 NAME_REF@[26; 27)
32 IDENT@[26; 27) "a"
33 WHITESPACE@[27; 28)
34 ALIAS@[28; 32)
35 AS_KW@[28; 30)
36 WHITESPACE@[30; 31)
37 NAME@[31; 32)
38 IDENT@[31; 32) "b"
39 COMMA@[32; 33)
40 WHITESPACE@[33; 34)
41 USE_TREE@[34; 35)
42 STAR@[34; 35)
43 COMMA@[35; 36)
44 WHITESPACE@[36; 37)
45 USE_TREE@[37; 40)
46 COLONCOLON@[37; 39)
47 STAR@[39; 40)
48 COMMA@[40; 41)
49 WHITESPACE@[41; 42)
50 USE_TREE@[42; 52)
51 PATH@[42; 47)
52 PATH_SEGMENT@[42; 47)
53 COLONCOLON@[42; 44)
54 NAME_REF@[44; 47)
55 IDENT@[44; 47) "foo"
56 WHITESPACE@[47; 48)
57 ALIAS@[48; 52)
58 AS_KW@[48; 50)
59 WHITESPACE@[50; 51)
60 NAME@[51; 52)
61 IDENT@[51; 52) "x"
62 R_CURLY@[52; 53)
63 SEMI@[53; 54)
64 WHITESPACE@[54; 55)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0016_struct_flavors.rs b/crates/libsyntax2/tests/data/parser/ok/0016_struct_flavors.rs
new file mode 100644
index 000000000..69638350c
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0016_struct_flavors.rs
@@ -0,0 +1,10 @@
1struct A;
2struct B {}
3struct C();
4
5struct D {
6 a: u32,
7 pub b: u32
8}
9
10struct E(pub x, y,);
diff --git a/crates/libsyntax2/tests/data/parser/ok/0016_struct_flavors.txt b/crates/libsyntax2/tests/data/parser/ok/0016_struct_flavors.txt
new file mode 100644
index 000000000..5dd480d1b
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0016_struct_flavors.txt
@@ -0,0 +1,89 @@
1FILE@[0; 97)
2 STRUCT_ITEM@[0; 9)
3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7)
5 NAME@[7; 8)
6 IDENT@[7; 8) "A"
7 SEMI@[8; 9)
8 WHITESPACE@[9; 10)
9 STRUCT_ITEM@[10; 21)
10 STRUCT_KW@[10; 16)
11 WHITESPACE@[16; 17)
12 NAME@[17; 18)
13 IDENT@[17; 18) "B"
14 WHITESPACE@[18; 19)
15 L_CURLY@[19; 20)
16 R_CURLY@[20; 21)
17 WHITESPACE@[21; 22)
18 STRUCT_ITEM@[22; 33)
19 STRUCT_KW@[22; 28)
20 WHITESPACE@[28; 29)
21 NAME@[29; 30)
22 IDENT@[29; 30) "C"
23 L_PAREN@[30; 31)
24 R_PAREN@[31; 32)
25 SEMI@[32; 33)
26 WHITESPACE@[33; 35)
27 STRUCT_ITEM@[35; 74)
28 STRUCT_KW@[35; 41)
29 WHITESPACE@[41; 42)
30 NAME@[42; 43)
31 IDENT@[42; 43) "D"
32 WHITESPACE@[43; 44)
33 L_CURLY@[44; 45)
34 WHITESPACE@[45; 50)
35 NAMED_FIELD@[50; 56)
36 NAME@[50; 51)
37 IDENT@[50; 51) "a"
38 COLON@[51; 52)
39 WHITESPACE@[52; 53)
40 PATH_TYPE@[53; 56)
41 PATH@[53; 56)
42 PATH_SEGMENT@[53; 56)
43 NAME_REF@[53; 56)
44 IDENT@[53; 56) "u32"
45 COMMA@[56; 57)
46 WHITESPACE@[57; 62)
47 NAMED_FIELD@[62; 72)
48 VISIBILITY@[62; 65)
49 PUB_KW@[62; 65)
50 WHITESPACE@[65; 66)
51 NAME@[66; 67)
52 IDENT@[66; 67) "b"
53 COLON@[67; 68)
54 WHITESPACE@[68; 69)
55 PATH_TYPE@[69; 72)
56 PATH@[69; 72)
57 PATH_SEGMENT@[69; 72)
58 NAME_REF@[69; 72)
59 IDENT@[69; 72) "u32"
60 WHITESPACE@[72; 73)
61 R_CURLY@[73; 74)
62 WHITESPACE@[74; 76)
63 STRUCT_ITEM@[76; 96)
64 STRUCT_KW@[76; 82)
65 WHITESPACE@[82; 83)
66 NAME@[83; 84)
67 IDENT@[83; 84) "E"
68 L_PAREN@[84; 85)
69 POS_FIELD@[85; 90)
70 VISIBILITY@[85; 88)
71 PUB_KW@[85; 88)
72 WHITESPACE@[88; 89)
73 PATH_TYPE@[89; 90)
74 PATH@[89; 90)
75 PATH_SEGMENT@[89; 90)
76 NAME_REF@[89; 90)
77 IDENT@[89; 90) "x"
78 COMMA@[90; 91)
79 WHITESPACE@[91; 92)
80 POS_FIELD@[92; 93)
81 PATH_TYPE@[92; 93)
82 PATH@[92; 93)
83 PATH_SEGMENT@[92; 93)
84 NAME_REF@[92; 93)
85 IDENT@[92; 93) "y"
86 COMMA@[93; 94)
87 R_PAREN@[94; 95)
88 SEMI@[95; 96)
89 WHITESPACE@[96; 97)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0017_attr_trailing_comma.rs b/crates/libsyntax2/tests/data/parser/ok/0017_attr_trailing_comma.rs
new file mode 100644
index 000000000..fe0a7bb97
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0017_attr_trailing_comma.rs
@@ -0,0 +1,2 @@
1#[foo(a,)]
2fn foo() {}
diff --git a/crates/libsyntax2/tests/data/parser/ok/0017_attr_trailing_comma.txt b/crates/libsyntax2/tests/data/parser/ok/0017_attr_trailing_comma.txt
new file mode 100644
index 000000000..69724cdc8
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0017_attr_trailing_comma.txt
@@ -0,0 +1,26 @@
1FILE@[0; 23)
2 FUNCTION@[0; 22)
3 ATTR@[0; 10)
4 POUND@[0; 1)
5 L_BRACK@[1; 2)
6 META_ITEM@[2; 9)
7 IDENT@[2; 5) "foo"
8 L_PAREN@[5; 6)
9 META_ITEM@[6; 7)
10 IDENT@[6; 7) "a"
11 COMMA@[7; 8)
12 R_PAREN@[8; 9)
13 R_BRACK@[9; 10)
14 WHITESPACE@[10; 11)
15 FN_KW@[11; 13)
16 WHITESPACE@[13; 14)
17 NAME@[14; 17)
18 IDENT@[14; 17) "foo"
19 PARAM_LIST@[17; 19)
20 L_PAREN@[17; 18)
21 R_PAREN@[18; 19)
22 WHITESPACE@[19; 20)
23 BLOCK_EXPR@[20; 22)
24 L_CURLY@[20; 21)
25 R_CURLY@[21; 22)
26 WHITESPACE@[22; 23)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0018_struct_type_params.rs b/crates/libsyntax2/tests/data/parser/ok/0018_struct_type_params.rs
new file mode 100644
index 000000000..88c544923
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0018_struct_type_params.rs
@@ -0,0 +1,17 @@
1struct S1<T>;
2struct S2<T>(u32);
3struct S3<T> { u: u32 }
4
5struct S4<>;
6struct S5<'a>;
7struct S6<'a:>;
8struct S7<'a: 'b>;
9struct S8<'a: 'b + >;
10struct S9<'a: 'b + 'c>;
11struct S10<'a,>;
12struct S11<'a, 'b>;
13struct S12<'a: 'b+, 'b: 'c,>;
14
15struct S13<T>;
16struct S14<T, U>;
17struct S15<'a, T, U>;
diff --git a/crates/libsyntax2/tests/data/parser/ok/0018_struct_type_params.txt b/crates/libsyntax2/tests/data/parser/ok/0018_struct_type_params.txt
new file mode 100644
index 000000000..6457c2639
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0018_struct_type_params.txt
@@ -0,0 +1,255 @@
1FILE@[0; 290)
2 STRUCT_ITEM@[0; 13)
3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7)
5 NAME@[7; 9)
6 IDENT@[7; 9) "S1"
7 TYPE_PARAM_LIST@[9; 12)
8 L_ANGLE@[9; 10)
9 TYPE_PARAM@[10; 11)
10 NAME@[10; 11)
11 IDENT@[10; 11) "T"
12 R_ANGLE@[11; 12)
13 SEMI@[12; 13)
14 WHITESPACE@[13; 14)
15 STRUCT_ITEM@[14; 32)
16 STRUCT_KW@[14; 20)
17 WHITESPACE@[20; 21)
18 NAME@[21; 23)
19 IDENT@[21; 23) "S2"
20 TYPE_PARAM_LIST@[23; 26)
21 L_ANGLE@[23; 24)
22 TYPE_PARAM@[24; 25)
23 NAME@[24; 25)
24 IDENT@[24; 25) "T"
25 R_ANGLE@[25; 26)
26 L_PAREN@[26; 27)
27 POS_FIELD@[27; 30)
28 PATH_TYPE@[27; 30)
29 PATH@[27; 30)
30 PATH_SEGMENT@[27; 30)
31 NAME_REF@[27; 30)
32 IDENT@[27; 30) "u32"
33 R_PAREN@[30; 31)
34 SEMI@[31; 32)
35 WHITESPACE@[32; 33)
36 STRUCT_ITEM@[33; 56)
37 STRUCT_KW@[33; 39)
38 WHITESPACE@[39; 40)
39 NAME@[40; 42)
40 IDENT@[40; 42) "S3"
41 TYPE_PARAM_LIST@[42; 45)
42 L_ANGLE@[42; 43)
43 TYPE_PARAM@[43; 44)
44 NAME@[43; 44)
45 IDENT@[43; 44) "T"
46 R_ANGLE@[44; 45)
47 WHITESPACE@[45; 46)
48 L_CURLY@[46; 47)
49 WHITESPACE@[47; 48)
50 NAMED_FIELD@[48; 54)
51 NAME@[48; 49)
52 IDENT@[48; 49) "u"
53 COLON@[49; 50)
54 WHITESPACE@[50; 51)
55 PATH_TYPE@[51; 54)
56 PATH@[51; 54)
57 PATH_SEGMENT@[51; 54)
58 NAME_REF@[51; 54)
59 IDENT@[51; 54) "u32"
60 WHITESPACE@[54; 55)
61 R_CURLY@[55; 56)
62 WHITESPACE@[56; 58)
63 STRUCT_ITEM@[58; 70)
64 STRUCT_KW@[58; 64)
65 WHITESPACE@[64; 65)
66 NAME@[65; 67)
67 IDENT@[65; 67) "S4"
68 TYPE_PARAM_LIST@[67; 69)
69 L_ANGLE@[67; 68)
70 R_ANGLE@[68; 69)
71 SEMI@[69; 70)
72 WHITESPACE@[70; 71)
73 STRUCT_ITEM@[71; 85)
74 STRUCT_KW@[71; 77)
75 WHITESPACE@[77; 78)
76 NAME@[78; 80)
77 IDENT@[78; 80) "S5"
78 TYPE_PARAM_LIST@[80; 84)
79 L_ANGLE@[80; 81)
80 LIFETIME_PARAM@[81; 83)
81 LIFETIME@[81; 83) "'a"
82 R_ANGLE@[83; 84)
83 SEMI@[84; 85)
84 WHITESPACE@[85; 86)
85 STRUCT_ITEM@[86; 101)
86 STRUCT_KW@[86; 92)
87 WHITESPACE@[92; 93)
88 NAME@[93; 95)
89 IDENT@[93; 95) "S6"
90 TYPE_PARAM_LIST@[95; 100)
91 L_ANGLE@[95; 96)
92 LIFETIME_PARAM@[96; 99)
93 LIFETIME@[96; 98) "'a"
94 COLON@[98; 99)
95 R_ANGLE@[99; 100)
96 SEMI@[100; 101)
97 WHITESPACE@[101; 102)
98 STRUCT_ITEM@[102; 120)
99 STRUCT_KW@[102; 108)
100 WHITESPACE@[108; 109)
101 NAME@[109; 111)
102 IDENT@[109; 111) "S7"
103 TYPE_PARAM_LIST@[111; 119)
104 L_ANGLE@[111; 112)
105 LIFETIME_PARAM@[112; 118)
106 LIFETIME@[112; 114) "'a"
107 COLON@[114; 115)
108 WHITESPACE@[115; 116)
109 LIFETIME@[116; 118) "'b"
110 R_ANGLE@[118; 119)
111 SEMI@[119; 120)
112 WHITESPACE@[120; 121)
113 STRUCT_ITEM@[121; 142)
114 STRUCT_KW@[121; 127)
115 WHITESPACE@[127; 128)
116 NAME@[128; 130)
117 IDENT@[128; 130) "S8"
118 TYPE_PARAM_LIST@[130; 141)
119 L_ANGLE@[130; 131)
120 LIFETIME_PARAM@[131; 139)
121 LIFETIME@[131; 133) "'a"
122 COLON@[133; 134)
123 WHITESPACE@[134; 135)
124 LIFETIME@[135; 137) "'b"
125 WHITESPACE@[137; 138)
126 PLUS@[138; 139)
127 WHITESPACE@[139; 140)
128 R_ANGLE@[140; 141)
129 SEMI@[141; 142)
130 WHITESPACE@[142; 143)
131 STRUCT_ITEM@[143; 166)
132 STRUCT_KW@[143; 149)
133 WHITESPACE@[149; 150)
134 NAME@[150; 152)
135 IDENT@[150; 152) "S9"
136 TYPE_PARAM_LIST@[152; 165)
137 L_ANGLE@[152; 153)
138 LIFETIME_PARAM@[153; 164)
139 LIFETIME@[153; 155) "'a"
140 COLON@[155; 156)
141 WHITESPACE@[156; 157)
142 LIFETIME@[157; 159) "'b"
143 WHITESPACE@[159; 160)
144 PLUS@[160; 161)
145 WHITESPACE@[161; 162)
146 LIFETIME@[162; 164) "'c"
147 R_ANGLE@[164; 165)
148 SEMI@[165; 166)
149 WHITESPACE@[166; 167)
150 STRUCT_ITEM@[167; 183)
151 STRUCT_KW@[167; 173)
152 WHITESPACE@[173; 174)
153 NAME@[174; 177)
154 IDENT@[174; 177) "S10"
155 TYPE_PARAM_LIST@[177; 182)
156 L_ANGLE@[177; 178)
157 LIFETIME_PARAM@[178; 180)
158 LIFETIME@[178; 180) "'a"
159 COMMA@[180; 181)
160 R_ANGLE@[181; 182)
161 SEMI@[182; 183)
162 WHITESPACE@[183; 184)
163 STRUCT_ITEM@[184; 203)
164 STRUCT_KW@[184; 190)
165 WHITESPACE@[190; 191)
166 NAME@[191; 194)
167 IDENT@[191; 194) "S11"
168 TYPE_PARAM_LIST@[194; 202)
169 L_ANGLE@[194; 195)
170 LIFETIME_PARAM@[195; 197)
171 LIFETIME@[195; 197) "'a"
172 COMMA@[197; 198)
173 WHITESPACE@[198; 199)
174 LIFETIME_PARAM@[199; 201)
175 LIFETIME@[199; 201) "'b"
176 R_ANGLE@[201; 202)
177 SEMI@[202; 203)
178 WHITESPACE@[203; 204)
179 STRUCT_ITEM@[204; 233)
180 STRUCT_KW@[204; 210)
181 WHITESPACE@[210; 211)
182 NAME@[211; 214)
183 IDENT@[211; 214) "S12"
184 TYPE_PARAM_LIST@[214; 232)
185 L_ANGLE@[214; 215)
186 LIFETIME_PARAM@[215; 222)
187 LIFETIME@[215; 217) "'a"
188 COLON@[217; 218)
189 WHITESPACE@[218; 219)
190 LIFETIME@[219; 221) "'b"
191 PLUS@[221; 222)
192 COMMA@[222; 223)
193 WHITESPACE@[223; 224)
194 LIFETIME_PARAM@[224; 230)
195 LIFETIME@[224; 226) "'b"
196 COLON@[226; 227)
197 WHITESPACE@[227; 228)
198 LIFETIME@[228; 230) "'c"
199 COMMA@[230; 231)
200 R_ANGLE@[231; 232)
201 SEMI@[232; 233)
202 WHITESPACE@[233; 235)
203 STRUCT_ITEM@[235; 249)
204 STRUCT_KW@[235; 241)
205 WHITESPACE@[241; 242)
206 NAME@[242; 245)
207 IDENT@[242; 245) "S13"
208 TYPE_PARAM_LIST@[245; 248)
209 L_ANGLE@[245; 246)
210 TYPE_PARAM@[246; 247)
211 NAME@[246; 247)
212 IDENT@[246; 247) "T"
213 R_ANGLE@[247; 248)
214 SEMI@[248; 249)
215 WHITESPACE@[249; 250)
216 STRUCT_ITEM@[250; 267)
217 STRUCT_KW@[250; 256)
218 WHITESPACE@[256; 257)
219 NAME@[257; 260)
220 IDENT@[257; 260) "S14"
221 TYPE_PARAM_LIST@[260; 266)
222 L_ANGLE@[260; 261)
223 TYPE_PARAM@[261; 262)
224 NAME@[261; 262)
225 IDENT@[261; 262) "T"
226 COMMA@[262; 263)
227 WHITESPACE@[263; 264)
228 TYPE_PARAM@[264; 265)
229 NAME@[264; 265)
230 IDENT@[264; 265) "U"
231 R_ANGLE@[265; 266)
232 SEMI@[266; 267)
233 WHITESPACE@[267; 268)
234 STRUCT_ITEM@[268; 289)
235 STRUCT_KW@[268; 274)
236 WHITESPACE@[274; 275)
237 NAME@[275; 278)
238 IDENT@[275; 278) "S15"
239 TYPE_PARAM_LIST@[278; 288)
240 L_ANGLE@[278; 279)
241 LIFETIME_PARAM@[279; 281)
242 LIFETIME@[279; 281) "'a"
243 COMMA@[281; 282)
244 WHITESPACE@[282; 283)
245 TYPE_PARAM@[283; 284)
246 NAME@[283; 284)
247 IDENT@[283; 284) "T"
248 COMMA@[284; 285)
249 WHITESPACE@[285; 286)
250 TYPE_PARAM@[286; 287)
251 NAME@[286; 287)
252 IDENT@[286; 287) "U"
253 R_ANGLE@[287; 288)
254 SEMI@[288; 289)
255 WHITESPACE@[289; 290)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0019_enums.rs b/crates/libsyntax2/tests/data/parser/ok/0019_enums.rs
new file mode 100644
index 000000000..7a1afa0e6
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0019_enums.rs
@@ -0,0 +1,25 @@
1enum E1 {
2}
3
4enum E2<T> {
5}
6
7enum E3 {
8 X
9}
10
11enum E4 {
12 X,
13}
14
15enum E5 {
16 A,
17 B = 92,
18 C {
19 a: u32,
20 pub b: f64,
21 },
22 F {},
23 D(u32,),
24 E(),
25}
diff --git a/crates/libsyntax2/tests/data/parser/ok/0019_enums.txt b/crates/libsyntax2/tests/data/parser/ok/0019_enums.txt
new file mode 100644
index 000000000..8650381cd
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0019_enums.txt
@@ -0,0 +1,146 @@
1FILE@[0; 182)
2 ENUM_ITEM@[0; 11)
3 ENUM_KW@[0; 4)
4 WHITESPACE@[4; 5)
5 NAME@[5; 7)
6 IDENT@[5; 7) "E1"
7 WHITESPACE@[7; 8)
8 L_CURLY@[8; 9)
9 WHITESPACE@[9; 10)
10 R_CURLY@[10; 11)
11 WHITESPACE@[11; 13)
12 ENUM_ITEM@[13; 27)
13 ENUM_KW@[13; 17)
14 WHITESPACE@[17; 18)
15 NAME@[18; 20)
16 IDENT@[18; 20) "E2"
17 TYPE_PARAM_LIST@[20; 23)
18 L_ANGLE@[20; 21)
19 TYPE_PARAM@[21; 22)
20 NAME@[21; 22)
21 IDENT@[21; 22) "T"
22 R_ANGLE@[22; 23)
23 WHITESPACE@[23; 24)
24 L_CURLY@[24; 25)
25 WHITESPACE@[25; 26)
26 R_CURLY@[26; 27)
27 WHITESPACE@[27; 29)
28 ENUM_ITEM@[29; 46)
29 ENUM_KW@[29; 33)
30 WHITESPACE@[33; 34)
31 NAME@[34; 36)
32 IDENT@[34; 36) "E3"
33 WHITESPACE@[36; 37)
34 L_CURLY@[37; 38)
35 WHITESPACE@[38; 43)
36 ENUM_VARIANT@[43; 44)
37 NAME@[43; 44)
38 IDENT@[43; 44) "X"
39 WHITESPACE@[44; 45)
40 R_CURLY@[45; 46)
41 WHITESPACE@[46; 48)
42 ENUM_ITEM@[48; 66)
43 ENUM_KW@[48; 52)
44 WHITESPACE@[52; 53)
45 NAME@[53; 55)
46 IDENT@[53; 55) "E4"
47 WHITESPACE@[55; 56)
48 L_CURLY@[56; 57)
49 WHITESPACE@[57; 62)
50 ENUM_VARIANT@[62; 63)
51 NAME@[62; 63)
52 IDENT@[62; 63) "X"
53 COMMA@[63; 64)
54 WHITESPACE@[64; 65)
55 R_CURLY@[65; 66)
56 WHITESPACE@[66; 68)
57 ENUM_ITEM@[68; 181)
58 ENUM_KW@[68; 72)
59 WHITESPACE@[72; 73)
60 NAME@[73; 75)
61 IDENT@[73; 75) "E5"
62 WHITESPACE@[75; 76)
63 L_CURLY@[76; 77)
64 WHITESPACE@[77; 82)
65 ENUM_VARIANT@[82; 83)
66 NAME@[82; 83)
67 IDENT@[82; 83) "A"
68 COMMA@[83; 84)
69 WHITESPACE@[84; 89)
70 ENUM_VARIANT@[89; 95)
71 NAME@[89; 90)
72 IDENT@[89; 90) "B"
73 WHITESPACE@[90; 91)
74 EQ@[91; 92)
75 WHITESPACE@[92; 93)
76 LITERAL@[93; 95)
77 INT_NUMBER@[93; 95) "92"
78 COMMA@[95; 96)
79 WHITESPACE@[96; 101)
80 ENUM_VARIANT@[101; 146)
81 NAME@[101; 102)
82 IDENT@[101; 102) "C"
83 WHITESPACE@[102; 103)
84 L_CURLY@[103; 104)
85 WHITESPACE@[104; 113)
86 NAMED_FIELD@[113; 119)
87 NAME@[113; 114)
88 IDENT@[113; 114) "a"
89 COLON@[114; 115)
90 WHITESPACE@[115; 116)
91 PATH_TYPE@[116; 119)
92 PATH@[116; 119)
93 PATH_SEGMENT@[116; 119)
94 NAME_REF@[116; 119)
95 IDENT@[116; 119) "u32"
96 COMMA@[119; 120)
97 WHITESPACE@[120; 129)
98 NAMED_FIELD@[129; 139)
99 VISIBILITY@[129; 132)
100 PUB_KW@[129; 132)
101 WHITESPACE@[132; 133)
102 NAME@[133; 134)
103 IDENT@[133; 134) "b"
104 COLON@[134; 135)
105 WHITESPACE@[135; 136)
106 PATH_TYPE@[136; 139)
107 PATH@[136; 139)
108 PATH_SEGMENT@[136; 139)
109 NAME_REF@[136; 139)
110 IDENT@[136; 139) "f64"
111 COMMA@[139; 140)
112 WHITESPACE@[140; 145)
113 R_CURLY@[145; 146)
114 COMMA@[146; 147)
115 WHITESPACE@[147; 152)
116 ENUM_VARIANT@[152; 156)
117 NAME@[152; 153)
118 IDENT@[152; 153) "F"
119 WHITESPACE@[153; 154)
120 L_CURLY@[154; 155)
121 R_CURLY@[155; 156)
122 COMMA@[156; 157)
123 WHITESPACE@[157; 162)
124 ENUM_VARIANT@[162; 169)
125 NAME@[162; 163)
126 IDENT@[162; 163) "D"
127 L_PAREN@[163; 164)
128 POS_FIELD@[164; 167)
129 PATH_TYPE@[164; 167)
130 PATH@[164; 167)
131 PATH_SEGMENT@[164; 167)
132 NAME_REF@[164; 167)
133 IDENT@[164; 167) "u32"
134 COMMA@[167; 168)
135 R_PAREN@[168; 169)
136 COMMA@[169; 170)
137 WHITESPACE@[170; 175)
138 ENUM_VARIANT@[175; 178)
139 NAME@[175; 176)
140 IDENT@[175; 176) "E"
141 L_PAREN@[176; 177)
142 R_PAREN@[177; 178)
143 COMMA@[178; 179)
144 WHITESPACE@[179; 180)
145 R_CURLY@[180; 181)
146 WHITESPACE@[181; 182)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0020_type_param_bounds.rs b/crates/libsyntax2/tests/data/parser/ok/0020_type_param_bounds.rs
new file mode 100644
index 000000000..a1b9f00a4
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0020_type_param_bounds.rs
@@ -0,0 +1,9 @@
1struct A<T>;
2struct B<T:>;
3struct C<T: 'a>;
4struct D<T: 'a + >;
5struct E<T: 'a + 'd >;
6struct F<T: 'a + 'd + Clone>;
7struct G<T: Clone + Copy>;
8struct H<T: ::Foo + self::Bar + 'a>;
9struct I<T:, U:,>;
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
new file mode 100644
index 000000000..fe12cbb94
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0020_type_param_bounds.txt
@@ -0,0 +1,193 @@
1FILE@[0; 200)
2 STRUCT_ITEM@[0; 12)
3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7)
5 NAME@[7; 8)
6 IDENT@[7; 8) "A"
7 TYPE_PARAM_LIST@[8; 11)
8 L_ANGLE@[8; 9)
9 TYPE_PARAM@[9; 10)
10 NAME@[9; 10)
11 IDENT@[9; 10) "T"
12 R_ANGLE@[10; 11)
13 SEMI@[11; 12)
14 WHITESPACE@[12; 13)
15 STRUCT_ITEM@[13; 26)
16 STRUCT_KW@[13; 19)
17 WHITESPACE@[19; 20)
18 NAME@[20; 21)
19 IDENT@[20; 21) "B"
20 TYPE_PARAM_LIST@[21; 25)
21 L_ANGLE@[21; 22)
22 TYPE_PARAM@[22; 24)
23 NAME@[22; 23)
24 IDENT@[22; 23) "T"
25 COLON@[23; 24)
26 R_ANGLE@[24; 25)
27 SEMI@[25; 26)
28 WHITESPACE@[26; 27)
29 STRUCT_ITEM@[27; 43)
30 STRUCT_KW@[27; 33)
31 WHITESPACE@[33; 34)
32 NAME@[34; 35)
33 IDENT@[34; 35) "C"
34 TYPE_PARAM_LIST@[35; 42)
35 L_ANGLE@[35; 36)
36 TYPE_PARAM@[36; 41)
37 NAME@[36; 37)
38 IDENT@[36; 37) "T"
39 COLON@[37; 38)
40 WHITESPACE@[38; 39)
41 LIFETIME@[39; 41) "'a"
42 R_ANGLE@[41; 42)
43 SEMI@[42; 43)
44 WHITESPACE@[43; 44)
45 STRUCT_ITEM@[44; 63)
46 STRUCT_KW@[44; 50)
47 WHITESPACE@[50; 51)
48 NAME@[51; 52)
49 IDENT@[51; 52) "D"
50 TYPE_PARAM_LIST@[52; 62)
51 L_ANGLE@[52; 53)
52 TYPE_PARAM@[53; 60)
53 NAME@[53; 54)
54 IDENT@[53; 54) "T"
55 COLON@[54; 55)
56 WHITESPACE@[55; 56)
57 LIFETIME@[56; 58) "'a"
58 WHITESPACE@[58; 59)
59 PLUS@[59; 60)
60 WHITESPACE@[60; 61)
61 R_ANGLE@[61; 62)
62 SEMI@[62; 63)
63 WHITESPACE@[63; 64)
64 STRUCT_ITEM@[64; 86)
65 STRUCT_KW@[64; 70)
66 WHITESPACE@[70; 71)
67 NAME@[71; 72)
68 IDENT@[71; 72) "E"
69 TYPE_PARAM_LIST@[72; 85)
70 L_ANGLE@[72; 73)
71 TYPE_PARAM@[73; 83)
72 NAME@[73; 74)
73 IDENT@[73; 74) "T"
74 COLON@[74; 75)
75 WHITESPACE@[75; 76)
76 LIFETIME@[76; 78) "'a"
77 WHITESPACE@[78; 79)
78 PLUS@[79; 80)
79 WHITESPACE@[80; 81)
80 LIFETIME@[81; 83) "'d"
81 WHITESPACE@[83; 84)
82 R_ANGLE@[84; 85)
83 SEMI@[85; 86)
84 WHITESPACE@[86; 87)
85 STRUCT_ITEM@[87; 116)
86 STRUCT_KW@[87; 93)
87 WHITESPACE@[93; 94)
88 NAME@[94; 95)
89 IDENT@[94; 95) "F"
90 TYPE_PARAM_LIST@[95; 115)
91 L_ANGLE@[95; 96)
92 TYPE_PARAM@[96; 114)
93 NAME@[96; 97)
94 IDENT@[96; 97) "T"
95 COLON@[97; 98)
96 WHITESPACE@[98; 99)
97 LIFETIME@[99; 101) "'a"
98 WHITESPACE@[101; 102)
99 PLUS@[102; 103)
100 WHITESPACE@[103; 104)
101 LIFETIME@[104; 106) "'d"
102 WHITESPACE@[106; 107)
103 PLUS@[107; 108)
104 WHITESPACE@[108; 109)
105 PATH@[109; 114)
106 PATH_SEGMENT@[109; 114)
107 NAME_REF@[109; 114)
108 IDENT@[109; 114) "Clone"
109 R_ANGLE@[114; 115)
110 SEMI@[115; 116)
111 WHITESPACE@[116; 117)
112 STRUCT_ITEM@[117; 143)
113 STRUCT_KW@[117; 123)
114 WHITESPACE@[123; 124)
115 NAME@[124; 125)
116 IDENT@[124; 125) "G"
117 TYPE_PARAM_LIST@[125; 142)
118 L_ANGLE@[125; 126)
119 TYPE_PARAM@[126; 141)
120 NAME@[126; 127)
121 IDENT@[126; 127) "T"
122 COLON@[127; 128)
123 WHITESPACE@[128; 129)
124 PATH@[129; 134)
125 PATH_SEGMENT@[129; 134)
126 NAME_REF@[129; 134)
127 IDENT@[129; 134) "Clone"
128 WHITESPACE@[134; 135)
129 PLUS@[135; 136)
130 WHITESPACE@[136; 137)
131 PATH@[137; 141)
132 PATH_SEGMENT@[137; 141)
133 NAME_REF@[137; 141)
134 IDENT@[137; 141) "Copy"
135 R_ANGLE@[141; 142)
136 SEMI@[142; 143)
137 WHITESPACE@[143; 144)
138 STRUCT_ITEM@[144; 180)
139 STRUCT_KW@[144; 150)
140 WHITESPACE@[150; 151)
141 NAME@[151; 152)
142 IDENT@[151; 152) "H"
143 TYPE_PARAM_LIST@[152; 179)
144 L_ANGLE@[152; 153)
145 TYPE_PARAM@[153; 178)
146 NAME@[153; 154)
147 IDENT@[153; 154) "T"
148 COLON@[154; 155)
149 WHITESPACE@[155; 156)
150 PATH@[156; 161)
151 PATH_SEGMENT@[156; 161)
152 COLONCOLON@[156; 158)
153 NAME_REF@[158; 161)
154 IDENT@[158; 161) "Foo"
155 WHITESPACE@[161; 162)
156 PLUS@[162; 163)
157 WHITESPACE@[163; 164)
158 PATH@[164; 173)
159 PATH@[164; 168)
160 PATH_SEGMENT@[164; 168)
161 SELF_KW@[164; 168)
162 COLONCOLON@[168; 170)
163 PATH_SEGMENT@[170; 173)
164 NAME_REF@[170; 173)
165 IDENT@[170; 173) "Bar"
166 WHITESPACE@[173; 174)
167 PLUS@[174; 175)
168 WHITESPACE@[175; 176)
169 LIFETIME@[176; 178) "'a"
170 R_ANGLE@[178; 179)
171 SEMI@[179; 180)
172 WHITESPACE@[180; 181)
173 STRUCT_ITEM@[181; 199)
174 STRUCT_KW@[181; 187)
175 WHITESPACE@[187; 188)
176 NAME@[188; 189)
177 IDENT@[188; 189) "I"
178 TYPE_PARAM_LIST@[189; 198)
179 L_ANGLE@[189; 190)
180 TYPE_PARAM@[190; 192)
181 NAME@[190; 191)
182 IDENT@[190; 191) "T"
183 COLON@[191; 192)
184 COMMA@[192; 193)
185 WHITESPACE@[193; 194)
186 TYPE_PARAM@[194; 196)
187 NAME@[194; 195)
188 IDENT@[194; 195) "U"
189 COLON@[195; 196)
190 COMMA@[196; 197)
191 R_ANGLE@[197; 198)
192 SEMI@[198; 199)
193 WHITESPACE@[199; 200)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0021_extern_fn.rs b/crates/libsyntax2/tests/data/parser/ok/0021_extern_fn.rs
new file mode 100644
index 000000000..e929eef74
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0021_extern_fn.rs
@@ -0,0 +1,8 @@
1extern fn foo() {
2}
3
4extern "C" fn bar() {
5}
6
7extern r"D" fn baz() {
8}
diff --git a/crates/libsyntax2/tests/data/parser/ok/0021_extern_fn.txt b/crates/libsyntax2/tests/data/parser/ok/0021_extern_fn.txt
new file mode 100644
index 000000000..07d5cc157
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0021_extern_fn.txt
@@ -0,0 +1,56 @@
1FILE@[0; 71)
2 FUNCTION@[0; 19)
3 ABI@[0; 6)
4 EXTERN_KW@[0; 6)
5 WHITESPACE@[6; 7)
6 FN_KW@[7; 9)
7 WHITESPACE@[9; 10)
8 NAME@[10; 13)
9 IDENT@[10; 13) "foo"
10 PARAM_LIST@[13; 15)
11 L_PAREN@[13; 14)
12 R_PAREN@[14; 15)
13 WHITESPACE@[15; 16)
14 BLOCK_EXPR@[16; 19)
15 L_CURLY@[16; 17)
16 WHITESPACE@[17; 18)
17 R_CURLY@[18; 19)
18 WHITESPACE@[19; 21)
19 FUNCTION@[21; 44)
20 ABI@[21; 31)
21 EXTERN_KW@[21; 27)
22 WHITESPACE@[27; 28)
23 STRING@[28; 31)
24 WHITESPACE@[31; 32)
25 FN_KW@[32; 34)
26 WHITESPACE@[34; 35)
27 NAME@[35; 38)
28 IDENT@[35; 38) "bar"
29 PARAM_LIST@[38; 40)
30 L_PAREN@[38; 39)
31 R_PAREN@[39; 40)
32 WHITESPACE@[40; 41)
33 BLOCK_EXPR@[41; 44)
34 L_CURLY@[41; 42)
35 WHITESPACE@[42; 43)
36 R_CURLY@[43; 44)
37 WHITESPACE@[44; 46)
38 FUNCTION@[46; 70)
39 ABI@[46; 57)
40 EXTERN_KW@[46; 52)
41 WHITESPACE@[52; 53)
42 RAW_STRING@[53; 57)
43 WHITESPACE@[57; 58)
44 FN_KW@[58; 60)
45 WHITESPACE@[60; 61)
46 NAME@[61; 64)
47 IDENT@[61; 64) "baz"
48 PARAM_LIST@[64; 66)
49 L_PAREN@[64; 65)
50 R_PAREN@[65; 66)
51 WHITESPACE@[66; 67)
52 BLOCK_EXPR@[67; 70)
53 L_CURLY@[67; 68)
54 WHITESPACE@[68; 69)
55 R_CURLY@[69; 70)
56 WHITESPACE@[70; 71)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0022_empty_extern_block.rs b/crates/libsyntax2/tests/data/parser/ok/0022_empty_extern_block.rs
new file mode 100644
index 000000000..f5fe0e6ef
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0022_empty_extern_block.rs
@@ -0,0 +1,5 @@
1extern {
2}
3
4extern "C" {
5}
diff --git a/crates/libsyntax2/tests/data/parser/ok/0022_empty_extern_block.txt b/crates/libsyntax2/tests/data/parser/ok/0022_empty_extern_block.txt
new file mode 100644
index 000000000..81b92d394
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0022_empty_extern_block.txt
@@ -0,0 +1,19 @@
1FILE@[0; 27)
2 EXTERN_BLOCK_EXPR@[0; 10)
3 ABI@[0; 6)
4 EXTERN_KW@[0; 6)
5 WHITESPACE@[6; 7)
6 L_CURLY@[7; 8)
7 WHITESPACE@[8; 9)
8 R_CURLY@[9; 10)
9 WHITESPACE@[10; 12)
10 EXTERN_BLOCK_EXPR@[12; 26)
11 ABI@[12; 22)
12 EXTERN_KW@[12; 18)
13 WHITESPACE@[18; 19)
14 STRING@[19; 22)
15 WHITESPACE@[22; 23)
16 L_CURLY@[23; 24)
17 WHITESPACE@[24; 25)
18 R_CURLY@[25; 26)
19 WHITESPACE@[26; 27)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0023_static_items.rs b/crates/libsyntax2/tests/data/parser/ok/0023_static_items.rs
new file mode 100644
index 000000000..5fb92ce33
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0023_static_items.rs
@@ -0,0 +1,2 @@
1static FOO: u32 = 1;
2static mut BAR: i32 = 92;
diff --git a/crates/libsyntax2/tests/data/parser/ok/0023_static_items.txt b/crates/libsyntax2/tests/data/parser/ok/0023_static_items.txt
new file mode 100644
index 000000000..b8dfdd251
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0023_static_items.txt
@@ -0,0 +1,41 @@
1FILE@[0; 47)
2 STATIC_ITEM@[0; 20)
3 STATIC_KW@[0; 6)
4 WHITESPACE@[6; 7)
5 NAME@[7; 10)
6 IDENT@[7; 10) "FOO"
7 COLON@[10; 11)
8 WHITESPACE@[11; 12)
9 PATH_TYPE@[12; 15)
10 PATH@[12; 15)
11 PATH_SEGMENT@[12; 15)
12 NAME_REF@[12; 15)
13 IDENT@[12; 15) "u32"
14 WHITESPACE@[15; 16)
15 EQ@[16; 17)
16 WHITESPACE@[17; 18)
17 LITERAL@[18; 19)
18 INT_NUMBER@[18; 19) "1"
19 SEMI@[19; 20)
20 WHITESPACE@[20; 21)
21 STATIC_ITEM@[21; 46)
22 STATIC_KW@[21; 27)
23 WHITESPACE@[27; 28)
24 MUT_KW@[28; 31)
25 WHITESPACE@[31; 32)
26 NAME@[32; 35)
27 IDENT@[32; 35) "BAR"
28 COLON@[35; 36)
29 WHITESPACE@[36; 37)
30 PATH_TYPE@[37; 40)
31 PATH@[37; 40)
32 PATH_SEGMENT@[37; 40)
33 NAME_REF@[37; 40)
34 IDENT@[37; 40) "i32"
35 WHITESPACE@[40; 41)
36 EQ@[41; 42)
37 WHITESPACE@[42; 43)
38 LITERAL@[43; 45)
39 INT_NUMBER@[43; 45) "92"
40 SEMI@[45; 46)
41 WHITESPACE@[46; 47)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0024_const_item.rs b/crates/libsyntax2/tests/data/parser/ok/0024_const_item.rs
new file mode 100644
index 000000000..7446859b5
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0024_const_item.rs
@@ -0,0 +1,2 @@
1const FOO: u32 = 92;
2const mut BAR: u32 = 62;
diff --git a/crates/libsyntax2/tests/data/parser/ok/0024_const_item.txt b/crates/libsyntax2/tests/data/parser/ok/0024_const_item.txt
new file mode 100644
index 000000000..85083e9c1
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0024_const_item.txt
@@ -0,0 +1,41 @@
1FILE@[0; 46)
2 CONST_ITEM@[0; 20)
3 CONST_KW@[0; 5)
4 WHITESPACE@[5; 6)
5 NAME@[6; 9)
6 IDENT@[6; 9) "FOO"
7 COLON@[9; 10)
8 WHITESPACE@[10; 11)
9 PATH_TYPE@[11; 14)
10 PATH@[11; 14)
11 PATH_SEGMENT@[11; 14)
12 NAME_REF@[11; 14)
13 IDENT@[11; 14) "u32"
14 WHITESPACE@[14; 15)
15 EQ@[15; 16)
16 WHITESPACE@[16; 17)
17 LITERAL@[17; 19)
18 INT_NUMBER@[17; 19) "92"
19 SEMI@[19; 20)
20 WHITESPACE@[20; 21)
21 CONST_ITEM@[21; 45)
22 CONST_KW@[21; 26)
23 WHITESPACE@[26; 27)
24 MUT_KW@[27; 30)
25 WHITESPACE@[30; 31)
26 NAME@[31; 34)
27 IDENT@[31; 34) "BAR"
28 COLON@[34; 35)
29 WHITESPACE@[35; 36)
30 PATH_TYPE@[36; 39)
31 PATH@[36; 39)
32 PATH_SEGMENT@[36; 39)
33 NAME_REF@[36; 39)
34 IDENT@[36; 39) "u32"
35 WHITESPACE@[39; 40)
36 EQ@[40; 41)
37 WHITESPACE@[41; 42)
38 LITERAL@[42; 44)
39 INT_NUMBER@[42; 44) "62"
40 SEMI@[44; 45)
41 WHITESPACE@[45; 46)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0025_extern_fn_in_block.rs b/crates/libsyntax2/tests/data/parser/ok/0025_extern_fn_in_block.rs
new file mode 100644
index 000000000..289809809
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0025_extern_fn_in_block.rs
@@ -0,0 +1,3 @@
1fn main() {
2 extern fn f() {}
3}
diff --git a/crates/libsyntax2/tests/data/parser/ok/0025_extern_fn_in_block.txt b/crates/libsyntax2/tests/data/parser/ok/0025_extern_fn_in_block.txt
new file mode 100644
index 000000000..46fb177b2
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0025_extern_fn_in_block.txt
@@ -0,0 +1,31 @@
1FILE@[0; 35)
2 FUNCTION@[0; 34)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 7)
6 IDENT@[3; 7) "main"
7 PARAM_LIST@[7; 9)
8 L_PAREN@[7; 8)
9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10)
11 BLOCK_EXPR@[10; 34)
12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16)
14 FUNCTION@[16; 32)
15 ABI@[16; 22)
16 EXTERN_KW@[16; 22)
17 WHITESPACE@[22; 23)
18 FN_KW@[23; 25)
19 WHITESPACE@[25; 26)
20 NAME@[26; 27)
21 IDENT@[26; 27) "f"
22 PARAM_LIST@[27; 29)
23 L_PAREN@[27; 28)
24 R_PAREN@[28; 29)
25 WHITESPACE@[29; 30)
26 BLOCK_EXPR@[30; 32)
27 L_CURLY@[30; 31)
28 R_CURLY@[31; 32)
29 WHITESPACE@[32; 33)
30 R_CURLY@[33; 34)
31 WHITESPACE@[34; 35)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0026_const_fn_in_block.rs b/crates/libsyntax2/tests/data/parser/ok/0026_const_fn_in_block.rs
new file mode 100644
index 000000000..7641a3d28
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0026_const_fn_in_block.rs
@@ -0,0 +1,3 @@
1fn main() {
2 const fn f() {}
3}
diff --git a/crates/libsyntax2/tests/data/parser/ok/0026_const_fn_in_block.txt b/crates/libsyntax2/tests/data/parser/ok/0026_const_fn_in_block.txt
new file mode 100644
index 000000000..a450762a8
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0026_const_fn_in_block.txt
@@ -0,0 +1,30 @@
1FILE@[0; 34)
2 FUNCTION@[0; 33)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 7)
6 IDENT@[3; 7) "main"
7 PARAM_LIST@[7; 9)
8 L_PAREN@[7; 8)
9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10)
11 BLOCK_EXPR@[10; 33)
12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16)
14 FUNCTION@[16; 31)
15 CONST_KW@[16; 21)
16 WHITESPACE@[21; 22)
17 FN_KW@[22; 24)
18 WHITESPACE@[24; 25)
19 NAME@[25; 26)
20 IDENT@[25; 26) "f"
21 PARAM_LIST@[26; 28)
22 L_PAREN@[26; 27)
23 R_PAREN@[27; 28)
24 WHITESPACE@[28; 29)
25 BLOCK_EXPR@[29; 31)
26 L_CURLY@[29; 30)
27 R_CURLY@[30; 31)
28 WHITESPACE@[31; 32)
29 R_CURLY@[32; 33)
30 WHITESPACE@[33; 34)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0027_unsafe_fn_in_block.rs b/crates/libsyntax2/tests/data/parser/ok/0027_unsafe_fn_in_block.rs
new file mode 100644
index 000000000..f3c5ff938
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0027_unsafe_fn_in_block.rs
@@ -0,0 +1,4 @@
1fn main() {
2 unsafe fn f() {}
3 unsafe { 92 }
4}
diff --git a/crates/libsyntax2/tests/data/parser/ok/0027_unsafe_fn_in_block.txt b/crates/libsyntax2/tests/data/parser/ok/0027_unsafe_fn_in_block.txt
new file mode 100644
index 000000000..28cd7ad3d
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0027_unsafe_fn_in_block.txt
@@ -0,0 +1,40 @@
1FILE@[0; 53)
2 FUNCTION@[0; 52)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 7)
6 IDENT@[3; 7) "main"
7 PARAM_LIST@[7; 9)
8 L_PAREN@[7; 8)
9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10)
11 BLOCK_EXPR@[10; 52)
12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16)
14 FUNCTION@[16; 32)
15 UNSAFE_KW@[16; 22)
16 WHITESPACE@[22; 23)
17 FN_KW@[23; 25)
18 WHITESPACE@[25; 26)
19 NAME@[26; 27)
20 IDENT@[26; 27) "f"
21 PARAM_LIST@[27; 29)
22 L_PAREN@[27; 28)
23 R_PAREN@[28; 29)
24 WHITESPACE@[29; 30)
25 BLOCK_EXPR@[30; 32)
26 L_CURLY@[30; 31)
27 R_CURLY@[31; 32)
28 WHITESPACE@[32; 37)
29 BLOCK_EXPR@[37; 50)
30 UNSAFE_KW@[37; 43)
31 WHITESPACE@[43; 44)
32 L_CURLY@[44; 45)
33 WHITESPACE@[45; 46)
34 LITERAL@[46; 48)
35 INT_NUMBER@[46; 48) "92"
36 WHITESPACE@[48; 49)
37 R_CURLY@[49; 50)
38 WHITESPACE@[50; 51)
39 R_CURLY@[51; 52)
40 WHITESPACE@[52; 53)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0028_operator_binding_power.rs b/crates/libsyntax2/tests/data/parser/ok/0028_operator_binding_power.rs
new file mode 100644
index 000000000..cc9598470
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0028_operator_binding_power.rs
@@ -0,0 +1,14 @@
1fn binding_power() {
2 let x = 1 + 2 * 3 % 4 - 5 / 6;
3 1 + 2 * 3;
4 1 << 2 + 3;
5 1 & 2 >> 3;
6 1 ^ 2 & 3;
7 1 | 2 ^ 3;
8 1 == 2 | 3;
9 1 && 2 == 3;
10 //1 || 2 && 2;
11 //1 .. 2 || 3;
12 //1 = 2 .. 3;
13 //---&*1 - --2 * 9;
14}
diff --git a/crates/libsyntax2/tests/data/parser/ok/0028_operator_binding_power.txt b/crates/libsyntax2/tests/data/parser/ok/0028_operator_binding_power.txt
new file mode 100644
index 000000000..3fb1ae811
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0028_operator_binding_power.txt
@@ -0,0 +1,185 @@
1FILE@[0; 248)
2 FUNCTION@[0; 247)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 16)
6 IDENT@[3; 16) "binding_power"
7 PARAM_LIST@[16; 18)
8 L_PAREN@[16; 17)
9 R_PAREN@[17; 18)
10 WHITESPACE@[18; 19)
11 BLOCK_EXPR@[19; 247)
12 L_CURLY@[19; 20)
13 WHITESPACE@[20; 25)
14 LET_STMT@[25; 55)
15 LET_KW@[25; 28)
16 WHITESPACE@[28; 29)
17 BIND_PAT@[29; 30)
18 NAME@[29; 30)
19 IDENT@[29; 30) "x"
20 WHITESPACE@[30; 31)
21 EQ@[31; 32)
22 WHITESPACE@[32; 33)
23 BIN_EXPR@[33; 54)
24 BIN_EXPR@[33; 46)
25 LITERAL@[33; 34)
26 INT_NUMBER@[33; 34) "1"
27 WHITESPACE@[34; 35)
28 PLUS@[35; 36)
29 WHITESPACE@[36; 37)
30 BIN_EXPR@[37; 46)
31 BIN_EXPR@[37; 42)
32 LITERAL@[37; 38)
33 INT_NUMBER@[37; 38) "2"
34 WHITESPACE@[38; 39)
35 STAR@[39; 40)
36 WHITESPACE@[40; 41)
37 LITERAL@[41; 42)
38 INT_NUMBER@[41; 42) "3"
39 WHITESPACE@[42; 43)
40 PERCENT@[43; 44)
41 WHITESPACE@[44; 45)
42 LITERAL@[45; 46)
43 INT_NUMBER@[45; 46) "4"
44 WHITESPACE@[46; 47)
45 MINUS@[47; 48)
46 WHITESPACE@[48; 49)
47 BIN_EXPR@[49; 54)
48 LITERAL@[49; 50)
49 INT_NUMBER@[49; 50) "5"
50 WHITESPACE@[50; 51)
51 SLASH@[51; 52)
52 WHITESPACE@[52; 53)
53 LITERAL@[53; 54)
54 INT_NUMBER@[53; 54) "6"
55 SEMI@[54; 55)
56 WHITESPACE@[55; 60)
57 EXPR_STMT@[60; 70)
58 BIN_EXPR@[60; 69)
59 LITERAL@[60; 61)
60 INT_NUMBER@[60; 61) "1"
61 WHITESPACE@[61; 62)
62 PLUS@[62; 63)
63 WHITESPACE@[63; 64)
64 BIN_EXPR@[64; 69)
65 LITERAL@[64; 65)
66 INT_NUMBER@[64; 65) "2"
67 WHITESPACE@[65; 66)
68 STAR@[66; 67)
69 WHITESPACE@[67; 68)
70 LITERAL@[68; 69)
71 INT_NUMBER@[68; 69) "3"
72 SEMI@[69; 70)
73 WHITESPACE@[70; 75)
74 EXPR_STMT@[75; 86)
75 BIN_EXPR@[75; 85)
76 LITERAL@[75; 76)
77 INT_NUMBER@[75; 76) "1"
78 WHITESPACE@[76; 77)
79 SHL@[77; 79)
80 WHITESPACE@[79; 80)
81 BIN_EXPR@[80; 85)
82 LITERAL@[80; 81)
83 INT_NUMBER@[80; 81) "2"
84 WHITESPACE@[81; 82)
85 PLUS@[82; 83)
86 WHITESPACE@[83; 84)
87 LITERAL@[84; 85)
88 INT_NUMBER@[84; 85) "3"
89 SEMI@[85; 86)
90 WHITESPACE@[86; 91)
91 EXPR_STMT@[91; 102)
92 BIN_EXPR@[91; 101)
93 LITERAL@[91; 92)
94 INT_NUMBER@[91; 92) "1"
95 WHITESPACE@[92; 93)
96 AMP@[93; 94)
97 WHITESPACE@[94; 95)
98 BIN_EXPR@[95; 101)
99 LITERAL@[95; 96)
100 INT_NUMBER@[95; 96) "2"
101 WHITESPACE@[96; 97)
102 SHR@[97; 99)
103 WHITESPACE@[99; 100)
104 LITERAL@[100; 101)
105 INT_NUMBER@[100; 101) "3"
106 SEMI@[101; 102)
107 WHITESPACE@[102; 107)
108 EXPR_STMT@[107; 117)
109 BIN_EXPR@[107; 116)
110 LITERAL@[107; 108)
111 INT_NUMBER@[107; 108) "1"
112 WHITESPACE@[108; 109)
113 CARET@[109; 110)
114 WHITESPACE@[110; 111)
115 BIN_EXPR@[111; 116)
116 LITERAL@[111; 112)
117 INT_NUMBER@[111; 112) "2"
118 WHITESPACE@[112; 113)
119 AMP@[113; 114)
120 WHITESPACE@[114; 115)
121 LITERAL@[115; 116)
122 INT_NUMBER@[115; 116) "3"
123 SEMI@[116; 117)
124 WHITESPACE@[117; 122)
125 EXPR_STMT@[122; 132)
126 BIN_EXPR@[122; 131)
127 LITERAL@[122; 123)
128 INT_NUMBER@[122; 123) "1"
129 WHITESPACE@[123; 124)
130 PIPE@[124; 125)
131 WHITESPACE@[125; 126)
132 BIN_EXPR@[126; 131)
133 LITERAL@[126; 127)
134 INT_NUMBER@[126; 127) "2"
135 WHITESPACE@[127; 128)
136 CARET@[128; 129)
137 WHITESPACE@[129; 130)
138 LITERAL@[130; 131)
139 INT_NUMBER@[130; 131) "3"
140 SEMI@[131; 132)
141 WHITESPACE@[132; 137)
142 EXPR_STMT@[137; 148)
143 BIN_EXPR@[137; 147)
144 LITERAL@[137; 138)
145 INT_NUMBER@[137; 138) "1"
146 WHITESPACE@[138; 139)
147 EQEQ@[139; 141)
148 WHITESPACE@[141; 142)
149 BIN_EXPR@[142; 147)
150 LITERAL@[142; 143)
151 INT_NUMBER@[142; 143) "2"
152 WHITESPACE@[143; 144)
153 PIPE@[144; 145)
154 WHITESPACE@[145; 146)
155 LITERAL@[146; 147)
156 INT_NUMBER@[146; 147) "3"
157 SEMI@[147; 148)
158 WHITESPACE@[148; 153)
159 EXPR_STMT@[153; 165)
160 BIN_EXPR@[153; 164)
161 LITERAL@[153; 154)
162 INT_NUMBER@[153; 154) "1"
163 WHITESPACE@[154; 155)
164 AMPAMP@[155; 157)
165 WHITESPACE@[157; 158)
166 BIN_EXPR@[158; 164)
167 LITERAL@[158; 159)
168 INT_NUMBER@[158; 159) "2"
169 WHITESPACE@[159; 160)
170 EQEQ@[160; 162)
171 WHITESPACE@[162; 163)
172 LITERAL@[163; 164)
173 INT_NUMBER@[163; 164) "3"
174 SEMI@[164; 165)
175 WHITESPACE@[165; 170)
176 COMMENT@[170; 184)
177 WHITESPACE@[184; 189)
178 COMMENT@[189; 203)
179 WHITESPACE@[203; 208)
180 COMMENT@[208; 221)
181 WHITESPACE@[221; 226)
182 COMMENT@[226; 245)
183 WHITESPACE@[245; 246)
184 R_CURLY@[246; 247)
185 WHITESPACE@[247; 248)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0029_range_forms.rs b/crates/libsyntax2/tests/data/parser/ok/0029_range_forms.rs
new file mode 100644
index 000000000..03f4ae7b2
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0029_range_forms.rs
@@ -0,0 +1,6 @@
1fn foo() {
2 ..1 + 1;
3 ..z = 2;
4 x = false..1 == 1;
5 let x = 1..;
6}
diff --git a/crates/libsyntax2/tests/data/parser/ok/0029_range_forms.txt b/crates/libsyntax2/tests/data/parser/ok/0029_range_forms.txt
new file mode 100644
index 000000000..91d5e5bba
--- /dev/null
+++ b/crates/libsyntax2/tests/data/parser/ok/0029_range_forms.txt
@@ -0,0 +1,83 @@
1FILE@[0; 79)
2 FUNCTION@[0; 78)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 6)
6 IDENT@[3; 6) "foo"
7 PARAM_LIST@[6; 8)
8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 78)
12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 23)
15 RANGE_EXPR@[15; 22)
16 DOTDOT@[15; 17)
17 BIN_EXPR@[17; 22)
18 LITERAL@[17; 18)
19 INT_NUMBER@[17; 18) "1"
20 WHITESPACE@[18; 19)
21 PLUS@[19; 20)
22 WHITESPACE@[20; 21)
23 LITERAL@[21; 22)
24 INT_NUMBER@[21; 22) "1"
25 SEMI@[22; 23)
26 WHITESPACE@[23; 28)
27 EXPR_STMT@[28; 36)
28 BIN_EXPR@[28; 35)
29 RANGE_EXPR@[28; 31)
30 DOTDOT@[28; 30)
31 PATH_EXPR@[30; 31)
32 PATH@[30; 31)
33 PATH_SEGMENT@[30; 31)
34 NAME_REF@[30; 31)
35 IDENT@[30; 31) "z"
36 WHITESPACE@[31; 32)
37 EQ@[32; 33)
38 WHITESPACE@[33; 34)
39 LITERAL@[34; 35)
40 INT_NUMBER@[34; 35) "2"
41 SEMI@[35; 36)
42 WHITESPACE@[36; 41)
43 EXPR_STMT@[41; 59)
44 BIN_EXPR@[41; 58)
45 PATH_EXPR@[41; 42)
46 PATH@[41; 42)
47 PATH_SEGMENT@[41; 42)
48 NAME_REF@[41; 42)
49 IDENT@[41; 42) "x"
50 WHITESPACE@[42; 43)
51 EQ@[43; 44)
52 WHITESPACE@[44; 45)
53 RANGE_EXPR@[45; 58)
54 LITERAL@[45; 50)
55 FALSE_KW@[45; 50)
56 DOTDOT@[50; 52)
57 BIN_EXPR@[52; 58)
58 LITERAL@[52; 53)
59 INT_NUMBER@[52; 53) "1"
60 WHITESPACE@[53; 54)
61 EQEQ@[54; 56)
62 WHITESPACE@[56; 57)
63 LITERAL@[57; 58)
64 INT_NUMBER@[57; 58) "1"
65 SEMI@[58; 59)
66 WHITESPACE@[59; 64)
67 LET_STMT@[64; 76)
68 LET_KW@[64; 67)
69 WHITESPACE@[67; 68)
70 BIND_PAT@[68; 69)
71 NAME@[68; 69)
72 IDENT@[68; 69) "x"
73 WHITESPACE@[69; 70)
74 EQ@[70; 71)
75 WHITESPACE@[71; 72)
76 RANGE_EXPR@[72; 75)
77 LITERAL@[72; 73)
78 INT_NUMBER@[72; 73) "1"
79 DOTDOT@[73; 75)
80 SEMI@[75; 76)
81 WHITESPACE@[76; 77)
82 R_CURLY@[77; 78)
83 WHITESPACE@[78; 79)