aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_syntax/tests/data/parser/ok
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-09-16 10:54:24 +0100
committerAleksey Kladov <[email protected]>2018-09-16 11:07:39 +0100
commitb5021411a84822cb3f1e3aeffad9550dd15bdeb6 (patch)
tree9dca564f8e51b298dced01c4ce669c756dce3142 /crates/ra_syntax/tests/data/parser/ok
parentba0bfeee12e19da40b5eabc8d0408639af10e96f (diff)
rename all things
Diffstat (limited to 'crates/ra_syntax/tests/data/parser/ok')
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0000_empty.rs0
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0000_empty.txt1
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0001_struct_item.rs3
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0001_struct_item.txt37
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0002_struct_item_field.rs3
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0002_struct_item_field.txt22
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0004_file_shebang.rs1
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0004_file_shebang.txt2
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0005_fn_item.rs2
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0005_fn_item.txt15
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0006_inner_attributes.rs10
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0006_inner_attributes.txt164
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0007_extern_crate.rs2
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0007_extern_crate.txt25
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0008_mod_item.rs17
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0008_mod_item.txt90
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0009_use_item.rs2
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0009_use_item.txt21
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0010_use_path_segments.rs2
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0010_use_path_segments.txt42
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0011_outer_attribute.rs3
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0011_outer_attribute.txt32
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0012_visibility.rs5
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0012_visibility.txt102
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0013_use_path_self_super.rs3
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0013_use_path_self_super.txt57
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0014_use_tree.rs7
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0014_use_tree.txt95
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0015_use_tree.rs2
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0015_use_tree.txt65
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0016_struct_flavors.rs10
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0016_struct_flavors.txt93
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0017_attr_trailing_comma.rs2
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0017_attr_trailing_comma.txt26
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0018_struct_type_params.rs17
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0018_struct_type_params.txt257
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0019_enums.rs25
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0019_enums.txt155
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0020_type_param_bounds.rs9
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0020_type_param_bounds.txt198
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0021_extern_fn.rs8
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0021_extern_fn.txt56
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0022_empty_extern_block.rs5
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0022_empty_extern_block.txt21
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0023_static_items.rs2
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0023_static_items.txt41
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0024_const_item.rs2
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0024_const_item.txt41
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0025_extern_fn_in_block.rs3
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0025_extern_fn_in_block.txt31
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0026_const_fn_in_block.rs3
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0026_const_fn_in_block.txt30
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0027_unsafe_fn_in_block.rs4
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0027_unsafe_fn_in_block.txt41
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0028_operator_binding_power.rs14
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0028_operator_binding_power.txt185
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0029_range_forms.rs6
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0029_range_forms.txt83
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0030_traits.rs11
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0030_traits.txt93
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0031_extern.rs29
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0031_extern.txt973
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0032_where_for.rs4
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0032_where_for.txt85
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0033_label_break.rs28
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0033_label_break.txt215
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0034_macro_2.0.rs16
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0034_macro_2.0.txt317
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0034_macro_stuck.txt250
69 files changed, 4221 insertions, 0 deletions
diff --git a/crates/ra_syntax/tests/data/parser/ok/0000_empty.rs b/crates/ra_syntax/tests/data/parser/ok/0000_empty.rs
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0000_empty.rs
diff --git a/crates/ra_syntax/tests/data/parser/ok/0000_empty.txt b/crates/ra_syntax/tests/data/parser/ok/0000_empty.txt
new file mode 100644
index 000000000..9f505ee96
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0000_empty.txt
@@ -0,0 +1 @@
ROOT@[0; 0)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0001_struct_item.rs b/crates/ra_syntax/tests/data/parser/ok/0001_struct_item.rs
new file mode 100644
index 000000000..512aeb3e7
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0001_struct_item.rs
@@ -0,0 +1,3 @@
1struct S<T: Copy> {
2 f: T,
3}
diff --git a/crates/ra_syntax/tests/data/parser/ok/0001_struct_item.txt b/crates/ra_syntax/tests/data/parser/ok/0001_struct_item.txt
new file mode 100644
index 000000000..aa2f1b712
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0001_struct_item.txt
@@ -0,0 +1,37 @@
1ROOT@[0; 32)
2 STRUCT_DEF@[0; 31)
3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7)
5 NAME@[7; 8)
6 IDENT@[7; 8) "S"
7 TYPE_PARAM_LIST@[8; 17)
8 L_ANGLE@[8; 9)
9 TYPE_PARAM@[9; 16)
10 NAME@[9; 10)
11 IDENT@[9; 10) "T"
12 COLON@[10; 11)
13 WHITESPACE@[11; 12)
14 PATH_TYPE@[12; 16)
15 PATH@[12; 16)
16 PATH_SEGMENT@[12; 16)
17 NAME_REF@[12; 16)
18 IDENT@[12; 16) "Copy"
19 R_ANGLE@[16; 17)
20 WHITESPACE@[17; 18)
21 NAMED_FIELD_DEF_LIST@[18; 31)
22 L_CURLY@[18; 19)
23 WHITESPACE@[19; 24)
24 NAMED_FIELD_DEF@[24; 28)
25 NAME@[24; 25)
26 IDENT@[24; 25) "f"
27 COLON@[25; 26)
28 WHITESPACE@[26; 27)
29 PATH_TYPE@[27; 28)
30 PATH@[27; 28)
31 PATH_SEGMENT@[27; 28)
32 NAME_REF@[27; 28)
33 IDENT@[27; 28) "T"
34 COMMA@[28; 29)
35 WHITESPACE@[29; 30)
36 R_CURLY@[30; 31)
37 WHITESPACE@[31; 32)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0002_struct_item_field.rs b/crates/ra_syntax/tests/data/parser/ok/0002_struct_item_field.rs
new file mode 100644
index 000000000..cc3866d25
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0002_struct_item_field.txt b/crates/ra_syntax/tests/data/parser/ok/0002_struct_item_field.txt
new file mode 100644
index 000000000..0b65387ef
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0002_struct_item_field.txt
@@ -0,0 +1,22 @@
1ROOT@[0; 25)
2 STRUCT_DEF@[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 NAMED_FIELD_DEF_LIST@[9; 25)
9 L_CURLY@[9; 10)
10 WHITESPACE@[10; 15)
11 NAMED_FIELD_DEF@[15; 23)
12 NAME@[15; 18)
13 IDENT@[15; 18) "foo"
14 COLON@[18; 19)
15 WHITESPACE@[19; 20)
16 PATH_TYPE@[20; 23)
17 PATH@[20; 23)
18 PATH_SEGMENT@[20; 23)
19 NAME_REF@[20; 23)
20 IDENT@[20; 23) "u32"
21 WHITESPACE@[23; 24)
22 R_CURLY@[24; 25)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0004_file_shebang.rs b/crates/ra_syntax/tests/data/parser/ok/0004_file_shebang.rs
new file mode 100644
index 000000000..53dc9e617
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0004_file_shebang.txt b/crates/ra_syntax/tests/data/parser/ok/0004_file_shebang.txt
new file mode 100644
index 000000000..bb8874ead
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0004_file_shebang.txt
@@ -0,0 +1,2 @@
1ROOT@[0; 20)
2 SHEBANG@[0; 20)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0005_fn_item.rs b/crates/ra_syntax/tests/data/parser/ok/0005_fn_item.rs
new file mode 100644
index 000000000..03210551c
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0005_fn_item.rs
@@ -0,0 +1,2 @@
1fn foo() {
2}
diff --git a/crates/ra_syntax/tests/data/parser/ok/0005_fn_item.txt b/crates/ra_syntax/tests/data/parser/ok/0005_fn_item.txt
new file mode 100644
index 000000000..8ed92f2a4
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0005_fn_item.txt
@@ -0,0 +1,15 @@
1ROOT@[0; 13)
2 FN_DEF@[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@[9; 12)
12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 11)
14 R_CURLY@[11; 12)
15 WHITESPACE@[12; 13)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0006_inner_attributes.rs b/crates/ra_syntax/tests/data/parser/ok/0006_inner_attributes.rs
new file mode 100644
index 000000000..e81f8b1e8
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0006_inner_attributes.txt b/crates/ra_syntax/tests/data/parser/ok/0006_inner_attributes.txt
new file mode 100644
index 000000000..2b64c497f
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0006_inner_attributes.txt
@@ -0,0 +1,164 @@
1ROOT@[0; 236)
2 ATTR@[0; 8)
3 POUND@[0; 1)
4 EXCL@[1; 2)
5 TOKEN_TREE@[2; 8)
6 L_BRACK@[2; 3)
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 TOKEN_TREE@[11; 23)
14 L_BRACK@[11; 12)
15 IDENT@[12; 16) "attr"
16 TOKEN_TREE@[16; 22)
17 L_PAREN@[16; 17)
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 TOKEN_TREE@[26; 39)
26 L_BRACK@[26; 27)
27 IDENT@[27; 31) "attr"
28 TOKEN_TREE@[31; 38)
29 L_PAREN@[31; 32)
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 TOKEN_TREE@[42; 116)
38 L_BRACK@[42; 43)
39 IDENT@[43; 47) "attr"
40 TOKEN_TREE@[47; 115)
41 L_PAREN@[47; 48)
42 IDENT@[48; 53) "ident"
43 COMMA@[53; 54)
44 WHITESPACE@[54; 55)
45 INT_NUMBER@[55; 58) "100"
46 COMMA@[58; 59)
47 WHITESPACE@[59; 60)
48 TRUE_KW@[60; 64)
49 COMMA@[64; 65)
50 WHITESPACE@[65; 66)
51 STRING@[66; 72)
52 COMMA@[72; 73)
53 WHITESPACE@[73; 74)
54 IDENT@[74; 79) "ident"
55 WHITESPACE@[79; 80)
56 EQ@[80; 81)
57 WHITESPACE@[81; 82)
58 INT_NUMBER@[82; 85) "100"
59 COMMA@[85; 86)
60 WHITESPACE@[86; 87)
61 IDENT@[87; 92) "ident"
62 WHITESPACE@[92; 93)
63 EQ@[93; 94)
64 WHITESPACE@[94; 95)
65 STRING@[95; 102)
66 COMMA@[102; 103)
67 WHITESPACE@[103; 104)
68 IDENT@[104; 109) "ident"
69 TOKEN_TREE@[109; 114)
70 L_PAREN@[109; 110)
71 INT_NUMBER@[110; 113) "100"
72 R_PAREN@[113; 114)
73 R_PAREN@[114; 115)
74 R_BRACK@[115; 116)
75 WHITESPACE@[116; 117)
76 ATTR@[117; 130)
77 POUND@[117; 118)
78 EXCL@[118; 119)
79 TOKEN_TREE@[119; 130)
80 L_BRACK@[119; 120)
81 IDENT@[120; 124) "attr"
82 TOKEN_TREE@[124; 129)
83 L_PAREN@[124; 125)
84 INT_NUMBER@[125; 128) "100"
85 R_PAREN@[128; 129)
86 R_BRACK@[129; 130)
87 WHITESPACE@[130; 131)
88 ATTR@[131; 155)
89 POUND@[131; 132)
90 EXCL@[132; 133)
91 TOKEN_TREE@[133; 155)
92 L_BRACK@[133; 134)
93 IDENT@[134; 138) "attr"
94 TOKEN_TREE@[138; 154)
95 L_PAREN@[138; 139)
96 IDENT@[139; 146) "enabled"
97 WHITESPACE@[146; 147)
98 EQ@[147; 148)
99 WHITESPACE@[148; 149)
100 TRUE_KW@[149; 153)
101 R_PAREN@[153; 154)
102 R_BRACK@[154; 155)
103 WHITESPACE@[155; 156)
104 ATTR@[156; 173)
105 POUND@[156; 157)
106 EXCL@[157; 158)
107 TOKEN_TREE@[158; 173)
108 L_BRACK@[158; 159)
109 IDENT@[159; 166) "enabled"
110 TOKEN_TREE@[166; 172)
111 L_PAREN@[166; 167)
112 TRUE_KW@[167; 171)
113 R_PAREN@[171; 172)
114 R_BRACK@[172; 173)
115 WHITESPACE@[173; 174)
116 ATTR@[174; 191)
117 POUND@[174; 175)
118 EXCL@[175; 176)
119 TOKEN_TREE@[176; 191)
120 L_BRACK@[176; 177)
121 IDENT@[177; 181) "attr"
122 TOKEN_TREE@[181; 190)
123 L_PAREN@[181; 182)
124 STRING@[182; 189)
125 R_PAREN@[189; 190)
126 R_BRACK@[190; 191)
127 WHITESPACE@[191; 192)
128 ATTR@[192; 214)
129 POUND@[192; 193)
130 EXCL@[193; 194)
131 TOKEN_TREE@[194; 214)
132 L_BRACK@[194; 195)
133 IDENT@[195; 199) "repr"
134 TOKEN_TREE@[199; 213)
135 L_PAREN@[199; 200)
136 IDENT@[200; 201) "C"
137 COMMA@[201; 202)
138 WHITESPACE@[202; 203)
139 IDENT@[203; 208) "align"
140 WHITESPACE@[208; 209)
141 EQ@[209; 210)
142 WHITESPACE@[210; 211)
143 INT_NUMBER@[211; 212) "4"
144 R_PAREN@[212; 213)
145 R_BRACK@[213; 214)
146 WHITESPACE@[214; 215)
147 ATTR@[215; 236)
148 POUND@[215; 216)
149 EXCL@[216; 217)
150 TOKEN_TREE@[217; 236)
151 L_BRACK@[217; 218)
152 IDENT@[218; 222) "repr"
153 TOKEN_TREE@[222; 235)
154 L_PAREN@[222; 223)
155 IDENT@[223; 224) "C"
156 COMMA@[224; 225)
157 WHITESPACE@[225; 226)
158 IDENT@[226; 231) "align"
159 TOKEN_TREE@[231; 234)
160 L_PAREN@[231; 232)
161 INT_NUMBER@[232; 233) "4"
162 R_PAREN@[233; 234)
163 R_PAREN@[234; 235)
164 R_BRACK@[235; 236)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0007_extern_crate.rs b/crates/ra_syntax/tests/data/parser/ok/0007_extern_crate.rs
new file mode 100644
index 000000000..3ce336676
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0007_extern_crate.rs
@@ -0,0 +1,2 @@
1extern crate foo;
2extern crate foo as bar;
diff --git a/crates/ra_syntax/tests/data/parser/ok/0007_extern_crate.txt b/crates/ra_syntax/tests/data/parser/ok/0007_extern_crate.txt
new file mode 100644
index 000000000..12193397e
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0007_extern_crate.txt
@@ -0,0 +1,25 @@
1ROOT@[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/ra_syntax/tests/data/parser/ok/0008_mod_item.rs b/crates/ra_syntax/tests/data/parser/ok/0008_mod_item.rs
new file mode 100644
index 000000000..d22993bc1
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0008_mod_item.txt b/crates/ra_syntax/tests/data/parser/ok/0008_mod_item.txt
new file mode 100644
index 000000000..c790f8431
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0008_mod_item.txt
@@ -0,0 +1,90 @@
1ROOT@[0; 118)
2 MODULE@[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 MODULE@[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 ITEM_LIST@[14; 17)
16 L_CURLY@[14; 15)
17 WHITESPACE@[15; 16)
18 R_CURLY@[16; 17)
19 WHITESPACE@[17; 19)
20 MODULE@[19; 65)
21 MOD_KW@[19; 22)
22 WHITESPACE@[22; 23)
23 NAME@[23; 24)
24 IDENT@[23; 24) "c"
25 WHITESPACE@[24; 25)
26 ITEM_LIST@[25; 65)
27 L_CURLY@[25; 26)
28 WHITESPACE@[26; 31)
29 FN_DEF@[31; 47)
30 FN_KW@[31; 33)
31 WHITESPACE@[33; 34)
32 NAME@[34; 37)
33 IDENT@[34; 37) "foo"
34 PARAM_LIST@[37; 39)
35 L_PAREN@[37; 38)
36 R_PAREN@[38; 39)
37 WHITESPACE@[39; 40)
38 BLOCK@[40; 47)
39 L_CURLY@[40; 41)
40 WHITESPACE@[41; 46)
41 R_CURLY@[46; 47)
42 WHITESPACE@[47; 52)
43 STRUCT_DEF@[52; 63)
44 STRUCT_KW@[52; 58)
45 WHITESPACE@[58; 59)
46 NAME@[59; 60)
47 IDENT@[59; 60) "S"
48 WHITESPACE@[60; 61)
49 NAMED_FIELD_DEF_LIST@[61; 63)
50 L_CURLY@[61; 62)
51 R_CURLY@[62; 63)
52 WHITESPACE@[63; 64)
53 R_CURLY@[64; 65)
54 WHITESPACE@[65; 67)
55 MODULE@[67; 118)
56 MOD_KW@[67; 70)
57 WHITESPACE@[70; 71)
58 NAME@[71; 72)
59 IDENT@[71; 72) "d"
60 WHITESPACE@[72; 73)
61 ITEM_LIST@[73; 118)
62 L_CURLY@[73; 74)
63 WHITESPACE@[74; 79)
64 ATTR@[79; 87)
65 POUND@[79; 80)
66 EXCL@[80; 81)
67 TOKEN_TREE@[81; 87)
68 L_BRACK@[81; 82)
69 IDENT@[82; 86) "attr"
70 R_BRACK@[86; 87)
71 WHITESPACE@[87; 92)
72 MODULE@[92; 98)
73 MOD_KW@[92; 95)
74 WHITESPACE@[95; 96)
75 NAME@[96; 97)
76 IDENT@[96; 97) "e"
77 SEMI@[97; 98)
78 WHITESPACE@[98; 103)
79 MODULE@[103; 116)
80 MOD_KW@[103; 106)
81 WHITESPACE@[106; 107)
82 NAME@[107; 108)
83 IDENT@[107; 108) "f"
84 WHITESPACE@[108; 109)
85 ITEM_LIST@[109; 116)
86 L_CURLY@[109; 110)
87 WHITESPACE@[110; 115)
88 R_CURLY@[115; 116)
89 WHITESPACE@[116; 117)
90 R_CURLY@[117; 118)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0009_use_item.rs b/crates/ra_syntax/tests/data/parser/ok/0009_use_item.rs
new file mode 100644
index 000000000..05a6aff83
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0009_use_item.txt b/crates/ra_syntax/tests/data/parser/ok/0009_use_item.txt
new file mode 100644
index 000000000..4bcd15357
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0009_use_item.txt
@@ -0,0 +1,21 @@
1ROOT@[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/ra_syntax/tests/data/parser/ok/0010_use_path_segments.rs b/crates/ra_syntax/tests/data/parser/ok/0010_use_path_segments.rs
new file mode 100644
index 000000000..1e71b7a6c
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0010_use_path_segments.txt b/crates/ra_syntax/tests/data/parser/ok/0010_use_path_segments.txt
new file mode 100644
index 000000000..f76ea1a35
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0010_use_path_segments.txt
@@ -0,0 +1,42 @@
1ROOT@[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/ra_syntax/tests/data/parser/ok/0011_outer_attribute.rs b/crates/ra_syntax/tests/data/parser/ok/0011_outer_attribute.rs
new file mode 100644
index 000000000..8b80c0d90
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0011_outer_attribute.rs
@@ -0,0 +1,3 @@
1#[cfg(test)]
2#[ignore]
3fn foo() {}
diff --git a/crates/ra_syntax/tests/data/parser/ok/0011_outer_attribute.txt b/crates/ra_syntax/tests/data/parser/ok/0011_outer_attribute.txt
new file mode 100644
index 000000000..203a07193
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0011_outer_attribute.txt
@@ -0,0 +1,32 @@
1ROOT@[0; 35)
2 FN_DEF@[0; 34)
3 ATTR@[0; 12)
4 POUND@[0; 1)
5 TOKEN_TREE@[1; 12)
6 L_BRACK@[1; 2)
7 IDENT@[2; 5) "cfg"
8 TOKEN_TREE@[5; 11)
9 L_PAREN@[5; 6)
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 TOKEN_TREE@[14; 22)
17 L_BRACK@[14; 15)
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@[32; 34)
30 L_CURLY@[32; 33)
31 R_CURLY@[33; 34)
32 WHITESPACE@[34; 35)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0012_visibility.rs b/crates/ra_syntax/tests/data/parser/ok/0012_visibility.rs
new file mode 100644
index 000000000..75b1db121
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0012_visibility.txt b/crates/ra_syntax/tests/data/parser/ok/0012_visibility.txt
new file mode 100644
index 000000000..66901af54
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0012_visibility.txt
@@ -0,0 +1,102 @@
1ROOT@[0; 98)
2 FN_DEF@[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@[7; 9)
12 L_CURLY@[7; 8)
13 R_CURLY@[8; 9)
14 WHITESPACE@[9; 10)
15 FN_DEF@[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@[21; 23)
28 L_CURLY@[21; 22)
29 R_CURLY@[22; 23)
30 WHITESPACE@[23; 24)
31 FN_DEF@[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@[42; 44)
47 L_CURLY@[42; 43)
48 R_CURLY@[43; 44)
49 WHITESPACE@[44; 45)
50 FN_DEF@[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@[63; 65)
66 L_CURLY@[63; 64)
67 R_CURLY@[64; 65)
68 WHITESPACE@[65; 66)
69 FN_DEF@[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@[95; 97)
100 L_CURLY@[95; 96)
101 R_CURLY@[96; 97)
102 WHITESPACE@[97; 98)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0013_use_path_self_super.rs b/crates/ra_syntax/tests/data/parser/ok/0013_use_path_self_super.rs
new file mode 100644
index 000000000..faf6a42c7
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0013_use_path_self_super.txt b/crates/ra_syntax/tests/data/parser/ok/0013_use_path_self_super.txt
new file mode 100644
index 000000000..95be4f75d
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0013_use_path_self_super.txt
@@ -0,0 +1,57 @@
1ROOT@[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/ra_syntax/tests/data/parser/ok/0014_use_tree.rs b/crates/ra_syntax/tests/data/parser/ok/0014_use_tree.rs
new file mode 100644
index 000000000..5e4aa3a33
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0014_use_tree.txt b/crates/ra_syntax/tests/data/parser/ok/0014_use_tree.txt
new file mode 100644
index 000000000..4aa539159
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0014_use_tree.txt
@@ -0,0 +1,95 @@
1ROOT@[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 USE_TREE_LIST@[22; 24)
23 L_CURLY@[22; 23)
24 R_CURLY@[23; 24)
25 SEMI@[24; 25)
26 WHITESPACE@[25; 26)
27 USE_ITEM@[26; 33)
28 USE_KW@[26; 29)
29 WHITESPACE@[29; 30)
30 USE_TREE@[30; 32)
31 USE_TREE_LIST@[30; 32)
32 L_CURLY@[30; 31)
33 R_CURLY@[31; 32)
34 SEMI@[32; 33)
35 WHITESPACE@[33; 34)
36 USE_ITEM@[34; 45)
37 USE_KW@[34; 37)
38 WHITESPACE@[37; 38)
39 USE_TREE@[38; 44)
40 PATH@[38; 41)
41 PATH_SEGMENT@[38; 41)
42 NAME_REF@[38; 41)
43 IDENT@[38; 41) "foo"
44 COLONCOLON@[41; 43)
45 STAR@[43; 44)
46 SEMI@[44; 45)
47 WHITESPACE@[45; 46)
48 USE_ITEM@[46; 58)
49 USE_KW@[46; 49)
50 WHITESPACE@[49; 50)
51 USE_TREE@[50; 57)
52 PATH@[50; 53)
53 PATH_SEGMENT@[50; 53)
54 NAME_REF@[50; 53)
55 IDENT@[50; 53) "foo"
56 COLONCOLON@[53; 55)
57 USE_TREE_LIST@[55; 57)
58 L_CURLY@[55; 56)
59 R_CURLY@[56; 57)
60 SEMI@[57; 58)
61 WHITESPACE@[58; 59)
62 USE_ITEM@[59; 80)
63 USE_KW@[59; 62)
64 WHITESPACE@[62; 63)
65 USE_TREE@[63; 79)
66 PATH@[63; 68)
67 PATH_SEGMENT@[63; 68)
68 COLONCOLON@[63; 65)
69 NAME_REF@[65; 68)
70 IDENT@[65; 68) "foo"
71 COLONCOLON@[68; 70)
72 USE_TREE_LIST@[70; 79)
73 L_CURLY@[70; 71)
74 USE_TREE@[71; 72)
75 PATH@[71; 72)
76 PATH_SEGMENT@[71; 72)
77 NAME_REF@[71; 72)
78 IDENT@[71; 72) "a"
79 COMMA@[72; 73)
80 WHITESPACE@[73; 74)
81 USE_TREE@[74; 75)
82 PATH@[74; 75)
83 PATH_SEGMENT@[74; 75)
84 NAME_REF@[74; 75)
85 IDENT@[74; 75) "b"
86 COMMA@[75; 76)
87 WHITESPACE@[76; 77)
88 USE_TREE@[77; 78)
89 PATH@[77; 78)
90 PATH_SEGMENT@[77; 78)
91 NAME_REF@[77; 78)
92 IDENT@[77; 78) "c"
93 R_CURLY@[78; 79)
94 SEMI@[79; 80)
95 WHITESPACE@[80; 81)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0015_use_tree.rs b/crates/ra_syntax/tests/data/parser/ok/0015_use_tree.rs
new file mode 100644
index 000000000..46a0783a2
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0015_use_tree.txt b/crates/ra_syntax/tests/data/parser/ok/0015_use_tree.txt
new file mode 100644
index 000000000..aa4ef3715
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0015_use_tree.txt
@@ -0,0 +1,65 @@
1ROOT@[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 USE_TREE_LIST@[25; 53)
28 L_CURLY@[25; 26)
29 USE_TREE@[26; 32)
30 PATH@[26; 27)
31 PATH_SEGMENT@[26; 27)
32 NAME_REF@[26; 27)
33 IDENT@[26; 27) "a"
34 WHITESPACE@[27; 28)
35 ALIAS@[28; 32)
36 AS_KW@[28; 30)
37 WHITESPACE@[30; 31)
38 NAME@[31; 32)
39 IDENT@[31; 32) "b"
40 COMMA@[32; 33)
41 WHITESPACE@[33; 34)
42 USE_TREE@[34; 35)
43 STAR@[34; 35)
44 COMMA@[35; 36)
45 WHITESPACE@[36; 37)
46 USE_TREE@[37; 40)
47 COLONCOLON@[37; 39)
48 STAR@[39; 40)
49 COMMA@[40; 41)
50 WHITESPACE@[41; 42)
51 USE_TREE@[42; 52)
52 PATH@[42; 47)
53 PATH_SEGMENT@[42; 47)
54 COLONCOLON@[42; 44)
55 NAME_REF@[44; 47)
56 IDENT@[44; 47) "foo"
57 WHITESPACE@[47; 48)
58 ALIAS@[48; 52)
59 AS_KW@[48; 50)
60 WHITESPACE@[50; 51)
61 NAME@[51; 52)
62 IDENT@[51; 52) "x"
63 R_CURLY@[52; 53)
64 SEMI@[53; 54)
65 WHITESPACE@[54; 55)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0016_struct_flavors.rs b/crates/ra_syntax/tests/data/parser/ok/0016_struct_flavors.rs
new file mode 100644
index 000000000..69638350c
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0016_struct_flavors.txt b/crates/ra_syntax/tests/data/parser/ok/0016_struct_flavors.txt
new file mode 100644
index 000000000..349481157
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0016_struct_flavors.txt
@@ -0,0 +1,93 @@
1ROOT@[0; 97)
2 STRUCT_DEF@[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_DEF@[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 NAMED_FIELD_DEF_LIST@[19; 21)
16 L_CURLY@[19; 20)
17 R_CURLY@[20; 21)
18 WHITESPACE@[21; 22)
19 STRUCT_DEF@[22; 33)
20 STRUCT_KW@[22; 28)
21 WHITESPACE@[28; 29)
22 NAME@[29; 30)
23 IDENT@[29; 30) "C"
24 POS_FIELD_LIST@[30; 32)
25 L_PAREN@[30; 31)
26 R_PAREN@[31; 32)
27 SEMI@[32; 33)
28 WHITESPACE@[33; 35)
29 STRUCT_DEF@[35; 74)
30 STRUCT_KW@[35; 41)
31 WHITESPACE@[41; 42)
32 NAME@[42; 43)
33 IDENT@[42; 43) "D"
34 WHITESPACE@[43; 44)
35 NAMED_FIELD_DEF_LIST@[44; 74)
36 L_CURLY@[44; 45)
37 WHITESPACE@[45; 50)
38 NAMED_FIELD_DEF@[50; 56)
39 NAME@[50; 51)
40 IDENT@[50; 51) "a"
41 COLON@[51; 52)
42 WHITESPACE@[52; 53)
43 PATH_TYPE@[53; 56)
44 PATH@[53; 56)
45 PATH_SEGMENT@[53; 56)
46 NAME_REF@[53; 56)
47 IDENT@[53; 56) "u32"
48 COMMA@[56; 57)
49 WHITESPACE@[57; 62)
50 NAMED_FIELD_DEF@[62; 72)
51 VISIBILITY@[62; 65)
52 PUB_KW@[62; 65)
53 WHITESPACE@[65; 66)
54 NAME@[66; 67)
55 IDENT@[66; 67) "b"
56 COLON@[67; 68)
57 WHITESPACE@[68; 69)
58 PATH_TYPE@[69; 72)
59 PATH@[69; 72)
60 PATH_SEGMENT@[69; 72)
61 NAME_REF@[69; 72)
62 IDENT@[69; 72) "u32"
63 WHITESPACE@[72; 73)
64 R_CURLY@[73; 74)
65 WHITESPACE@[74; 76)
66 STRUCT_DEF@[76; 96)
67 STRUCT_KW@[76; 82)
68 WHITESPACE@[82; 83)
69 NAME@[83; 84)
70 IDENT@[83; 84) "E"
71 POS_FIELD_LIST@[84; 95)
72 L_PAREN@[84; 85)
73 POS_FIELD@[85; 90)
74 VISIBILITY@[85; 88)
75 PUB_KW@[85; 88)
76 WHITESPACE@[88; 89)
77 PATH_TYPE@[89; 90)
78 PATH@[89; 90)
79 PATH_SEGMENT@[89; 90)
80 NAME_REF@[89; 90)
81 IDENT@[89; 90) "x"
82 COMMA@[90; 91)
83 WHITESPACE@[91; 92)
84 POS_FIELD@[92; 93)
85 PATH_TYPE@[92; 93)
86 PATH@[92; 93)
87 PATH_SEGMENT@[92; 93)
88 NAME_REF@[92; 93)
89 IDENT@[92; 93) "y"
90 COMMA@[93; 94)
91 R_PAREN@[94; 95)
92 SEMI@[95; 96)
93 WHITESPACE@[96; 97)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0017_attr_trailing_comma.rs b/crates/ra_syntax/tests/data/parser/ok/0017_attr_trailing_comma.rs
new file mode 100644
index 000000000..fe0a7bb97
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0017_attr_trailing_comma.rs
@@ -0,0 +1,2 @@
1#[foo(a,)]
2fn foo() {}
diff --git a/crates/ra_syntax/tests/data/parser/ok/0017_attr_trailing_comma.txt b/crates/ra_syntax/tests/data/parser/ok/0017_attr_trailing_comma.txt
new file mode 100644
index 000000000..8cfd77256
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0017_attr_trailing_comma.txt
@@ -0,0 +1,26 @@
1ROOT@[0; 23)
2 FN_DEF@[0; 22)
3 ATTR@[0; 10)
4 POUND@[0; 1)
5 TOKEN_TREE@[1; 10)
6 L_BRACK@[1; 2)
7 IDENT@[2; 5) "foo"
8 TOKEN_TREE@[5; 9)
9 L_PAREN@[5; 6)
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@[20; 22)
24 L_CURLY@[20; 21)
25 R_CURLY@[21; 22)
26 WHITESPACE@[22; 23)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0018_struct_type_params.rs b/crates/ra_syntax/tests/data/parser/ok/0018_struct_type_params.rs
new file mode 100644
index 000000000..88c544923
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0018_struct_type_params.txt b/crates/ra_syntax/tests/data/parser/ok/0018_struct_type_params.txt
new file mode 100644
index 000000000..a98e823f6
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0018_struct_type_params.txt
@@ -0,0 +1,257 @@
1ROOT@[0; 290)
2 STRUCT_DEF@[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_DEF@[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 POS_FIELD_LIST@[26; 31)
27 L_PAREN@[26; 27)
28 POS_FIELD@[27; 30)
29 PATH_TYPE@[27; 30)
30 PATH@[27; 30)
31 PATH_SEGMENT@[27; 30)
32 NAME_REF@[27; 30)
33 IDENT@[27; 30) "u32"
34 R_PAREN@[30; 31)
35 SEMI@[31; 32)
36 WHITESPACE@[32; 33)
37 STRUCT_DEF@[33; 56)
38 STRUCT_KW@[33; 39)
39 WHITESPACE@[39; 40)
40 NAME@[40; 42)
41 IDENT@[40; 42) "S3"
42 TYPE_PARAM_LIST@[42; 45)
43 L_ANGLE@[42; 43)
44 TYPE_PARAM@[43; 44)
45 NAME@[43; 44)
46 IDENT@[43; 44) "T"
47 R_ANGLE@[44; 45)
48 WHITESPACE@[45; 46)
49 NAMED_FIELD_DEF_LIST@[46; 56)
50 L_CURLY@[46; 47)
51 WHITESPACE@[47; 48)
52 NAMED_FIELD_DEF@[48; 54)
53 NAME@[48; 49)
54 IDENT@[48; 49) "u"
55 COLON@[49; 50)
56 WHITESPACE@[50; 51)
57 PATH_TYPE@[51; 54)
58 PATH@[51; 54)
59 PATH_SEGMENT@[51; 54)
60 NAME_REF@[51; 54)
61 IDENT@[51; 54) "u32"
62 WHITESPACE@[54; 55)
63 R_CURLY@[55; 56)
64 WHITESPACE@[56; 58)
65 STRUCT_DEF@[58; 70)
66 STRUCT_KW@[58; 64)
67 WHITESPACE@[64; 65)
68 NAME@[65; 67)
69 IDENT@[65; 67) "S4"
70 TYPE_PARAM_LIST@[67; 69)
71 L_ANGLE@[67; 68)
72 R_ANGLE@[68; 69)
73 SEMI@[69; 70)
74 WHITESPACE@[70; 71)
75 STRUCT_DEF@[71; 85)
76 STRUCT_KW@[71; 77)
77 WHITESPACE@[77; 78)
78 NAME@[78; 80)
79 IDENT@[78; 80) "S5"
80 TYPE_PARAM_LIST@[80; 84)
81 L_ANGLE@[80; 81)
82 LIFETIME_PARAM@[81; 83)
83 LIFETIME@[81; 83) "'a"
84 R_ANGLE@[83; 84)
85 SEMI@[84; 85)
86 WHITESPACE@[85; 86)
87 STRUCT_DEF@[86; 101)
88 STRUCT_KW@[86; 92)
89 WHITESPACE@[92; 93)
90 NAME@[93; 95)
91 IDENT@[93; 95) "S6"
92 TYPE_PARAM_LIST@[95; 100)
93 L_ANGLE@[95; 96)
94 LIFETIME_PARAM@[96; 99)
95 LIFETIME@[96; 98) "'a"
96 COLON@[98; 99)
97 R_ANGLE@[99; 100)
98 SEMI@[100; 101)
99 WHITESPACE@[101; 102)
100 STRUCT_DEF@[102; 120)
101 STRUCT_KW@[102; 108)
102 WHITESPACE@[108; 109)
103 NAME@[109; 111)
104 IDENT@[109; 111) "S7"
105 TYPE_PARAM_LIST@[111; 119)
106 L_ANGLE@[111; 112)
107 LIFETIME_PARAM@[112; 118)
108 LIFETIME@[112; 114) "'a"
109 COLON@[114; 115)
110 WHITESPACE@[115; 116)
111 LIFETIME@[116; 118) "'b"
112 R_ANGLE@[118; 119)
113 SEMI@[119; 120)
114 WHITESPACE@[120; 121)
115 STRUCT_DEF@[121; 142)
116 STRUCT_KW@[121; 127)
117 WHITESPACE@[127; 128)
118 NAME@[128; 130)
119 IDENT@[128; 130) "S8"
120 TYPE_PARAM_LIST@[130; 141)
121 L_ANGLE@[130; 131)
122 LIFETIME_PARAM@[131; 139)
123 LIFETIME@[131; 133) "'a"
124 COLON@[133; 134)
125 WHITESPACE@[134; 135)
126 LIFETIME@[135; 137) "'b"
127 WHITESPACE@[137; 138)
128 PLUS@[138; 139)
129 WHITESPACE@[139; 140)
130 R_ANGLE@[140; 141)
131 SEMI@[141; 142)
132 WHITESPACE@[142; 143)
133 STRUCT_DEF@[143; 166)
134 STRUCT_KW@[143; 149)
135 WHITESPACE@[149; 150)
136 NAME@[150; 152)
137 IDENT@[150; 152) "S9"
138 TYPE_PARAM_LIST@[152; 165)
139 L_ANGLE@[152; 153)
140 LIFETIME_PARAM@[153; 164)
141 LIFETIME@[153; 155) "'a"
142 COLON@[155; 156)
143 WHITESPACE@[156; 157)
144 LIFETIME@[157; 159) "'b"
145 WHITESPACE@[159; 160)
146 PLUS@[160; 161)
147 WHITESPACE@[161; 162)
148 LIFETIME@[162; 164) "'c"
149 R_ANGLE@[164; 165)
150 SEMI@[165; 166)
151 WHITESPACE@[166; 167)
152 STRUCT_DEF@[167; 183)
153 STRUCT_KW@[167; 173)
154 WHITESPACE@[173; 174)
155 NAME@[174; 177)
156 IDENT@[174; 177) "S10"
157 TYPE_PARAM_LIST@[177; 182)
158 L_ANGLE@[177; 178)
159 LIFETIME_PARAM@[178; 180)
160 LIFETIME@[178; 180) "'a"
161 COMMA@[180; 181)
162 R_ANGLE@[181; 182)
163 SEMI@[182; 183)
164 WHITESPACE@[183; 184)
165 STRUCT_DEF@[184; 203)
166 STRUCT_KW@[184; 190)
167 WHITESPACE@[190; 191)
168 NAME@[191; 194)
169 IDENT@[191; 194) "S11"
170 TYPE_PARAM_LIST@[194; 202)
171 L_ANGLE@[194; 195)
172 LIFETIME_PARAM@[195; 197)
173 LIFETIME@[195; 197) "'a"
174 COMMA@[197; 198)
175 WHITESPACE@[198; 199)
176 LIFETIME_PARAM@[199; 201)
177 LIFETIME@[199; 201) "'b"
178 R_ANGLE@[201; 202)
179 SEMI@[202; 203)
180 WHITESPACE@[203; 204)
181 STRUCT_DEF@[204; 233)
182 STRUCT_KW@[204; 210)
183 WHITESPACE@[210; 211)
184 NAME@[211; 214)
185 IDENT@[211; 214) "S12"
186 TYPE_PARAM_LIST@[214; 232)
187 L_ANGLE@[214; 215)
188 LIFETIME_PARAM@[215; 222)
189 LIFETIME@[215; 217) "'a"
190 COLON@[217; 218)
191 WHITESPACE@[218; 219)
192 LIFETIME@[219; 221) "'b"
193 PLUS@[221; 222)
194 COMMA@[222; 223)
195 WHITESPACE@[223; 224)
196 LIFETIME_PARAM@[224; 230)
197 LIFETIME@[224; 226) "'b"
198 COLON@[226; 227)
199 WHITESPACE@[227; 228)
200 LIFETIME@[228; 230) "'c"
201 COMMA@[230; 231)
202 R_ANGLE@[231; 232)
203 SEMI@[232; 233)
204 WHITESPACE@[233; 235)
205 STRUCT_DEF@[235; 249)
206 STRUCT_KW@[235; 241)
207 WHITESPACE@[241; 242)
208 NAME@[242; 245)
209 IDENT@[242; 245) "S13"
210 TYPE_PARAM_LIST@[245; 248)
211 L_ANGLE@[245; 246)
212 TYPE_PARAM@[246; 247)
213 NAME@[246; 247)
214 IDENT@[246; 247) "T"
215 R_ANGLE@[247; 248)
216 SEMI@[248; 249)
217 WHITESPACE@[249; 250)
218 STRUCT_DEF@[250; 267)
219 STRUCT_KW@[250; 256)
220 WHITESPACE@[256; 257)
221 NAME@[257; 260)
222 IDENT@[257; 260) "S14"
223 TYPE_PARAM_LIST@[260; 266)
224 L_ANGLE@[260; 261)
225 TYPE_PARAM@[261; 262)
226 NAME@[261; 262)
227 IDENT@[261; 262) "T"
228 COMMA@[262; 263)
229 WHITESPACE@[263; 264)
230 TYPE_PARAM@[264; 265)
231 NAME@[264; 265)
232 IDENT@[264; 265) "U"
233 R_ANGLE@[265; 266)
234 SEMI@[266; 267)
235 WHITESPACE@[267; 268)
236 STRUCT_DEF@[268; 289)
237 STRUCT_KW@[268; 274)
238 WHITESPACE@[274; 275)
239 NAME@[275; 278)
240 IDENT@[275; 278) "S15"
241 TYPE_PARAM_LIST@[278; 288)
242 L_ANGLE@[278; 279)
243 LIFETIME_PARAM@[279; 281)
244 LIFETIME@[279; 281) "'a"
245 COMMA@[281; 282)
246 WHITESPACE@[282; 283)
247 TYPE_PARAM@[283; 284)
248 NAME@[283; 284)
249 IDENT@[283; 284) "T"
250 COMMA@[284; 285)
251 WHITESPACE@[285; 286)
252 TYPE_PARAM@[286; 287)
253 NAME@[286; 287)
254 IDENT@[286; 287) "U"
255 R_ANGLE@[287; 288)
256 SEMI@[288; 289)
257 WHITESPACE@[289; 290)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0019_enums.rs b/crates/ra_syntax/tests/data/parser/ok/0019_enums.rs
new file mode 100644
index 000000000..7a1afa0e6
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0019_enums.txt b/crates/ra_syntax/tests/data/parser/ok/0019_enums.txt
new file mode 100644
index 000000000..6333e47c5
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0019_enums.txt
@@ -0,0 +1,155 @@
1ROOT@[0; 182)
2 ENUM_DEF@[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 ENUM_VARIANT_LIST@[8; 11)
9 L_CURLY@[8; 9)
10 WHITESPACE@[9; 10)
11 R_CURLY@[10; 11)
12 WHITESPACE@[11; 13)
13 ENUM_DEF@[13; 27)
14 ENUM_KW@[13; 17)
15 WHITESPACE@[17; 18)
16 NAME@[18; 20)
17 IDENT@[18; 20) "E2"
18 TYPE_PARAM_LIST@[20; 23)
19 L_ANGLE@[20; 21)
20 TYPE_PARAM@[21; 22)
21 NAME@[21; 22)
22 IDENT@[21; 22) "T"
23 R_ANGLE@[22; 23)
24 WHITESPACE@[23; 24)
25 ENUM_VARIANT_LIST@[24; 27)
26 L_CURLY@[24; 25)
27 WHITESPACE@[25; 26)
28 R_CURLY@[26; 27)
29 WHITESPACE@[27; 29)
30 ENUM_DEF@[29; 46)
31 ENUM_KW@[29; 33)
32 WHITESPACE@[33; 34)
33 NAME@[34; 36)
34 IDENT@[34; 36) "E3"
35 WHITESPACE@[36; 37)
36 ENUM_VARIANT_LIST@[37; 46)
37 L_CURLY@[37; 38)
38 WHITESPACE@[38; 43)
39 ENUM_VARIANT@[43; 44)
40 NAME@[43; 44)
41 IDENT@[43; 44) "X"
42 WHITESPACE@[44; 45)
43 R_CURLY@[45; 46)
44 WHITESPACE@[46; 48)
45 ENUM_DEF@[48; 66)
46 ENUM_KW@[48; 52)
47 WHITESPACE@[52; 53)
48 NAME@[53; 55)
49 IDENT@[53; 55) "E4"
50 WHITESPACE@[55; 56)
51 ENUM_VARIANT_LIST@[56; 66)
52 L_CURLY@[56; 57)
53 WHITESPACE@[57; 62)
54 ENUM_VARIANT@[62; 63)
55 NAME@[62; 63)
56 IDENT@[62; 63) "X"
57 COMMA@[63; 64)
58 WHITESPACE@[64; 65)
59 R_CURLY@[65; 66)
60 WHITESPACE@[66; 68)
61 ENUM_DEF@[68; 181)
62 ENUM_KW@[68; 72)
63 WHITESPACE@[72; 73)
64 NAME@[73; 75)
65 IDENT@[73; 75) "E5"
66 WHITESPACE@[75; 76)
67 ENUM_VARIANT_LIST@[76; 181)
68 L_CURLY@[76; 77)
69 WHITESPACE@[77; 82)
70 ENUM_VARIANT@[82; 83)
71 NAME@[82; 83)
72 IDENT@[82; 83) "A"
73 COMMA@[83; 84)
74 WHITESPACE@[84; 89)
75 ENUM_VARIANT@[89; 95)
76 NAME@[89; 90)
77 IDENT@[89; 90) "B"
78 WHITESPACE@[90; 91)
79 EQ@[91; 92)
80 WHITESPACE@[92; 93)
81 LITERAL@[93; 95)
82 INT_NUMBER@[93; 95) "92"
83 COMMA@[95; 96)
84 WHITESPACE@[96; 101)
85 ENUM_VARIANT@[101; 146)
86 NAME@[101; 102)
87 IDENT@[101; 102) "C"
88 WHITESPACE@[102; 103)
89 NAMED_FIELD_DEF_LIST@[103; 146)
90 L_CURLY@[103; 104)
91 WHITESPACE@[104; 113)
92 NAMED_FIELD_DEF@[113; 119)
93 NAME@[113; 114)
94 IDENT@[113; 114) "a"
95 COLON@[114; 115)
96 WHITESPACE@[115; 116)
97 PATH_TYPE@[116; 119)
98 PATH@[116; 119)
99 PATH_SEGMENT@[116; 119)
100 NAME_REF@[116; 119)
101 IDENT@[116; 119) "u32"
102 COMMA@[119; 120)
103 WHITESPACE@[120; 129)
104 NAMED_FIELD_DEF@[129; 139)
105 VISIBILITY@[129; 132)
106 PUB_KW@[129; 132)
107 WHITESPACE@[132; 133)
108 NAME@[133; 134)
109 IDENT@[133; 134) "b"
110 COLON@[134; 135)
111 WHITESPACE@[135; 136)
112 PATH_TYPE@[136; 139)
113 PATH@[136; 139)
114 PATH_SEGMENT@[136; 139)
115 NAME_REF@[136; 139)
116 IDENT@[136; 139) "f64"
117 COMMA@[139; 140)
118 WHITESPACE@[140; 145)
119 R_CURLY@[145; 146)
120 COMMA@[146; 147)
121 WHITESPACE@[147; 152)
122 ENUM_VARIANT@[152; 156)
123 NAME@[152; 153)
124 IDENT@[152; 153) "F"
125 WHITESPACE@[153; 154)
126 NAMED_FIELD_DEF_LIST@[154; 156)
127 L_CURLY@[154; 155)
128 R_CURLY@[155; 156)
129 COMMA@[156; 157)
130 WHITESPACE@[157; 162)
131 ENUM_VARIANT@[162; 169)
132 NAME@[162; 163)
133 IDENT@[162; 163) "D"
134 POS_FIELD_LIST@[163; 169)
135 L_PAREN@[163; 164)
136 POS_FIELD@[164; 167)
137 PATH_TYPE@[164; 167)
138 PATH@[164; 167)
139 PATH_SEGMENT@[164; 167)
140 NAME_REF@[164; 167)
141 IDENT@[164; 167) "u32"
142 COMMA@[167; 168)
143 R_PAREN@[168; 169)
144 COMMA@[169; 170)
145 WHITESPACE@[170; 175)
146 ENUM_VARIANT@[175; 178)
147 NAME@[175; 176)
148 IDENT@[175; 176) "E"
149 POS_FIELD_LIST@[176; 178)
150 L_PAREN@[176; 177)
151 R_PAREN@[177; 178)
152 COMMA@[178; 179)
153 WHITESPACE@[179; 180)
154 R_CURLY@[180; 181)
155 WHITESPACE@[181; 182)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0020_type_param_bounds.rs b/crates/ra_syntax/tests/data/parser/ok/0020_type_param_bounds.rs
new file mode 100644
index 000000000..a1b9f00a4
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0020_type_param_bounds.txt b/crates/ra_syntax/tests/data/parser/ok/0020_type_param_bounds.txt
new file mode 100644
index 000000000..ac1a58e9a
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0020_type_param_bounds.txt
@@ -0,0 +1,198 @@
1ROOT@[0; 200)
2 STRUCT_DEF@[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_DEF@[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_DEF@[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_DEF@[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_DEF@[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_DEF@[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_TYPE@[109; 114)
106 PATH@[109; 114)
107 PATH_SEGMENT@[109; 114)
108 NAME_REF@[109; 114)
109 IDENT@[109; 114) "Clone"
110 R_ANGLE@[114; 115)
111 SEMI@[115; 116)
112 WHITESPACE@[116; 117)
113 STRUCT_DEF@[117; 143)
114 STRUCT_KW@[117; 123)
115 WHITESPACE@[123; 124)
116 NAME@[124; 125)
117 IDENT@[124; 125) "G"
118 TYPE_PARAM_LIST@[125; 142)
119 L_ANGLE@[125; 126)
120 TYPE_PARAM@[126; 141)
121 NAME@[126; 127)
122 IDENT@[126; 127) "T"
123 COLON@[127; 128)
124 WHITESPACE@[128; 129)
125 PATH_TYPE@[129; 141)
126 PATH@[129; 134)
127 PATH_SEGMENT@[129; 134)
128 NAME_REF@[129; 134)
129 IDENT@[129; 134) "Clone"
130 WHITESPACE@[134; 135)
131 PLUS@[135; 136)
132 WHITESPACE@[136; 137)
133 PATH_TYPE@[137; 141)
134 PATH@[137; 141)
135 PATH_SEGMENT@[137; 141)
136 NAME_REF@[137; 141)
137 IDENT@[137; 141) "Copy"
138 R_ANGLE@[141; 142)
139 SEMI@[142; 143)
140 WHITESPACE@[143; 144)
141 STRUCT_DEF@[144; 180)
142 STRUCT_KW@[144; 150)
143 WHITESPACE@[150; 151)
144 NAME@[151; 152)
145 IDENT@[151; 152) "H"
146 TYPE_PARAM_LIST@[152; 179)
147 L_ANGLE@[152; 153)
148 TYPE_PARAM@[153; 178)
149 NAME@[153; 154)
150 IDENT@[153; 154) "T"
151 COLON@[154; 155)
152 WHITESPACE@[155; 156)
153 PATH_TYPE@[156; 178)
154 PATH@[156; 161)
155 PATH_SEGMENT@[156; 161)
156 COLONCOLON@[156; 158)
157 NAME_REF@[158; 161)
158 IDENT@[158; 161) "Foo"
159 WHITESPACE@[161; 162)
160 PLUS@[162; 163)
161 WHITESPACE@[163; 164)
162 PATH_TYPE@[164; 178)
163 PATH@[164; 173)
164 PATH@[164; 168)
165 PATH_SEGMENT@[164; 168)
166 SELF_KW@[164; 168)
167 COLONCOLON@[168; 170)
168 PATH_SEGMENT@[170; 173)
169 NAME_REF@[170; 173)
170 IDENT@[170; 173) "Bar"
171 WHITESPACE@[173; 174)
172 PLUS@[174; 175)
173 WHITESPACE@[175; 176)
174 LIFETIME@[176; 178) "'a"
175 R_ANGLE@[178; 179)
176 SEMI@[179; 180)
177 WHITESPACE@[180; 181)
178 STRUCT_DEF@[181; 199)
179 STRUCT_KW@[181; 187)
180 WHITESPACE@[187; 188)
181 NAME@[188; 189)
182 IDENT@[188; 189) "I"
183 TYPE_PARAM_LIST@[189; 198)
184 L_ANGLE@[189; 190)
185 TYPE_PARAM@[190; 192)
186 NAME@[190; 191)
187 IDENT@[190; 191) "T"
188 COLON@[191; 192)
189 COMMA@[192; 193)
190 WHITESPACE@[193; 194)
191 TYPE_PARAM@[194; 196)
192 NAME@[194; 195)
193 IDENT@[194; 195) "U"
194 COLON@[195; 196)
195 COMMA@[196; 197)
196 R_ANGLE@[197; 198)
197 SEMI@[198; 199)
198 WHITESPACE@[199; 200)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0021_extern_fn.rs b/crates/ra_syntax/tests/data/parser/ok/0021_extern_fn.rs
new file mode 100644
index 000000000..e929eef74
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0021_extern_fn.txt b/crates/ra_syntax/tests/data/parser/ok/0021_extern_fn.txt
new file mode 100644
index 000000000..5ceef46e0
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0021_extern_fn.txt
@@ -0,0 +1,56 @@
1ROOT@[0; 71)
2 FN_DEF@[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@[16; 19)
15 L_CURLY@[16; 17)
16 WHITESPACE@[17; 18)
17 R_CURLY@[18; 19)
18 WHITESPACE@[19; 21)
19 FN_DEF@[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@[41; 44)
34 L_CURLY@[41; 42)
35 WHITESPACE@[42; 43)
36 R_CURLY@[43; 44)
37 WHITESPACE@[44; 46)
38 FN_DEF@[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@[67; 70)
53 L_CURLY@[67; 68)
54 WHITESPACE@[68; 69)
55 R_CURLY@[69; 70)
56 WHITESPACE@[70; 71)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0022_empty_extern_block.rs b/crates/ra_syntax/tests/data/parser/ok/0022_empty_extern_block.rs
new file mode 100644
index 000000000..f5fe0e6ef
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0022_empty_extern_block.rs
@@ -0,0 +1,5 @@
1extern {
2}
3
4extern "C" {
5}
diff --git a/crates/ra_syntax/tests/data/parser/ok/0022_empty_extern_block.txt b/crates/ra_syntax/tests/data/parser/ok/0022_empty_extern_block.txt
new file mode 100644
index 000000000..2099e2433
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0022_empty_extern_block.txt
@@ -0,0 +1,21 @@
1ROOT@[0; 27)
2 EXTERN_BLOCK@[0; 10)
3 ABI@[0; 6)
4 EXTERN_KW@[0; 6)
5 WHITESPACE@[6; 7)
6 EXTERN_ITEM_LIST@[7; 10)
7 L_CURLY@[7; 8)
8 WHITESPACE@[8; 9)
9 R_CURLY@[9; 10)
10 WHITESPACE@[10; 12)
11 EXTERN_BLOCK@[12; 26)
12 ABI@[12; 22)
13 EXTERN_KW@[12; 18)
14 WHITESPACE@[18; 19)
15 STRING@[19; 22)
16 WHITESPACE@[22; 23)
17 EXTERN_ITEM_LIST@[23; 26)
18 L_CURLY@[23; 24)
19 WHITESPACE@[24; 25)
20 R_CURLY@[25; 26)
21 WHITESPACE@[26; 27)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0023_static_items.rs b/crates/ra_syntax/tests/data/parser/ok/0023_static_items.rs
new file mode 100644
index 000000000..5fb92ce33
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0023_static_items.txt b/crates/ra_syntax/tests/data/parser/ok/0023_static_items.txt
new file mode 100644
index 000000000..5c1a3a7a5
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0023_static_items.txt
@@ -0,0 +1,41 @@
1ROOT@[0; 47)
2 STATIC_DEF@[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_DEF@[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/ra_syntax/tests/data/parser/ok/0024_const_item.rs b/crates/ra_syntax/tests/data/parser/ok/0024_const_item.rs
new file mode 100644
index 000000000..7446859b5
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0024_const_item.txt b/crates/ra_syntax/tests/data/parser/ok/0024_const_item.txt
new file mode 100644
index 000000000..d0e5842da
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0024_const_item.txt
@@ -0,0 +1,41 @@
1ROOT@[0; 46)
2 CONST_DEF@[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_DEF@[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/ra_syntax/tests/data/parser/ok/0025_extern_fn_in_block.rs b/crates/ra_syntax/tests/data/parser/ok/0025_extern_fn_in_block.rs
new file mode 100644
index 000000000..289809809
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0025_extern_fn_in_block.txt b/crates/ra_syntax/tests/data/parser/ok/0025_extern_fn_in_block.txt
new file mode 100644
index 000000000..363b3576e
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0025_extern_fn_in_block.txt
@@ -0,0 +1,31 @@
1ROOT@[0; 35)
2 FN_DEF@[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@[10; 34)
12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16)
14 FN_DEF@[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@[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/ra_syntax/tests/data/parser/ok/0026_const_fn_in_block.rs b/crates/ra_syntax/tests/data/parser/ok/0026_const_fn_in_block.rs
new file mode 100644
index 000000000..7641a3d28
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0026_const_fn_in_block.txt b/crates/ra_syntax/tests/data/parser/ok/0026_const_fn_in_block.txt
new file mode 100644
index 000000000..d45fc2559
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0026_const_fn_in_block.txt
@@ -0,0 +1,30 @@
1ROOT@[0; 34)
2 FN_DEF@[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@[10; 33)
12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16)
14 FN_DEF@[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@[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/ra_syntax/tests/data/parser/ok/0027_unsafe_fn_in_block.rs b/crates/ra_syntax/tests/data/parser/ok/0027_unsafe_fn_in_block.rs
new file mode 100644
index 000000000..f3c5ff938
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0027_unsafe_fn_in_block.txt b/crates/ra_syntax/tests/data/parser/ok/0027_unsafe_fn_in_block.txt
new file mode 100644
index 000000000..5a39fa98c
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0027_unsafe_fn_in_block.txt
@@ -0,0 +1,41 @@
1ROOT@[0; 53)
2 FN_DEF@[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@[10; 52)
12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16)
14 FN_DEF@[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@[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 BLOCK@[44; 50)
33 L_CURLY@[44; 45)
34 WHITESPACE@[45; 46)
35 LITERAL@[46; 48)
36 INT_NUMBER@[46; 48) "92"
37 WHITESPACE@[48; 49)
38 R_CURLY@[49; 50)
39 WHITESPACE@[50; 51)
40 R_CURLY@[51; 52)
41 WHITESPACE@[52; 53)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0028_operator_binding_power.rs b/crates/ra_syntax/tests/data/parser/ok/0028_operator_binding_power.rs
new file mode 100644
index 000000000..cc9598470
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0028_operator_binding_power.txt b/crates/ra_syntax/tests/data/parser/ok/0028_operator_binding_power.txt
new file mode 100644
index 000000000..27efd180f
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0028_operator_binding_power.txt
@@ -0,0 +1,185 @@
1ROOT@[0; 248)
2 FN_DEF@[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@[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/ra_syntax/tests/data/parser/ok/0029_range_forms.rs b/crates/ra_syntax/tests/data/parser/ok/0029_range_forms.rs
new file mode 100644
index 000000000..03f4ae7b2
--- /dev/null
+++ b/crates/ra_syntax/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/ra_syntax/tests/data/parser/ok/0029_range_forms.txt b/crates/ra_syntax/tests/data/parser/ok/0029_range_forms.txt
new file mode 100644
index 000000000..6d6d2f4d0
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0029_range_forms.txt
@@ -0,0 +1,83 @@
1ROOT@[0; 79)
2 FN_DEF@[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@[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)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0030_traits.rs b/crates/ra_syntax/tests/data/parser/ok/0030_traits.rs
new file mode 100644
index 000000000..23c4be0e1
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0030_traits.rs
@@ -0,0 +1,11 @@
1pub trait WriteMessage {
2 fn write_message(&FrontendMessage);
3}
4
5trait Runnable {
6 fn handler();
7}
8
9trait TraitWithExpr {
10 fn fn_with_expr(x: [i32; 1]);
11}
diff --git a/crates/ra_syntax/tests/data/parser/ok/0030_traits.txt b/crates/ra_syntax/tests/data/parser/ok/0030_traits.txt
new file mode 100644
index 000000000..ddd666407
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0030_traits.txt
@@ -0,0 +1,93 @@
1ROOT@[0; 164)
2 TRAIT_DEF@[0; 66)
3 VISIBILITY@[0; 3)
4 PUB_KW@[0; 3)
5 WHITESPACE@[3; 4)
6 TRAIT_KW@[4; 9)
7 WHITESPACE@[9; 10)
8 NAME@[10; 22)
9 IDENT@[10; 22) "WriteMessage"
10 WHITESPACE@[22; 23)
11 ITEM_LIST@[23; 66)
12 L_CURLY@[23; 24)
13 WHITESPACE@[24; 29)
14 FN_DEF@[29; 64)
15 FN_KW@[29; 31)
16 WHITESPACE@[31; 32)
17 NAME@[32; 45)
18 IDENT@[32; 45) "write_message"
19 PARAM_LIST@[45; 63)
20 L_PAREN@[45; 46)
21 PARAM@[46; 62)
22 REFERENCE_TYPE@[46; 62)
23 AMP@[46; 47)
24 PATH_TYPE@[47; 62)
25 PATH@[47; 62)
26 PATH_SEGMENT@[47; 62)
27 NAME_REF@[47; 62)
28 IDENT@[47; 62) "FrontendMessage"
29 R_PAREN@[62; 63)
30 SEMI@[63; 64)
31 WHITESPACE@[64; 65)
32 R_CURLY@[65; 66)
33 WHITESPACE@[66; 68)
34 TRAIT_DEF@[68; 104)
35 TRAIT_KW@[68; 73)
36 WHITESPACE@[73; 74)
37 NAME@[74; 82)
38 IDENT@[74; 82) "Runnable"
39 WHITESPACE@[82; 83)
40 ITEM_LIST@[83; 104)
41 L_CURLY@[83; 84)
42 WHITESPACE@[84; 89)
43 FN_DEF@[89; 102)
44 FN_KW@[89; 91)
45 WHITESPACE@[91; 92)
46 NAME@[92; 99)
47 IDENT@[92; 99) "handler"
48 PARAM_LIST@[99; 101)
49 L_PAREN@[99; 100)
50 R_PAREN@[100; 101)
51 SEMI@[101; 102)
52 WHITESPACE@[102; 103)
53 R_CURLY@[103; 104)
54 WHITESPACE@[104; 106)
55 TRAIT_DEF@[106; 163)
56 TRAIT_KW@[106; 111)
57 WHITESPACE@[111; 112)
58 NAME@[112; 125)
59 IDENT@[112; 125) "TraitWithExpr"
60 WHITESPACE@[125; 126)
61 ITEM_LIST@[126; 163)
62 L_CURLY@[126; 127)
63 WHITESPACE@[127; 132)
64 FN_DEF@[132; 161)
65 FN_KW@[132; 134)
66 WHITESPACE@[134; 135)
67 NAME@[135; 147)
68 IDENT@[135; 147) "fn_with_expr"
69 PARAM_LIST@[147; 160)
70 L_PAREN@[147; 148)
71 PARAM@[148; 159)
72 BIND_PAT@[148; 149)
73 NAME@[148; 149)
74 IDENT@[148; 149) "x"
75 COLON@[149; 150)
76 WHITESPACE@[150; 151)
77 ARRAY_TYPE@[151; 159)
78 L_BRACK@[151; 152)
79 PATH_TYPE@[152; 155)
80 PATH@[152; 155)
81 PATH_SEGMENT@[152; 155)
82 NAME_REF@[152; 155)
83 IDENT@[152; 155) "i32"
84 SEMI@[155; 156)
85 WHITESPACE@[156; 157)
86 LITERAL@[157; 158)
87 INT_NUMBER@[157; 158) "1"
88 R_BRACK@[158; 159)
89 R_PAREN@[159; 160)
90 SEMI@[160; 161)
91 WHITESPACE@[161; 162)
92 R_CURLY@[162; 163)
93 WHITESPACE@[163; 164)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0031_extern.rs b/crates/ra_syntax/tests/data/parser/ok/0031_extern.rs
new file mode 100644
index 000000000..b33ac273c
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0031_extern.rs
@@ -0,0 +1,29 @@
1extern {
2 pub fn socket(domain: ::c_int, ty: ::c_int, protocol: ::c_int) -> ::c_int;
3 pub fn bind(fd: ::c_int, addr: *const sockaddr, len: socklen_t) -> ::c_int;
4 pub fn connect(socket: ::c_int, address: *const sockaddr,
5 len: socklen_t) -> ::c_int;
6 pub fn listen(socket: ::c_int, backlog: ::c_int) -> ::c_int;
7 pub fn getsockname(socket: ::c_int, address: *mut sockaddr,
8 address_len: *mut socklen_t) -> ::c_int;
9 pub fn getsockopt(sockfd: ::c_int,
10 level: ::c_int,
11 optname: ::c_int,
12 optval: *mut ::c_void,
13 optlen: *mut ::socklen_t) -> ::c_int;
14 pub fn setsockopt(socket: ::c_int, level: ::c_int, name: ::c_int,
15 value: *const ::c_void,
16 option_len: socklen_t) -> ::c_int;
17 pub fn getpeername(socket: ::c_int, address: *mut sockaddr,
18 address_len: *mut socklen_t) -> ::c_int;
19 pub fn sendto(socket: ::c_int, buf: *const ::c_void, len: ::size_t,
20 flags: ::c_int, addr: *const sockaddr,
21 addrlen: socklen_t) -> ::ssize_t;
22 pub fn send(socket: ::c_int, buf: *const ::c_void, len: ::size_t,
23 flags: ::c_int) -> ::ssize_t;
24 pub fn recvfrom(socket: ::c_int, buf: *mut ::c_void, len: ::size_t,
25 flags: ::c_int, addr: *mut ::sockaddr,
26 addrlen: *mut ::socklen_t) -> ::ssize_t;
27 pub fn recv(socket: ::c_int, buf: *mut ::c_void, len: ::size_t,
28 flags: ::c_int) -> ::ssize_t;
29}
diff --git a/crates/ra_syntax/tests/data/parser/ok/0031_extern.txt b/crates/ra_syntax/tests/data/parser/ok/0031_extern.txt
new file mode 100644
index 000000000..f3f1c25a9
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0031_extern.txt
@@ -0,0 +1,973 @@
1ROOT@[0; 1598)
2 EXTERN_BLOCK@[0; 1597)
3 ABI@[0; 6)
4 EXTERN_KW@[0; 6)
5 WHITESPACE@[6; 7)
6 EXTERN_ITEM_LIST@[7; 1597)
7 L_CURLY@[7; 8)
8 WHITESPACE@[8; 13)
9 FN_DEF@[13; 87)
10 VISIBILITY@[13; 16)
11 PUB_KW@[13; 16)
12 WHITESPACE@[16; 17)
13 FN_KW@[17; 19)
14 WHITESPACE@[19; 20)
15 NAME@[20; 26)
16 IDENT@[20; 26) "socket"
17 PARAM_LIST@[26; 75)
18 L_PAREN@[26; 27)
19 PARAM@[27; 42)
20 BIND_PAT@[27; 33)
21 NAME@[27; 33)
22 IDENT@[27; 33) "domain"
23 COLON@[33; 34)
24 WHITESPACE@[34; 35)
25 PATH_TYPE@[35; 42)
26 PATH@[35; 42)
27 PATH_SEGMENT@[35; 42)
28 COLONCOLON@[35; 37)
29 NAME_REF@[37; 42)
30 IDENT@[37; 42) "c_int"
31 COMMA@[42; 43)
32 WHITESPACE@[43; 44)
33 PARAM@[44; 55)
34 BIND_PAT@[44; 46)
35 NAME@[44; 46)
36 IDENT@[44; 46) "ty"
37 COLON@[46; 47)
38 WHITESPACE@[47; 48)
39 PATH_TYPE@[48; 55)
40 PATH@[48; 55)
41 PATH_SEGMENT@[48; 55)
42 COLONCOLON@[48; 50)
43 NAME_REF@[50; 55)
44 IDENT@[50; 55) "c_int"
45 COMMA@[55; 56)
46 WHITESPACE@[56; 57)
47 PARAM@[57; 74)
48 BIND_PAT@[57; 65)
49 NAME@[57; 65)
50 IDENT@[57; 65) "protocol"
51 COLON@[65; 66)
52 WHITESPACE@[66; 67)
53 PATH_TYPE@[67; 74)
54 PATH@[67; 74)
55 PATH_SEGMENT@[67; 74)
56 COLONCOLON@[67; 69)
57 NAME_REF@[69; 74)
58 IDENT@[69; 74) "c_int"
59 R_PAREN@[74; 75)
60 WHITESPACE@[75; 76)
61 RET_TYPE@[76; 86)
62 THIN_ARROW@[76; 78)
63 WHITESPACE@[78; 79)
64 PATH_TYPE@[79; 86)
65 PATH@[79; 86)
66 PATH_SEGMENT@[79; 86)
67 COLONCOLON@[79; 81)
68 NAME_REF@[81; 86)
69 IDENT@[81; 86) "c_int"
70 SEMI@[86; 87)
71 WHITESPACE@[87; 92)
72 FN_DEF@[92; 167)
73 VISIBILITY@[92; 95)
74 PUB_KW@[92; 95)
75 WHITESPACE@[95; 96)
76 FN_KW@[96; 98)
77 WHITESPACE@[98; 99)
78 NAME@[99; 103)
79 IDENT@[99; 103) "bind"
80 PARAM_LIST@[103; 155)
81 L_PAREN@[103; 104)
82 PARAM@[104; 115)
83 BIND_PAT@[104; 106)
84 NAME@[104; 106)
85 IDENT@[104; 106) "fd"
86 COLON@[106; 107)
87 WHITESPACE@[107; 108)
88 PATH_TYPE@[108; 115)
89 PATH@[108; 115)
90 PATH_SEGMENT@[108; 115)
91 COLONCOLON@[108; 110)
92 NAME_REF@[110; 115)
93 IDENT@[110; 115) "c_int"
94 COMMA@[115; 116)
95 WHITESPACE@[116; 117)
96 PARAM@[117; 138)
97 BIND_PAT@[117; 121)
98 NAME@[117; 121)
99 IDENT@[117; 121) "addr"
100 COLON@[121; 122)
101 WHITESPACE@[122; 123)
102 POINTER_TYPE@[123; 138)
103 STAR@[123; 124)
104 CONST_KW@[124; 129)
105 WHITESPACE@[129; 130)
106 PATH_TYPE@[130; 138)
107 PATH@[130; 138)
108 PATH_SEGMENT@[130; 138)
109 NAME_REF@[130; 138)
110 IDENT@[130; 138) "sockaddr"
111 COMMA@[138; 139)
112 WHITESPACE@[139; 140)
113 PARAM@[140; 154)
114 BIND_PAT@[140; 143)
115 NAME@[140; 143)
116 IDENT@[140; 143) "len"
117 COLON@[143; 144)
118 WHITESPACE@[144; 145)
119 PATH_TYPE@[145; 154)
120 PATH@[145; 154)
121 PATH_SEGMENT@[145; 154)
122 NAME_REF@[145; 154)
123 IDENT@[145; 154) "socklen_t"
124 R_PAREN@[154; 155)
125 WHITESPACE@[155; 156)
126 RET_TYPE@[156; 166)
127 THIN_ARROW@[156; 158)
128 WHITESPACE@[158; 159)
129 PATH_TYPE@[159; 166)
130 PATH@[159; 166)
131 PATH_SEGMENT@[159; 166)
132 COLONCOLON@[159; 161)
133 NAME_REF@[161; 166)
134 IDENT@[161; 166) "c_int"
135 SEMI@[166; 167)
136 WHITESPACE@[167; 172)
137 FN_DEF@[172; 276)
138 VISIBILITY@[172; 175)
139 PUB_KW@[172; 175)
140 WHITESPACE@[175; 176)
141 FN_KW@[176; 178)
142 WHITESPACE@[178; 179)
143 NAME@[179; 186)
144 IDENT@[179; 186) "connect"
145 PARAM_LIST@[186; 264)
146 L_PAREN@[186; 187)
147 PARAM@[187; 202)
148 BIND_PAT@[187; 193)
149 NAME@[187; 193)
150 IDENT@[187; 193) "socket"
151 COLON@[193; 194)
152 WHITESPACE@[194; 195)
153 PATH_TYPE@[195; 202)
154 PATH@[195; 202)
155 PATH_SEGMENT@[195; 202)
156 COLONCOLON@[195; 197)
157 NAME_REF@[197; 202)
158 IDENT@[197; 202) "c_int"
159 COMMA@[202; 203)
160 WHITESPACE@[203; 204)
161 PARAM@[204; 228)
162 BIND_PAT@[204; 211)
163 NAME@[204; 211)
164 IDENT@[204; 211) "address"
165 COLON@[211; 212)
166 WHITESPACE@[212; 213)
167 POINTER_TYPE@[213; 228)
168 STAR@[213; 214)
169 CONST_KW@[214; 219)
170 WHITESPACE@[219; 220)
171 PATH_TYPE@[220; 228)
172 PATH@[220; 228)
173 PATH_SEGMENT@[220; 228)
174 NAME_REF@[220; 228)
175 IDENT@[220; 228) "sockaddr"
176 COMMA@[228; 229)
177 WHITESPACE@[229; 249)
178 PARAM@[249; 263)
179 BIND_PAT@[249; 252)
180 NAME@[249; 252)
181 IDENT@[249; 252) "len"
182 COLON@[252; 253)
183 WHITESPACE@[253; 254)
184 PATH_TYPE@[254; 263)
185 PATH@[254; 263)
186 PATH_SEGMENT@[254; 263)
187 NAME_REF@[254; 263)
188 IDENT@[254; 263) "socklen_t"
189 R_PAREN@[263; 264)
190 WHITESPACE@[264; 265)
191 RET_TYPE@[265; 275)
192 THIN_ARROW@[265; 267)
193 WHITESPACE@[267; 268)
194 PATH_TYPE@[268; 275)
195 PATH@[268; 275)
196 PATH_SEGMENT@[268; 275)
197 COLONCOLON@[268; 270)
198 NAME_REF@[270; 275)
199 IDENT@[270; 275) "c_int"
200 SEMI@[275; 276)
201 WHITESPACE@[276; 281)
202 FN_DEF@[281; 341)
203 VISIBILITY@[281; 284)
204 PUB_KW@[281; 284)
205 WHITESPACE@[284; 285)
206 FN_KW@[285; 287)
207 WHITESPACE@[287; 288)
208 NAME@[288; 294)
209 IDENT@[288; 294) "listen"
210 PARAM_LIST@[294; 329)
211 L_PAREN@[294; 295)
212 PARAM@[295; 310)
213 BIND_PAT@[295; 301)
214 NAME@[295; 301)
215 IDENT@[295; 301) "socket"
216 COLON@[301; 302)
217 WHITESPACE@[302; 303)
218 PATH_TYPE@[303; 310)
219 PATH@[303; 310)
220 PATH_SEGMENT@[303; 310)
221 COLONCOLON@[303; 305)
222 NAME_REF@[305; 310)
223 IDENT@[305; 310) "c_int"
224 COMMA@[310; 311)
225 WHITESPACE@[311; 312)
226 PARAM@[312; 328)
227 BIND_PAT@[312; 319)
228 NAME@[312; 319)
229 IDENT@[312; 319) "backlog"
230 COLON@[319; 320)
231 WHITESPACE@[320; 321)
232 PATH_TYPE@[321; 328)
233 PATH@[321; 328)
234 PATH_SEGMENT@[321; 328)
235 COLONCOLON@[321; 323)
236 NAME_REF@[323; 328)
237 IDENT@[323; 328) "c_int"
238 R_PAREN@[328; 329)
239 WHITESPACE@[329; 330)
240 RET_TYPE@[330; 340)
241 THIN_ARROW@[330; 332)
242 WHITESPACE@[332; 333)
243 PATH_TYPE@[333; 340)
244 PATH@[333; 340)
245 PATH_SEGMENT@[333; 340)
246 COLONCOLON@[333; 335)
247 NAME_REF@[335; 340)
248 IDENT@[335; 340) "c_int"
249 SEMI@[340; 341)
250 WHITESPACE@[341; 346)
251 FN_DEF@[346; 469)
252 VISIBILITY@[346; 349)
253 PUB_KW@[346; 349)
254 WHITESPACE@[349; 350)
255 FN_KW@[350; 352)
256 WHITESPACE@[352; 353)
257 NAME@[353; 364)
258 IDENT@[353; 364) "getsockname"
259 PARAM_LIST@[364; 457)
260 L_PAREN@[364; 365)
261 PARAM@[365; 380)
262 BIND_PAT@[365; 371)
263 NAME@[365; 371)
264 IDENT@[365; 371) "socket"
265 COLON@[371; 372)
266 WHITESPACE@[372; 373)
267 PATH_TYPE@[373; 380)
268 PATH@[373; 380)
269 PATH_SEGMENT@[373; 380)
270 COLONCOLON@[373; 375)
271 NAME_REF@[375; 380)
272 IDENT@[375; 380) "c_int"
273 COMMA@[380; 381)
274 WHITESPACE@[381; 382)
275 PARAM@[382; 404)
276 BIND_PAT@[382; 389)
277 NAME@[382; 389)
278 IDENT@[382; 389) "address"
279 COLON@[389; 390)
280 WHITESPACE@[390; 391)
281 POINTER_TYPE@[391; 404)
282 STAR@[391; 392)
283 MUT_KW@[392; 395)
284 WHITESPACE@[395; 396)
285 PATH_TYPE@[396; 404)
286 PATH@[396; 404)
287 PATH_SEGMENT@[396; 404)
288 NAME_REF@[396; 404)
289 IDENT@[396; 404) "sockaddr"
290 COMMA@[404; 405)
291 WHITESPACE@[405; 429)
292 PARAM@[429; 456)
293 BIND_PAT@[429; 440)
294 NAME@[429; 440)
295 IDENT@[429; 440) "address_len"
296 COLON@[440; 441)
297 WHITESPACE@[441; 442)
298 POINTER_TYPE@[442; 456)
299 STAR@[442; 443)
300 MUT_KW@[443; 446)
301 WHITESPACE@[446; 447)
302 PATH_TYPE@[447; 456)
303 PATH@[447; 456)
304 PATH_SEGMENT@[447; 456)
305 NAME_REF@[447; 456)
306 IDENT@[447; 456) "socklen_t"
307 R_PAREN@[456; 457)
308 WHITESPACE@[457; 458)
309 RET_TYPE@[458; 468)
310 THIN_ARROW@[458; 460)
311 WHITESPACE@[460; 461)
312 PATH_TYPE@[461; 468)
313 PATH@[461; 468)
314 PATH_SEGMENT@[461; 468)
315 COLONCOLON@[461; 463)
316 NAME_REF@[463; 468)
317 IDENT@[463; 468) "c_int"
318 SEMI@[468; 469)
319 WHITESPACE@[469; 474)
320 FN_DEF@[474; 691)
321 VISIBILITY@[474; 477)
322 PUB_KW@[474; 477)
323 WHITESPACE@[477; 478)
324 FN_KW@[478; 480)
325 WHITESPACE@[480; 481)
326 NAME@[481; 491)
327 IDENT@[481; 491) "getsockopt"
328 PARAM_LIST@[491; 679)
329 L_PAREN@[491; 492)
330 PARAM@[492; 507)
331 BIND_PAT@[492; 498)
332 NAME@[492; 498)
333 IDENT@[492; 498) "sockfd"
334 COLON@[498; 499)
335 WHITESPACE@[499; 500)
336 PATH_TYPE@[500; 507)
337 PATH@[500; 507)
338 PATH_SEGMENT@[500; 507)
339 COLONCOLON@[500; 502)
340 NAME_REF@[502; 507)
341 IDENT@[502; 507) "c_int"
342 COMMA@[507; 508)
343 WHITESPACE@[508; 531)
344 PARAM@[531; 545)
345 BIND_PAT@[531; 536)
346 NAME@[531; 536)
347 IDENT@[531; 536) "level"
348 COLON@[536; 537)
349 WHITESPACE@[537; 538)
350 PATH_TYPE@[538; 545)
351 PATH@[538; 545)
352 PATH_SEGMENT@[538; 545)
353 COLONCOLON@[538; 540)
354 NAME_REF@[540; 545)
355 IDENT@[540; 545) "c_int"
356 COMMA@[545; 546)
357 WHITESPACE@[546; 569)
358 PARAM@[569; 585)
359 BIND_PAT@[569; 576)
360 NAME@[569; 576)
361 IDENT@[569; 576) "optname"
362 COLON@[576; 577)
363 WHITESPACE@[577; 578)
364 PATH_TYPE@[578; 585)
365 PATH@[578; 585)
366 PATH_SEGMENT@[578; 585)
367 COLONCOLON@[578; 580)
368 NAME_REF@[580; 585)
369 IDENT@[580; 585) "c_int"
370 COMMA@[585; 586)
371 WHITESPACE@[586; 609)
372 PARAM@[609; 630)
373 BIND_PAT@[609; 615)
374 NAME@[609; 615)
375 IDENT@[609; 615) "optval"
376 COLON@[615; 616)
377 WHITESPACE@[616; 617)
378 POINTER_TYPE@[617; 630)
379 STAR@[617; 618)
380 MUT_KW@[618; 621)
381 WHITESPACE@[621; 622)
382 PATH_TYPE@[622; 630)
383 PATH@[622; 630)
384 PATH_SEGMENT@[622; 630)
385 COLONCOLON@[622; 624)
386 NAME_REF@[624; 630)
387 IDENT@[624; 630) "c_void"
388 COMMA@[630; 631)
389 WHITESPACE@[631; 654)
390 PARAM@[654; 678)
391 BIND_PAT@[654; 660)
392 NAME@[654; 660)
393 IDENT@[654; 660) "optlen"
394 COLON@[660; 661)
395 WHITESPACE@[661; 662)
396 POINTER_TYPE@[662; 678)
397 STAR@[662; 663)
398 MUT_KW@[663; 666)
399 WHITESPACE@[666; 667)
400 PATH_TYPE@[667; 678)
401 PATH@[667; 678)
402 PATH_SEGMENT@[667; 678)
403 COLONCOLON@[667; 669)
404 NAME_REF@[669; 678)
405 IDENT@[669; 678) "socklen_t"
406 R_PAREN@[678; 679)
407 WHITESPACE@[679; 680)
408 RET_TYPE@[680; 690)
409 THIN_ARROW@[680; 682)
410 WHITESPACE@[682; 683)
411 PATH_TYPE@[683; 690)
412 PATH@[683; 690)
413 PATH_SEGMENT@[683; 690)
414 COLONCOLON@[683; 685)
415 NAME_REF@[685; 690)
416 IDENT@[685; 690) "c_int"
417 SEMI@[690; 691)
418 WHITESPACE@[691; 696)
419 FN_DEF@[696; 864)
420 VISIBILITY@[696; 699)
421 PUB_KW@[696; 699)
422 WHITESPACE@[699; 700)
423 FN_KW@[700; 702)
424 WHITESPACE@[702; 703)
425 NAME@[703; 713)
426 IDENT@[703; 713) "setsockopt"
427 PARAM_LIST@[713; 852)
428 L_PAREN@[713; 714)
429 PARAM@[714; 729)
430 BIND_PAT@[714; 720)
431 NAME@[714; 720)
432 IDENT@[714; 720) "socket"
433 COLON@[720; 721)
434 WHITESPACE@[721; 722)
435 PATH_TYPE@[722; 729)
436 PATH@[722; 729)
437 PATH_SEGMENT@[722; 729)
438 COLONCOLON@[722; 724)
439 NAME_REF@[724; 729)
440 IDENT@[724; 729) "c_int"
441 COMMA@[729; 730)
442 WHITESPACE@[730; 731)
443 PARAM@[731; 745)
444 BIND_PAT@[731; 736)
445 NAME@[731; 736)
446 IDENT@[731; 736) "level"
447 COLON@[736; 737)
448 WHITESPACE@[737; 738)
449 PATH_TYPE@[738; 745)
450 PATH@[738; 745)
451 PATH_SEGMENT@[738; 745)
452 COLONCOLON@[738; 740)
453 NAME_REF@[740; 745)
454 IDENT@[740; 745) "c_int"
455 COMMA@[745; 746)
456 WHITESPACE@[746; 747)
457 PARAM@[747; 760)
458 BIND_PAT@[747; 751)
459 NAME@[747; 751)
460 IDENT@[747; 751) "name"
461 COLON@[751; 752)
462 WHITESPACE@[752; 753)
463 PATH_TYPE@[753; 760)
464 PATH@[753; 760)
465 PATH_SEGMENT@[753; 760)
466 COLONCOLON@[753; 755)
467 NAME_REF@[755; 760)
468 IDENT@[755; 760) "c_int"
469 COMMA@[760; 761)
470 WHITESPACE@[761; 784)
471 PARAM@[784; 806)
472 BIND_PAT@[784; 789)
473 NAME@[784; 789)
474 IDENT@[784; 789) "value"
475 COLON@[789; 790)
476 WHITESPACE@[790; 791)
477 POINTER_TYPE@[791; 806)
478 STAR@[791; 792)
479 CONST_KW@[792; 797)
480 WHITESPACE@[797; 798)
481 PATH_TYPE@[798; 806)
482 PATH@[798; 806)
483 PATH_SEGMENT@[798; 806)
484 COLONCOLON@[798; 800)
485 NAME_REF@[800; 806)
486 IDENT@[800; 806) "c_void"
487 COMMA@[806; 807)
488 WHITESPACE@[807; 830)
489 PARAM@[830; 851)
490 BIND_PAT@[830; 840)
491 NAME@[830; 840)
492 IDENT@[830; 840) "option_len"
493 COLON@[840; 841)
494 WHITESPACE@[841; 842)
495 PATH_TYPE@[842; 851)
496 PATH@[842; 851)
497 PATH_SEGMENT@[842; 851)
498 NAME_REF@[842; 851)
499 IDENT@[842; 851) "socklen_t"
500 R_PAREN@[851; 852)
501 WHITESPACE@[852; 853)
502 RET_TYPE@[853; 863)
503 THIN_ARROW@[853; 855)
504 WHITESPACE@[855; 856)
505 PATH_TYPE@[856; 863)
506 PATH@[856; 863)
507 PATH_SEGMENT@[856; 863)
508 COLONCOLON@[856; 858)
509 NAME_REF@[858; 863)
510 IDENT@[858; 863) "c_int"
511 SEMI@[863; 864)
512 WHITESPACE@[864; 869)
513 FN_DEF@[869; 992)
514 VISIBILITY@[869; 872)
515 PUB_KW@[869; 872)
516 WHITESPACE@[872; 873)
517 FN_KW@[873; 875)
518 WHITESPACE@[875; 876)
519 NAME@[876; 887)
520 IDENT@[876; 887) "getpeername"
521 PARAM_LIST@[887; 980)
522 L_PAREN@[887; 888)
523 PARAM@[888; 903)
524 BIND_PAT@[888; 894)
525 NAME@[888; 894)
526 IDENT@[888; 894) "socket"
527 COLON@[894; 895)
528 WHITESPACE@[895; 896)
529 PATH_TYPE@[896; 903)
530 PATH@[896; 903)
531 PATH_SEGMENT@[896; 903)
532 COLONCOLON@[896; 898)
533 NAME_REF@[898; 903)
534 IDENT@[898; 903) "c_int"
535 COMMA@[903; 904)
536 WHITESPACE@[904; 905)
537 PARAM@[905; 927)
538 BIND_PAT@[905; 912)
539 NAME@[905; 912)
540 IDENT@[905; 912) "address"
541 COLON@[912; 913)
542 WHITESPACE@[913; 914)
543 POINTER_TYPE@[914; 927)
544 STAR@[914; 915)
545 MUT_KW@[915; 918)
546 WHITESPACE@[918; 919)
547 PATH_TYPE@[919; 927)
548 PATH@[919; 927)
549 PATH_SEGMENT@[919; 927)
550 NAME_REF@[919; 927)
551 IDENT@[919; 927) "sockaddr"
552 COMMA@[927; 928)
553 WHITESPACE@[928; 952)
554 PARAM@[952; 979)
555 BIND_PAT@[952; 963)
556 NAME@[952; 963)
557 IDENT@[952; 963) "address_len"
558 COLON@[963; 964)
559 WHITESPACE@[964; 965)
560 POINTER_TYPE@[965; 979)
561 STAR@[965; 966)
562 MUT_KW@[966; 969)
563 WHITESPACE@[969; 970)
564 PATH_TYPE@[970; 979)
565 PATH@[970; 979)
566 PATH_SEGMENT@[970; 979)
567 NAME_REF@[970; 979)
568 IDENT@[970; 979) "socklen_t"
569 R_PAREN@[979; 980)
570 WHITESPACE@[980; 981)
571 RET_TYPE@[981; 991)
572 THIN_ARROW@[981; 983)
573 WHITESPACE@[983; 984)
574 PATH_TYPE@[984; 991)
575 PATH@[984; 991)
576 PATH_SEGMENT@[984; 991)
577 COLONCOLON@[984; 986)
578 NAME_REF@[986; 991)
579 IDENT@[986; 991) "c_int"
580 SEMI@[991; 992)
581 WHITESPACE@[992; 997)
582 FN_DEF@[997; 1173)
583 VISIBILITY@[997; 1000)
584 PUB_KW@[997; 1000)
585 WHITESPACE@[1000; 1001)
586 FN_KW@[1001; 1003)
587 WHITESPACE@[1003; 1004)
588 NAME@[1004; 1010)
589 IDENT@[1004; 1010) "sendto"
590 PARAM_LIST@[1010; 1159)
591 L_PAREN@[1010; 1011)
592 PARAM@[1011; 1026)
593 BIND_PAT@[1011; 1017)
594 NAME@[1011; 1017)
595 IDENT@[1011; 1017) "socket"
596 COLON@[1017; 1018)
597 WHITESPACE@[1018; 1019)
598 PATH_TYPE@[1019; 1026)
599 PATH@[1019; 1026)
600 PATH_SEGMENT@[1019; 1026)
601 COLONCOLON@[1019; 1021)
602 NAME_REF@[1021; 1026)
603 IDENT@[1021; 1026) "c_int"
604 COMMA@[1026; 1027)
605 WHITESPACE@[1027; 1028)
606 PARAM@[1028; 1048)
607 BIND_PAT@[1028; 1031)
608 NAME@[1028; 1031)
609 IDENT@[1028; 1031) "buf"
610 COLON@[1031; 1032)
611 WHITESPACE@[1032; 1033)
612 POINTER_TYPE@[1033; 1048)
613 STAR@[1033; 1034)
614 CONST_KW@[1034; 1039)
615 WHITESPACE@[1039; 1040)
616 PATH_TYPE@[1040; 1048)
617 PATH@[1040; 1048)
618 PATH_SEGMENT@[1040; 1048)
619 COLONCOLON@[1040; 1042)
620 NAME_REF@[1042; 1048)
621 IDENT@[1042; 1048) "c_void"
622 COMMA@[1048; 1049)
623 WHITESPACE@[1049; 1050)
624 PARAM@[1050; 1063)
625 BIND_PAT@[1050; 1053)
626 NAME@[1050; 1053)
627 IDENT@[1050; 1053) "len"
628 COLON@[1053; 1054)
629 WHITESPACE@[1054; 1055)
630 PATH_TYPE@[1055; 1063)
631 PATH@[1055; 1063)
632 PATH_SEGMENT@[1055; 1063)
633 COLONCOLON@[1055; 1057)
634 NAME_REF@[1057; 1063)
635 IDENT@[1057; 1063) "size_t"
636 COMMA@[1063; 1064)
637 WHITESPACE@[1064; 1083)
638 PARAM@[1083; 1097)
639 BIND_PAT@[1083; 1088)
640 NAME@[1083; 1088)
641 IDENT@[1083; 1088) "flags"
642 COLON@[1088; 1089)
643 WHITESPACE@[1089; 1090)
644 PATH_TYPE@[1090; 1097)
645 PATH@[1090; 1097)
646 PATH_SEGMENT@[1090; 1097)
647 COLONCOLON@[1090; 1092)
648 NAME_REF@[1092; 1097)
649 IDENT@[1092; 1097) "c_int"
650 COMMA@[1097; 1098)
651 WHITESPACE@[1098; 1099)
652 PARAM@[1099; 1120)
653 BIND_PAT@[1099; 1103)
654 NAME@[1099; 1103)
655 IDENT@[1099; 1103) "addr"
656 COLON@[1103; 1104)
657 WHITESPACE@[1104; 1105)
658 POINTER_TYPE@[1105; 1120)
659 STAR@[1105; 1106)
660 CONST_KW@[1106; 1111)
661 WHITESPACE@[1111; 1112)
662 PATH_TYPE@[1112; 1120)
663 PATH@[1112; 1120)
664 PATH_SEGMENT@[1112; 1120)
665 NAME_REF@[1112; 1120)
666 IDENT@[1112; 1120) "sockaddr"
667 COMMA@[1120; 1121)
668 WHITESPACE@[1121; 1140)
669 PARAM@[1140; 1158)
670 BIND_PAT@[1140; 1147)
671 NAME@[1140; 1147)
672 IDENT@[1140; 1147) "addrlen"
673 COLON@[1147; 1148)
674 WHITESPACE@[1148; 1149)
675 PATH_TYPE@[1149; 1158)
676 PATH@[1149; 1158)
677 PATH_SEGMENT@[1149; 1158)
678 NAME_REF@[1149; 1158)
679 IDENT@[1149; 1158) "socklen_t"
680 R_PAREN@[1158; 1159)
681 WHITESPACE@[1159; 1160)
682 RET_TYPE@[1160; 1172)
683 THIN_ARROW@[1160; 1162)
684 WHITESPACE@[1162; 1163)
685 PATH_TYPE@[1163; 1172)
686 PATH@[1163; 1172)
687 PATH_SEGMENT@[1163; 1172)
688 COLONCOLON@[1163; 1165)
689 NAME_REF@[1165; 1172)
690 IDENT@[1165; 1172) "ssize_t"
691 SEMI@[1172; 1173)
692 WHITESPACE@[1173; 1178)
693 FN_DEF@[1178; 1289)
694 VISIBILITY@[1178; 1181)
695 PUB_KW@[1178; 1181)
696 WHITESPACE@[1181; 1182)
697 FN_KW@[1182; 1184)
698 WHITESPACE@[1184; 1185)
699 NAME@[1185; 1189)
700 IDENT@[1185; 1189) "send"
701 PARAM_LIST@[1189; 1275)
702 L_PAREN@[1189; 1190)
703 PARAM@[1190; 1205)
704 BIND_PAT@[1190; 1196)
705 NAME@[1190; 1196)
706 IDENT@[1190; 1196) "socket"
707 COLON@[1196; 1197)
708 WHITESPACE@[1197; 1198)
709 PATH_TYPE@[1198; 1205)
710 PATH@[1198; 1205)
711 PATH_SEGMENT@[1198; 1205)
712 COLONCOLON@[1198; 1200)
713 NAME_REF@[1200; 1205)
714 IDENT@[1200; 1205) "c_int"
715 COMMA@[1205; 1206)
716 WHITESPACE@[1206; 1207)
717 PARAM@[1207; 1227)
718 BIND_PAT@[1207; 1210)
719 NAME@[1207; 1210)
720 IDENT@[1207; 1210) "buf"
721 COLON@[1210; 1211)
722 WHITESPACE@[1211; 1212)
723 POINTER_TYPE@[1212; 1227)
724 STAR@[1212; 1213)
725 CONST_KW@[1213; 1218)
726 WHITESPACE@[1218; 1219)
727 PATH_TYPE@[1219; 1227)
728 PATH@[1219; 1227)
729 PATH_SEGMENT@[1219; 1227)
730 COLONCOLON@[1219; 1221)
731 NAME_REF@[1221; 1227)
732 IDENT@[1221; 1227) "c_void"
733 COMMA@[1227; 1228)
734 WHITESPACE@[1228; 1229)
735 PARAM@[1229; 1242)
736 BIND_PAT@[1229; 1232)
737 NAME@[1229; 1232)
738 IDENT@[1229; 1232) "len"
739 COLON@[1232; 1233)
740 WHITESPACE@[1233; 1234)
741 PATH_TYPE@[1234; 1242)
742 PATH@[1234; 1242)
743 PATH_SEGMENT@[1234; 1242)
744 COLONCOLON@[1234; 1236)
745 NAME_REF@[1236; 1242)
746 IDENT@[1236; 1242) "size_t"
747 COMMA@[1242; 1243)
748 WHITESPACE@[1243; 1260)
749 PARAM@[1260; 1274)
750 BIND_PAT@[1260; 1265)
751 NAME@[1260; 1265)
752 IDENT@[1260; 1265) "flags"
753 COLON@[1265; 1266)
754 WHITESPACE@[1266; 1267)
755 PATH_TYPE@[1267; 1274)
756 PATH@[1267; 1274)
757 PATH_SEGMENT@[1267; 1274)
758 COLONCOLON@[1267; 1269)
759 NAME_REF@[1269; 1274)
760 IDENT@[1269; 1274) "c_int"
761 R_PAREN@[1274; 1275)
762 WHITESPACE@[1275; 1276)
763 RET_TYPE@[1276; 1288)
764 THIN_ARROW@[1276; 1278)
765 WHITESPACE@[1278; 1279)
766 PATH_TYPE@[1279; 1288)
767 PATH@[1279; 1288)
768 PATH_SEGMENT@[1279; 1288)
769 COLONCOLON@[1279; 1281)
770 NAME_REF@[1281; 1288)
771 IDENT@[1281; 1288) "ssize_t"
772 SEMI@[1288; 1289)
773 WHITESPACE@[1289; 1294)
774 FN_DEF@[1294; 1481)
775 VISIBILITY@[1294; 1297)
776 PUB_KW@[1294; 1297)
777 WHITESPACE@[1297; 1298)
778 FN_KW@[1298; 1300)
779 WHITESPACE@[1300; 1301)
780 NAME@[1301; 1309)
781 IDENT@[1301; 1309) "recvfrom"
782 PARAM_LIST@[1309; 1467)
783 L_PAREN@[1309; 1310)
784 PARAM@[1310; 1325)
785 BIND_PAT@[1310; 1316)
786 NAME@[1310; 1316)
787 IDENT@[1310; 1316) "socket"
788 COLON@[1316; 1317)
789 WHITESPACE@[1317; 1318)
790 PATH_TYPE@[1318; 1325)
791 PATH@[1318; 1325)
792 PATH_SEGMENT@[1318; 1325)
793 COLONCOLON@[1318; 1320)
794 NAME_REF@[1320; 1325)
795 IDENT@[1320; 1325) "c_int"
796 COMMA@[1325; 1326)
797 WHITESPACE@[1326; 1327)
798 PARAM@[1327; 1345)
799 BIND_PAT@[1327; 1330)
800 NAME@[1327; 1330)
801 IDENT@[1327; 1330) "buf"
802 COLON@[1330; 1331)
803 WHITESPACE@[1331; 1332)
804 POINTER_TYPE@[1332; 1345)
805 STAR@[1332; 1333)
806 MUT_KW@[1333; 1336)
807 WHITESPACE@[1336; 1337)
808 PATH_TYPE@[1337; 1345)
809 PATH@[1337; 1345)
810 PATH_SEGMENT@[1337; 1345)
811 COLONCOLON@[1337; 1339)
812 NAME_REF@[1339; 1345)
813 IDENT@[1339; 1345) "c_void"
814 COMMA@[1345; 1346)
815 WHITESPACE@[1346; 1347)
816 PARAM@[1347; 1360)
817 BIND_PAT@[1347; 1350)
818 NAME@[1347; 1350)
819 IDENT@[1347; 1350) "len"
820 COLON@[1350; 1351)
821 WHITESPACE@[1351; 1352)
822 PATH_TYPE@[1352; 1360)
823 PATH@[1352; 1360)
824 PATH_SEGMENT@[1352; 1360)
825 COLONCOLON@[1352; 1354)
826 NAME_REF@[1354; 1360)
827 IDENT@[1354; 1360) "size_t"
828 COMMA@[1360; 1361)
829 WHITESPACE@[1361; 1382)
830 PARAM@[1382; 1396)
831 BIND_PAT@[1382; 1387)
832 NAME@[1382; 1387)
833 IDENT@[1382; 1387) "flags"
834 COLON@[1387; 1388)
835 WHITESPACE@[1388; 1389)
836 PATH_TYPE@[1389; 1396)
837 PATH@[1389; 1396)
838 PATH_SEGMENT@[1389; 1396)
839 COLONCOLON@[1389; 1391)
840 NAME_REF@[1391; 1396)
841 IDENT@[1391; 1396) "c_int"
842 COMMA@[1396; 1397)
843 WHITESPACE@[1397; 1398)
844 PARAM@[1398; 1419)
845 BIND_PAT@[1398; 1402)
846 NAME@[1398; 1402)
847 IDENT@[1398; 1402) "addr"
848 COLON@[1402; 1403)
849 WHITESPACE@[1403; 1404)
850 POINTER_TYPE@[1404; 1419)
851 STAR@[1404; 1405)
852 MUT_KW@[1405; 1408)
853 WHITESPACE@[1408; 1409)
854 PATH_TYPE@[1409; 1419)
855 PATH@[1409; 1419)
856 PATH_SEGMENT@[1409; 1419)
857 COLONCOLON@[1409; 1411)
858 NAME_REF@[1411; 1419)
859 IDENT@[1411; 1419) "sockaddr"
860 COMMA@[1419; 1420)
861 WHITESPACE@[1420; 1441)
862 PARAM@[1441; 1466)
863 BIND_PAT@[1441; 1448)
864 NAME@[1441; 1448)
865 IDENT@[1441; 1448) "addrlen"
866 COLON@[1448; 1449)
867 WHITESPACE@[1449; 1450)
868 POINTER_TYPE@[1450; 1466)
869 STAR@[1450; 1451)
870 MUT_KW@[1451; 1454)
871 WHITESPACE@[1454; 1455)
872 PATH_TYPE@[1455; 1466)
873 PATH@[1455; 1466)
874 PATH_SEGMENT@[1455; 1466)
875 COLONCOLON@[1455; 1457)
876 NAME_REF@[1457; 1466)
877 IDENT@[1457; 1466) "socklen_t"
878 R_PAREN@[1466; 1467)
879 WHITESPACE@[1467; 1468)
880 RET_TYPE@[1468; 1480)
881 THIN_ARROW@[1468; 1470)
882 WHITESPACE@[1470; 1471)
883 PATH_TYPE@[1471; 1480)
884 PATH@[1471; 1480)
885 PATH_SEGMENT@[1471; 1480)
886 COLONCOLON@[1471; 1473)
887 NAME_REF@[1473; 1480)
888 IDENT@[1473; 1480) "ssize_t"
889 SEMI@[1480; 1481)
890 WHITESPACE@[1481; 1486)
891 FN_DEF@[1486; 1595)
892 VISIBILITY@[1486; 1489)
893 PUB_KW@[1486; 1489)
894 WHITESPACE@[1489; 1490)
895 FN_KW@[1490; 1492)
896 WHITESPACE@[1492; 1493)
897 NAME@[1493; 1497)
898 IDENT@[1493; 1497) "recv"
899 PARAM_LIST@[1497; 1581)
900 L_PAREN@[1497; 1498)
901 PARAM@[1498; 1513)
902 BIND_PAT@[1498; 1504)
903 NAME@[1498; 1504)
904 IDENT@[1498; 1504) "socket"
905 COLON@[1504; 1505)
906 WHITESPACE@[1505; 1506)
907 PATH_TYPE@[1506; 1513)
908 PATH@[1506; 1513)
909 PATH_SEGMENT@[1506; 1513)
910 COLONCOLON@[1506; 1508)
911 NAME_REF@[1508; 1513)
912 IDENT@[1508; 1513) "c_int"
913 COMMA@[1513; 1514)
914 WHITESPACE@[1514; 1515)
915 PARAM@[1515; 1533)
916 BIND_PAT@[1515; 1518)
917 NAME@[1515; 1518)
918 IDENT@[1515; 1518) "buf"
919 COLON@[1518; 1519)
920 WHITESPACE@[1519; 1520)
921 POINTER_TYPE@[1520; 1533)
922 STAR@[1520; 1521)
923 MUT_KW@[1521; 1524)
924 WHITESPACE@[1524; 1525)
925 PATH_TYPE@[1525; 1533)
926 PATH@[1525; 1533)
927 PATH_SEGMENT@[1525; 1533)
928 COLONCOLON@[1525; 1527)
929 NAME_REF@[1527; 1533)
930 IDENT@[1527; 1533) "c_void"
931 COMMA@[1533; 1534)
932 WHITESPACE@[1534; 1535)
933 PARAM@[1535; 1548)
934 BIND_PAT@[1535; 1538)
935 NAME@[1535; 1538)
936 IDENT@[1535; 1538) "len"
937 COLON@[1538; 1539)
938 WHITESPACE@[1539; 1540)
939 PATH_TYPE@[1540; 1548)
940 PATH@[1540; 1548)
941 PATH_SEGMENT@[1540; 1548)
942 COLONCOLON@[1540; 1542)
943 NAME_REF@[1542; 1548)
944 IDENT@[1542; 1548) "size_t"
945 COMMA@[1548; 1549)
946 WHITESPACE@[1549; 1566)
947 PARAM@[1566; 1580)
948 BIND_PAT@[1566; 1571)
949 NAME@[1566; 1571)
950 IDENT@[1566; 1571) "flags"
951 COLON@[1571; 1572)
952 WHITESPACE@[1572; 1573)
953 PATH_TYPE@[1573; 1580)
954 PATH@[1573; 1580)
955 PATH_SEGMENT@[1573; 1580)
956 COLONCOLON@[1573; 1575)
957 NAME_REF@[1575; 1580)
958 IDENT@[1575; 1580) "c_int"
959 R_PAREN@[1580; 1581)
960 WHITESPACE@[1581; 1582)
961 RET_TYPE@[1582; 1594)
962 THIN_ARROW@[1582; 1584)
963 WHITESPACE@[1584; 1585)
964 PATH_TYPE@[1585; 1594)
965 PATH@[1585; 1594)
966 PATH_SEGMENT@[1585; 1594)
967 COLONCOLON@[1585; 1587)
968 NAME_REF@[1587; 1594)
969 IDENT@[1587; 1594) "ssize_t"
970 SEMI@[1594; 1595)
971 WHITESPACE@[1595; 1596)
972 R_CURLY@[1596; 1597)
973 WHITESPACE@[1597; 1598)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0032_where_for.rs b/crates/ra_syntax/tests/data/parser/ok/0032_where_for.rs
new file mode 100644
index 000000000..588170fbe
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0032_where_for.rs
@@ -0,0 +1,4 @@
1fn test_serialization<SER>()
2where
3 SER: Serialize + for<'de> Deserialize<'de> + PartialEq + std::fmt::Debug,
4{}
diff --git a/crates/ra_syntax/tests/data/parser/ok/0032_where_for.txt b/crates/ra_syntax/tests/data/parser/ok/0032_where_for.txt
new file mode 100644
index 000000000..e3b9386a8
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0032_where_for.txt
@@ -0,0 +1,85 @@
1ROOT@[0; 116)
2 FN_DEF@[0; 115)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 21)
6 IDENT@[3; 21) "test_serialization"
7 TYPE_PARAM_LIST@[21; 26)
8 L_ANGLE@[21; 22)
9 TYPE_PARAM@[22; 25)
10 NAME@[22; 25)
11 IDENT@[22; 25) "SER"
12 R_ANGLE@[25; 26)
13 PARAM_LIST@[26; 28)
14 L_PAREN@[26; 27)
15 R_PAREN@[27; 28)
16 WHITESPACE@[28; 29)
17 WHERE_CLAUSE@[29; 112)
18 WHERE_KW@[29; 34)
19 WHITESPACE@[34; 39)
20 WHERE_PRED@[39; 111)
21 PATH_TYPE@[39; 42)
22 PATH@[39; 42)
23 PATH_SEGMENT@[39; 42)
24 NAME_REF@[39; 42)
25 IDENT@[39; 42) "SER"
26 COLON@[42; 43)
27 WHITESPACE@[43; 44)
28 PATH_TYPE@[44; 111)
29 PATH@[44; 53)
30 PATH_SEGMENT@[44; 53)
31 NAME_REF@[44; 53)
32 IDENT@[44; 53) "Serialize"
33 WHITESPACE@[53; 54)
34 PLUS@[54; 55)
35 WHITESPACE@[55; 56)
36 FOR_TYPE@[56; 81)
37 FOR_KW@[56; 59)
38 TYPE_PARAM_LIST@[59; 64)
39 L_ANGLE@[59; 60)
40 LIFETIME_PARAM@[60; 63)
41 LIFETIME@[60; 63) "'de"
42 R_ANGLE@[63; 64)
43 WHITESPACE@[64; 65)
44 PATH_TYPE@[65; 81)
45 PATH@[65; 81)
46 PATH_SEGMENT@[65; 81)
47 NAME_REF@[65; 76)
48 IDENT@[65; 76) "Deserialize"
49 TYPE_ARG_LIST@[76; 81)
50 L_ANGLE@[76; 77)
51 LIFETIME_ARG@[77; 80)
52 LIFETIME@[77; 80) "'de"
53 R_ANGLE@[80; 81)
54 WHITESPACE@[81; 82)
55 PLUS@[82; 83)
56 WHITESPACE@[83; 84)
57 PATH_TYPE@[84; 111)
58 PATH@[84; 93)
59 PATH_SEGMENT@[84; 93)
60 NAME_REF@[84; 93)
61 IDENT@[84; 93) "PartialEq"
62 WHITESPACE@[93; 94)
63 PLUS@[94; 95)
64 WHITESPACE@[95; 96)
65 PATH_TYPE@[96; 111)
66 PATH@[96; 111)
67 PATH@[96; 104)
68 PATH@[96; 99)
69 PATH_SEGMENT@[96; 99)
70 NAME_REF@[96; 99)
71 IDENT@[96; 99) "std"
72 COLONCOLON@[99; 101)
73 PATH_SEGMENT@[101; 104)
74 NAME_REF@[101; 104)
75 IDENT@[101; 104) "fmt"
76 COLONCOLON@[104; 106)
77 PATH_SEGMENT@[106; 111)
78 NAME_REF@[106; 111)
79 IDENT@[106; 111) "Debug"
80 COMMA@[111; 112)
81 WHITESPACE@[112; 113)
82 BLOCK@[113; 115)
83 L_CURLY@[113; 114)
84 R_CURLY@[114; 115)
85 WHITESPACE@[115; 116)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0033_label_break.rs b/crates/ra_syntax/tests/data/parser/ok/0033_label_break.rs
new file mode 100644
index 000000000..728d78137
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0033_label_break.rs
@@ -0,0 +1,28 @@
1// format with label break value.
2fn main() {
3 'empty_block: {}
4
5 'block: {
6 do_thing();
7 if condition_not_met() {
8 break 'block;
9 }
10 do_next_thing();
11 if condition_not_met() {
12 break 'block;
13 }
14 do_last_thing();
15 }
16
17 let result = 'block: {
18 if foo() {
19 // comment
20 break 'block 1;
21 }
22 if bar() {
23 /* comment */
24 break 'block 2;
25 }
26 3
27 };
28}
diff --git a/crates/ra_syntax/tests/data/parser/ok/0033_label_break.txt b/crates/ra_syntax/tests/data/parser/ok/0033_label_break.txt
new file mode 100644
index 000000000..6abb9234c
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0033_label_break.txt
@@ -0,0 +1,215 @@
1ROOT@[0; 506)
2 COMMENT@[0; 33)
3 WHITESPACE@[33; 34)
4 FN_DEF@[34; 505)
5 FN_KW@[34; 36)
6 WHITESPACE@[36; 37)
7 NAME@[37; 41)
8 IDENT@[37; 41) "main"
9 PARAM_LIST@[41; 43)
10 L_PAREN@[41; 42)
11 R_PAREN@[42; 43)
12 WHITESPACE@[43; 44)
13 BLOCK@[44; 505)
14 L_CURLY@[44; 45)
15 WHITESPACE@[45; 50)
16 EXPR_STMT@[50; 66)
17 BLOCK_EXPR@[50; 66)
18 LABEL@[50; 63)
19 LIFETIME@[50; 62) "'empty_block"
20 COLON@[62; 63)
21 WHITESPACE@[63; 64)
22 BLOCK@[64; 66)
23 L_CURLY@[64; 65)
24 R_CURLY@[65; 66)
25 WHITESPACE@[66; 72)
26 EXPR_STMT@[72; 295)
27 BLOCK_EXPR@[72; 295)
28 LABEL@[72; 79)
29 LIFETIME@[72; 78) "'block"
30 COLON@[78; 79)
31 WHITESPACE@[79; 80)
32 BLOCK@[80; 295)
33 L_CURLY@[80; 81)
34 WHITESPACE@[81; 90)
35 EXPR_STMT@[90; 101)
36 CALL_EXPR@[90; 100)
37 PATH_EXPR@[90; 98)
38 PATH@[90; 98)
39 PATH_SEGMENT@[90; 98)
40 NAME_REF@[90; 98)
41 IDENT@[90; 98) "do_thing"
42 ARG_LIST@[98; 100)
43 L_PAREN@[98; 99)
44 R_PAREN@[99; 100)
45 SEMI@[100; 101)
46 WHITESPACE@[101; 110)
47 EXPR_STMT@[110; 170)
48 IF_EXPR@[110; 170)
49 IF_KW@[110; 112)
50 WHITESPACE@[112; 113)
51 CONDITION@[113; 132)
52 CALL_EXPR@[113; 132)
53 PATH_EXPR@[113; 130)
54 PATH@[113; 130)
55 PATH_SEGMENT@[113; 130)
56 NAME_REF@[113; 130)
57 IDENT@[113; 130) "condition_not_met"
58 ARG_LIST@[130; 132)
59 L_PAREN@[130; 131)
60 R_PAREN@[131; 132)
61 WHITESPACE@[132; 133)
62 BLOCK@[133; 170)
63 L_CURLY@[133; 134)
64 WHITESPACE@[134; 147)
65 EXPR_STMT@[147; 160)
66 BREAK_EXPR@[147; 159)
67 BREAK_KW@[147; 152)
68 WHITESPACE@[152; 153)
69 LIFETIME@[153; 159) "'block"
70 SEMI@[159; 160)
71 WHITESPACE@[160; 169)
72 R_CURLY@[169; 170)
73 WHITESPACE@[170; 179)
74 EXPR_STMT@[179; 195)
75 CALL_EXPR@[179; 194)
76 PATH_EXPR@[179; 192)
77 PATH@[179; 192)
78 PATH_SEGMENT@[179; 192)
79 NAME_REF@[179; 192)
80 IDENT@[179; 192) "do_next_thing"
81 ARG_LIST@[192; 194)
82 L_PAREN@[192; 193)
83 R_PAREN@[193; 194)
84 SEMI@[194; 195)
85 WHITESPACE@[195; 204)
86 EXPR_STMT@[204; 264)
87 IF_EXPR@[204; 264)
88 IF_KW@[204; 206)
89 WHITESPACE@[206; 207)
90 CONDITION@[207; 226)
91 CALL_EXPR@[207; 226)
92 PATH_EXPR@[207; 224)
93 PATH@[207; 224)
94 PATH_SEGMENT@[207; 224)
95 NAME_REF@[207; 224)
96 IDENT@[207; 224) "condition_not_met"
97 ARG_LIST@[224; 226)
98 L_PAREN@[224; 225)
99 R_PAREN@[225; 226)
100 WHITESPACE@[226; 227)
101 BLOCK@[227; 264)
102 L_CURLY@[227; 228)
103 WHITESPACE@[228; 241)
104 EXPR_STMT@[241; 254)
105 BREAK_EXPR@[241; 253)
106 BREAK_KW@[241; 246)
107 WHITESPACE@[246; 247)
108 LIFETIME@[247; 253) "'block"
109 SEMI@[253; 254)
110 WHITESPACE@[254; 263)
111 R_CURLY@[263; 264)
112 WHITESPACE@[264; 273)
113 EXPR_STMT@[273; 289)
114 CALL_EXPR@[273; 288)
115 PATH_EXPR@[273; 286)
116 PATH@[273; 286)
117 PATH_SEGMENT@[273; 286)
118 NAME_REF@[273; 286)
119 IDENT@[273; 286) "do_last_thing"
120 ARG_LIST@[286; 288)
121 L_PAREN@[286; 287)
122 R_PAREN@[287; 288)
123 SEMI@[288; 289)
124 WHITESPACE@[289; 294)
125 R_CURLY@[294; 295)
126 WHITESPACE@[295; 301)
127 LET_STMT@[301; 503)
128 LET_KW@[301; 304)
129 WHITESPACE@[304; 305)
130 BIND_PAT@[305; 311)
131 NAME@[305; 311)
132 IDENT@[305; 311) "result"
133 WHITESPACE@[311; 312)
134 EQ@[312; 313)
135 WHITESPACE@[313; 314)
136 BLOCK_EXPR@[314; 502)
137 LABEL@[314; 321)
138 LIFETIME@[314; 320) "'block"
139 COLON@[320; 321)
140 WHITESPACE@[321; 322)
141 BLOCK@[322; 502)
142 L_CURLY@[322; 323)
143 WHITESPACE@[323; 332)
144 EXPR_STMT@[332; 403)
145 IF_EXPR@[332; 403)
146 IF_KW@[332; 334)
147 WHITESPACE@[334; 335)
148 CONDITION@[335; 340)
149 CALL_EXPR@[335; 340)
150 PATH_EXPR@[335; 338)
151 PATH@[335; 338)
152 PATH_SEGMENT@[335; 338)
153 NAME_REF@[335; 338)
154 IDENT@[335; 338) "foo"
155 ARG_LIST@[338; 340)
156 L_PAREN@[338; 339)
157 R_PAREN@[339; 340)
158 WHITESPACE@[340; 341)
159 BLOCK@[341; 403)
160 L_CURLY@[341; 342)
161 WHITESPACE@[342; 355)
162 COMMENT@[355; 365)
163 WHITESPACE@[365; 378)
164 EXPR_STMT@[378; 393)
165 BREAK_EXPR@[378; 392)
166 BREAK_KW@[378; 383)
167 WHITESPACE@[383; 384)
168 LIFETIME@[384; 390) "'block"
169 WHITESPACE@[390; 391)
170 LITERAL@[391; 392)
171 INT_NUMBER@[391; 392) "1"
172 SEMI@[392; 393)
173 WHITESPACE@[393; 402)
174 R_CURLY@[402; 403)
175 WHITESPACE@[403; 412)
176 EXPR_STMT@[412; 486)
177 IF_EXPR@[412; 486)
178 IF_KW@[412; 414)
179 WHITESPACE@[414; 415)
180 CONDITION@[415; 420)
181 CALL_EXPR@[415; 420)
182 PATH_EXPR@[415; 418)
183 PATH@[415; 418)
184 PATH_SEGMENT@[415; 418)
185 NAME_REF@[415; 418)
186 IDENT@[415; 418) "bar"
187 ARG_LIST@[418; 420)
188 L_PAREN@[418; 419)
189 R_PAREN@[419; 420)
190 WHITESPACE@[420; 421)
191 BLOCK@[421; 486)
192 L_CURLY@[421; 422)
193 WHITESPACE@[422; 435)
194 COMMENT@[435; 448)
195 WHITESPACE@[448; 461)
196 EXPR_STMT@[461; 476)
197 BREAK_EXPR@[461; 475)
198 BREAK_KW@[461; 466)
199 WHITESPACE@[466; 467)
200 LIFETIME@[467; 473) "'block"
201 WHITESPACE@[473; 474)
202 LITERAL@[474; 475)
203 INT_NUMBER@[474; 475) "2"
204 SEMI@[475; 476)
205 WHITESPACE@[476; 485)
206 R_CURLY@[485; 486)
207 WHITESPACE@[486; 495)
208 LITERAL@[495; 496)
209 INT_NUMBER@[495; 496) "3"
210 WHITESPACE@[496; 501)
211 R_CURLY@[501; 502)
212 SEMI@[502; 503)
213 WHITESPACE@[503; 504)
214 R_CURLY@[504; 505)
215 WHITESPACE@[505; 506)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0034_macro_2.0.rs b/crates/ra_syntax/tests/data/parser/ok/0034_macro_2.0.rs
new file mode 100644
index 000000000..2a70ee83a
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0034_macro_2.0.rs
@@ -0,0 +1,16 @@
1macro parse_use_trees($($s:expr),* $(,)*) {
2 vec![
3 $(parse_use_tree($s),)*
4 ]
5}
6
7#[test]
8fn test_use_tree_merge() {
9 macro test_merge([$($input:expr),* $(,)*], [$($output:expr),* $(,)*]) {
10 assert_eq!(
11 merge_use_trees(parse_use_trees!($($input,)*)),
12 parse_use_trees!($($output,)*),
13 );
14 }
15}
16
diff --git a/crates/ra_syntax/tests/data/parser/ok/0034_macro_2.0.txt b/crates/ra_syntax/tests/data/parser/ok/0034_macro_2.0.txt
new file mode 100644
index 000000000..74af9d71b
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0034_macro_2.0.txt
@@ -0,0 +1,317 @@
1ROOT@[0; 350)
2 MACRO_CALL@[0; 41)
3 PATH@[0; 5)
4 PATH_SEGMENT@[0; 5)
5 NAME_REF@[0; 5)
6 IDENT@[0; 5) "macro"
7 err: `expected EXCL`
8 WHITESPACE@[5; 6)
9 IDENT@[6; 21) "parse_use_trees"
10 TOKEN_TREE@[21; 41)
11 L_PAREN@[21; 22)
12 DOLLAR@[22; 23)
13 TOKEN_TREE@[23; 32)
14 L_PAREN@[23; 24)
15 DOLLAR@[24; 25)
16 IDENT@[25; 26) "s"
17 COLON@[26; 27)
18 IDENT@[27; 31) "expr"
19 R_PAREN@[31; 32)
20 COMMA@[32; 33)
21 STAR@[33; 34)
22 WHITESPACE@[34; 35)
23 DOLLAR@[35; 36)
24 TOKEN_TREE@[36; 39)
25 L_PAREN@[36; 37)
26 COMMA@[37; 38)
27 R_PAREN@[38; 39)
28 STAR@[39; 40)
29 R_PAREN@[40; 41)
30 err: `expected SEMI`
31 WHITESPACE@[41; 42)
32 err: `expected an item`
33 ERROR@[42; 93)
34 L_CURLY@[42; 43)
35 WHITESPACE@[43; 48)
36 IDENT@[48; 51) "vec"
37 EXCL@[51; 52)
38 L_BRACK@[52; 53)
39 WHITESPACE@[53; 62)
40 DOLLAR@[62; 63)
41 L_PAREN@[63; 64)
42 IDENT@[64; 78) "parse_use_tree"
43 L_PAREN@[78; 79)
44 DOLLAR@[79; 80)
45 IDENT@[80; 81) "s"
46 R_PAREN@[81; 82)
47 COMMA@[82; 83)
48 R_PAREN@[83; 84)
49 STAR@[84; 85)
50 WHITESPACE@[85; 90)
51 R_BRACK@[90; 91)
52 WHITESPACE@[91; 92)
53 R_CURLY@[92; 93)
54 WHITESPACE@[93; 95)
55 FN_DEF@[95; 348)
56 ATTR@[95; 102)
57 POUND@[95; 96)
58 TOKEN_TREE@[96; 102)
59 L_BRACK@[96; 97)
60 IDENT@[97; 101) "test"
61 R_BRACK@[101; 102)
62 WHITESPACE@[102; 103)
63 FN_KW@[103; 105)
64 WHITESPACE@[105; 106)
65 NAME@[106; 125)
66 IDENT@[106; 125) "test_use_tree_merge"
67 PARAM_LIST@[125; 127)
68 L_PAREN@[125; 126)
69 R_PAREN@[126; 127)
70 WHITESPACE@[127; 128)
71 BLOCK@[128; 348)
72 L_CURLY@[128; 129)
73 WHITESPACE@[129; 134)
74 EXPR_STMT@[134; 139)
75 PATH_EXPR@[134; 139)
76 PATH@[134; 139)
77 PATH_SEGMENT@[134; 139)
78 NAME_REF@[134; 139)
79 IDENT@[134; 139) "macro"
80 err: `expected SEMI`
81 WHITESPACE@[139; 140)
82 EXPR_STMT@[140; 154)
83 CALL_EXPR@[140; 154)
84 PATH_EXPR@[140; 150)
85 PATH@[140; 150)
86 PATH_SEGMENT@[140; 150)
87 NAME_REF@[140; 150)
88 IDENT@[140; 150) "test_merge"
89 ARG_LIST@[150; 154)
90 L_PAREN@[150; 151)
91 ARRAY_EXPR@[151; 154)
92 L_BRACK@[151; 152)
93 err: `expected expression`
94 ERROR@[152; 153)
95 DOLLAR@[152; 153)
96 err: `expected COMMA`
97 PAREN_EXPR@[153; 154)
98 L_PAREN@[153; 154)
99 err: `expected expression`
100 err: `expected R_PAREN`
101 err: `expected COMMA`
102 err: `expected expression`
103 err: `expected R_BRACK`
104 err: `expected COMMA`
105 err: `expected SEMI`
106 err: `expected expression`
107 EXPR_STMT@[154; 155)
108 ERROR@[154; 155)
109 DOLLAR@[154; 155)
110 err: `expected SEMI`
111 EXPR_STMT@[155; 160)
112 PATH_EXPR@[155; 160)
113 PATH@[155; 160)
114 PATH_SEGMENT@[155; 160)
115 NAME_REF@[155; 160)
116 IDENT@[155; 160) "input"
117 err: `expected SEMI`
118 err: `expected expression`
119 EXPR_STMT@[160; 161)
120 ERROR@[160; 161)
121 COLON@[160; 161)
122 err: `expected SEMI`
123 EXPR_STMT@[161; 165)
124 PATH_EXPR@[161; 165)
125 PATH@[161; 165)
126 PATH_SEGMENT@[161; 165)
127 NAME_REF@[161; 165)
128 IDENT@[161; 165) "expr"
129 err: `expected SEMI`
130 err: `expected expression`
131 EXPR_STMT@[165; 166)
132 ERROR@[165; 166)
133 R_PAREN@[165; 166)
134 err: `expected SEMI`
135 err: `expected expression`
136 EXPR_STMT@[166; 167)
137 ERROR@[166; 167)
138 COMMA@[166; 167)
139 err: `expected SEMI`
140 EXPR_STMT@[167; 170)
141 PREFIX_EXPR@[167; 170)
142 STAR@[167; 168)
143 WHITESPACE@[168; 169)
144 err: `expected expression`
145 ERROR@[169; 170)
146 DOLLAR@[169; 170)
147 err: `expected SEMI`
148 EXPR_STMT@[170; 171)
149 PAREN_EXPR@[170; 171)
150 L_PAREN@[170; 171)
151 err: `expected expression`
152 err: `expected R_PAREN`
153 err: `expected SEMI`
154 err: `expected expression`
155 EXPR_STMT@[171; 172)
156 ERROR@[171; 172)
157 COMMA@[171; 172)
158 err: `expected SEMI`
159 err: `expected expression`
160 EXPR_STMT@[172; 173)
161 ERROR@[172; 173)
162 R_PAREN@[172; 173)
163 err: `expected SEMI`
164 EXPR_STMT@[173; 175)
165 PREFIX_EXPR@[173; 175)
166 STAR@[173; 174)
167 err: `expected expression`
168 ERROR@[174; 175)
169 R_BRACK@[174; 175)
170 err: `expected SEMI`
171 err: `expected expression`
172 EXPR_STMT@[175; 176)
173 ERROR@[175; 176)
174 COMMA@[175; 176)
175 err: `expected SEMI`
176 WHITESPACE@[176; 177)
177 EXPR_STMT@[177; 180)
178 ARRAY_EXPR@[177; 180)
179 L_BRACK@[177; 178)
180 err: `expected expression`
181 ERROR@[178; 179)
182 DOLLAR@[178; 179)
183 err: `expected COMMA`
184 PAREN_EXPR@[179; 180)
185 L_PAREN@[179; 180)
186 err: `expected expression`
187 err: `expected R_PAREN`
188 err: `expected COMMA`
189 err: `expected expression`
190 err: `expected R_BRACK`
191 err: `expected SEMI`
192 err: `expected expression`
193 EXPR_STMT@[180; 181)
194 ERROR@[180; 181)
195 DOLLAR@[180; 181)
196 err: `expected SEMI`
197 EXPR_STMT@[181; 187)
198 PATH_EXPR@[181; 187)
199 PATH@[181; 187)
200 PATH_SEGMENT@[181; 187)
201 NAME_REF@[181; 187)
202 IDENT@[181; 187) "output"
203 err: `expected SEMI`
204 err: `expected expression`
205 EXPR_STMT@[187; 188)
206 ERROR@[187; 188)
207 COLON@[187; 188)
208 err: `expected SEMI`
209 EXPR_STMT@[188; 192)
210 PATH_EXPR@[188; 192)
211 PATH@[188; 192)
212 PATH_SEGMENT@[188; 192)
213 NAME_REF@[188; 192)
214 IDENT@[188; 192) "expr"
215 err: `expected SEMI`
216 err: `expected expression`
217 EXPR_STMT@[192; 193)
218 ERROR@[192; 193)
219 R_PAREN@[192; 193)
220 err: `expected SEMI`
221 err: `expected expression`
222 EXPR_STMT@[193; 194)
223 ERROR@[193; 194)
224 COMMA@[193; 194)
225 err: `expected SEMI`
226 EXPR_STMT@[194; 197)
227 PREFIX_EXPR@[194; 197)
228 STAR@[194; 195)
229 WHITESPACE@[195; 196)
230 err: `expected expression`
231 ERROR@[196; 197)
232 DOLLAR@[196; 197)
233 err: `expected SEMI`
234 EXPR_STMT@[197; 198)
235 PAREN_EXPR@[197; 198)
236 L_PAREN@[197; 198)
237 err: `expected expression`
238 err: `expected R_PAREN`
239 err: `expected SEMI`
240 err: `expected expression`
241 EXPR_STMT@[198; 199)
242 ERROR@[198; 199)
243 COMMA@[198; 199)
244 err: `expected SEMI`
245 err: `expected expression`
246 EXPR_STMT@[199; 200)
247 ERROR@[199; 200)
248 R_PAREN@[199; 200)
249 err: `expected SEMI`
250 EXPR_STMT@[200; 202)
251 PREFIX_EXPR@[200; 202)
252 STAR@[200; 201)
253 err: `expected expression`
254 ERROR@[201; 202)
255 R_BRACK@[201; 202)
256 err: `expected SEMI`
257 err: `expected expression`
258 EXPR_STMT@[202; 203)
259 ERROR@[202; 203)
260 R_PAREN@[202; 203)
261 err: `expected SEMI`
262 WHITESPACE@[203; 204)
263 BLOCK_EXPR@[204; 346)
264 BLOCK@[204; 346)
265 L_CURLY@[204; 205)
266 WHITESPACE@[205; 214)
267 EXPR_STMT@[214; 340)
268 MACRO_CALL@[214; 339)
269 PATH@[214; 223)
270 PATH_SEGMENT@[214; 223)
271 NAME_REF@[214; 223)
272 IDENT@[214; 223) "assert_eq"
273 EXCL@[223; 224)
274 TOKEN_TREE@[224; 339)
275 L_PAREN@[224; 225)
276 WHITESPACE@[225; 238)
277 IDENT@[238; 253) "merge_use_trees"
278 TOKEN_TREE@[253; 284)
279 L_PAREN@[253; 254)
280 IDENT@[254; 269) "parse_use_trees"
281 EXCL@[269; 270)
282 TOKEN_TREE@[270; 283)
283 L_PAREN@[270; 271)
284 DOLLAR@[271; 272)
285 TOKEN_TREE@[272; 281)
286 L_PAREN@[272; 273)
287 DOLLAR@[273; 274)
288 IDENT@[274; 279) "input"
289 COMMA@[279; 280)
290 R_PAREN@[280; 281)
291 STAR@[281; 282)
292 R_PAREN@[282; 283)
293 R_PAREN@[283; 284)
294 COMMA@[284; 285)
295 WHITESPACE@[285; 298)
296 IDENT@[298; 313) "parse_use_trees"
297 EXCL@[313; 314)
298 TOKEN_TREE@[314; 328)
299 L_PAREN@[314; 315)
300 DOLLAR@[315; 316)
301 TOKEN_TREE@[316; 326)
302 L_PAREN@[316; 317)
303 DOLLAR@[317; 318)
304 IDENT@[318; 324) "output"
305 COMMA@[324; 325)
306 R_PAREN@[325; 326)
307 STAR@[326; 327)
308 R_PAREN@[327; 328)
309 COMMA@[328; 329)
310 WHITESPACE@[329; 338)
311 R_PAREN@[338; 339)
312 SEMI@[339; 340)
313 WHITESPACE@[340; 345)
314 R_CURLY@[345; 346)
315 WHITESPACE@[346; 347)
316 R_CURLY@[347; 348)
317 WHITESPACE@[348; 350)
diff --git a/crates/ra_syntax/tests/data/parser/ok/0034_macro_stuck.txt b/crates/ra_syntax/tests/data/parser/ok/0034_macro_stuck.txt
new file mode 100644
index 000000000..1a8ca761d
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0034_macro_stuck.txt
@@ -0,0 +1,250 @@
1ROOT@[0; 350)
2 MACRO_CALL@[0; 41)
3 PATH@[0; 5)
4 PATH_SEGMENT@[0; 5)
5 NAME_REF@[0; 5)
6 IDENT@[0; 5) "macro"
7 err: `expected EXCL`
8 WHITESPACE@[5; 6)
9 IDENT@[6; 21) "parse_use_trees"
10 TOKEN_TREE@[21; 41)
11 L_PAREN@[21; 22)
12 DOLLAR@[22; 23)
13 TOKEN_TREE@[23; 32)
14 L_PAREN@[23; 24)
15 DOLLAR@[24; 25)
16 IDENT@[25; 26) "s"
17 COLON@[26; 27)
18 IDENT@[27; 31) "expr"
19 R_PAREN@[31; 32)
20 COMMA@[32; 33)
21 STAR@[33; 34)
22 WHITESPACE@[34; 35)
23 DOLLAR@[35; 36)
24 TOKEN_TREE@[36; 39)
25 L_PAREN@[36; 37)
26 COMMA@[37; 38)
27 R_PAREN@[38; 39)
28 STAR@[39; 40)
29 R_PAREN@[40; 41)
30 err: `expected SEMI`
31 WHITESPACE@[41; 42)
32 err: `expected an item`
33 ERROR@[42; 93)
34 L_CURLY@[42; 43)
35 WHITESPACE@[43; 48)
36 IDENT@[48; 51) "vec"
37 EXCL@[51; 52)
38 L_BRACK@[52; 53)
39 WHITESPACE@[53; 62)
40 DOLLAR@[62; 63)
41 L_PAREN@[63; 64)
42 IDENT@[64; 78) "parse_use_tree"
43 L_PAREN@[78; 79)
44 DOLLAR@[79; 80)
45 IDENT@[80; 81) "s"
46 R_PAREN@[81; 82)
47 COMMA@[82; 83)
48 R_PAREN@[83; 84)
49 STAR@[84; 85)
50 WHITESPACE@[85; 90)
51 R_BRACK@[90; 91)
52 WHITESPACE@[91; 92)
53 R_CURLY@[92; 93)
54 WHITESPACE@[93; 95)
55 FN_DEF@[95; 348)
56 ATTR@[95; 102)
57 POUND@[95; 96)
58 TOKEN_TREE@[96; 102)
59 L_BRACK@[96; 97)
60 IDENT@[97; 101) "test"
61 R_BRACK@[101; 102)
62 WHITESPACE@[102; 103)
63 FN_KW@[103; 105)
64 WHITESPACE@[105; 106)
65 NAME@[106; 125)
66 IDENT@[106; 125) "test_use_tree_merge"
67 PARAM_LIST@[125; 127)
68 L_PAREN@[125; 126)
69 R_PAREN@[126; 127)
70 WHITESPACE@[127; 128)
71 BLOCK@[128; 348)
72 L_CURLY@[128; 129)
73 WHITESPACE@[129; 134)
74 EXPR_STMT@[134; 139)
75 PATH_EXPR@[134; 139)
76 PATH@[134; 139)
77 PATH_SEGMENT@[134; 139)
78 NAME_REF@[134; 139)
79 IDENT@[134; 139) "macro"
80 err: `expected SEMI`
81 WHITESPACE@[139; 140)
82 EXPR_STMT@[140; 203)
83 CALL_EXPR@[140; 203)
84 PATH_EXPR@[140; 150)
85 PATH@[140; 150)
86 PATH_SEGMENT@[140; 150)
87 NAME_REF@[140; 150)
88 IDENT@[140; 150) "test_merge"
89 ARG_LIST@[150; 203)
90 L_PAREN@[150; 151)
91 ARRAY_EXPR@[151; 202)
92 L_BRACK@[151; 152)
93 err: `expected expression`
94 ERROR@[152; 153)
95 DOLLAR@[152; 153)
96 err: `expected COMMA`
97 TUPLE_EXPR@[153; 166)
98 L_PAREN@[153; 154)
99 err: `expected expression`
100 ERROR@[154; 155)
101 DOLLAR@[154; 155)
102 err: `expected COMMA`
103 PATH_EXPR@[155; 160)
104 PATH@[155; 160)
105 PATH_SEGMENT@[155; 160)
106 NAME_REF@[155; 160)
107 IDENT@[155; 160) "input"
108 err: `expected COMMA`
109 err: `expected expression`
110 ERROR@[160; 161)
111 COLON@[160; 161)
112 err: `expected COMMA`
113 PATH_EXPR@[161; 165)
114 PATH@[161; 165)
115 PATH_SEGMENT@[161; 165)
116 NAME_REF@[161; 165)
117 IDENT@[161; 165) "expr"
118 R_PAREN@[165; 166)
119 COMMA@[166; 167)
120 PREFIX_EXPR@[167; 170)
121 STAR@[167; 168)
122 WHITESPACE@[168; 169)
123 err: `expected expression`
124 ERROR@[169; 170)
125 DOLLAR@[169; 170)
126 err: `expected COMMA`
127 BIN_EXPR@[170; 175)
128 PAREN_EXPR@[170; 173)
129 L_PAREN@[170; 171)
130 err: `expected expression`
131 ERROR@[171; 172)
132 COMMA@[171; 172)
133 R_PAREN@[172; 173)
134 STAR@[173; 174)
135 err: `expected expression`
136 ERROR@[174; 175)
137 R_BRACK@[174; 175)
138 COMMA@[175; 176)
139 WHITESPACE@[176; 177)
140 ARRAY_EXPR@[177; 202)
141 L_BRACK@[177; 178)
142 err: `expected expression`
143 ERROR@[178; 179)
144 DOLLAR@[178; 179)
145 err: `expected COMMA`
146 TUPLE_EXPR@[179; 193)
147 L_PAREN@[179; 180)
148 err: `expected expression`
149 ERROR@[180; 181)
150 DOLLAR@[180; 181)
151 err: `expected COMMA`
152 PATH_EXPR@[181; 187)
153 PATH@[181; 187)
154 PATH_SEGMENT@[181; 187)
155 NAME_REF@[181; 187)
156 IDENT@[181; 187) "output"
157 err: `expected COMMA`
158 err: `expected expression`
159 ERROR@[187; 188)
160 COLON@[187; 188)
161 err: `expected COMMA`
162 PATH_EXPR@[188; 192)
163 PATH@[188; 192)
164 PATH_SEGMENT@[188; 192)
165 NAME_REF@[188; 192)
166 IDENT@[188; 192) "expr"
167 R_PAREN@[192; 193)
168 COMMA@[193; 194)
169 PREFIX_EXPR@[194; 197)
170 STAR@[194; 195)
171 WHITESPACE@[195; 196)
172 err: `expected expression`
173 ERROR@[196; 197)
174 DOLLAR@[196; 197)
175 err: `expected COMMA`
176 BIN_EXPR@[197; 202)
177 PAREN_EXPR@[197; 200)
178 L_PAREN@[197; 198)
179 err: `expected expression`
180 ERROR@[198; 199)
181 COMMA@[198; 199)
182 R_PAREN@[199; 200)
183 STAR@[200; 201)
184 err: `expected expression`
185 ERROR@[201; 202)
186 R_BRACK@[201; 202)
187 err: `expected COMMA`
188 err: `expected expression`
189 err: `expected R_BRACK`
190 err: `expected COMMA`
191 err: `expected expression`
192 err: `expected R_BRACK`
193 R_PAREN@[202; 203)
194 err: `expected SEMI`
195 WHITESPACE@[203; 204)
196 BLOCK_EXPR@[204; 346)
197 BLOCK@[204; 346)
198 L_CURLY@[204; 205)
199 WHITESPACE@[205; 214)
200 EXPR_STMT@[214; 340)
201 MACRO_CALL@[214; 339)
202 PATH@[214; 223)
203 PATH_SEGMENT@[214; 223)
204 NAME_REF@[214; 223)
205 IDENT@[214; 223) "assert_eq"
206 EXCL@[223; 224)
207 TOKEN_TREE@[224; 339)
208 L_PAREN@[224; 225)
209 WHITESPACE@[225; 238)
210 IDENT@[238; 253) "merge_use_trees"
211 TOKEN_TREE@[253; 284)
212 L_PAREN@[253; 254)
213 IDENT@[254; 269) "parse_use_trees"
214 EXCL@[269; 270)
215 TOKEN_TREE@[270; 283)
216 L_PAREN@[270; 271)
217 DOLLAR@[271; 272)
218 TOKEN_TREE@[272; 281)
219 L_PAREN@[272; 273)
220 DOLLAR@[273; 274)
221 IDENT@[274; 279) "input"
222 COMMA@[279; 280)
223 R_PAREN@[280; 281)
224 STAR@[281; 282)
225 R_PAREN@[282; 283)
226 R_PAREN@[283; 284)
227 COMMA@[284; 285)
228 WHITESPACE@[285; 298)
229 IDENT@[298; 313) "parse_use_trees"
230 EXCL@[313; 314)
231 TOKEN_TREE@[314; 328)
232 L_PAREN@[314; 315)
233 DOLLAR@[315; 316)
234 TOKEN_TREE@[316; 326)
235 L_PAREN@[316; 317)
236 DOLLAR@[317; 318)
237 IDENT@[318; 324) "output"
238 COMMA@[324; 325)
239 R_PAREN@[325; 326)
240 STAR@[326; 327)
241 R_PAREN@[327; 328)
242 COMMA@[328; 329)
243 WHITESPACE@[329; 338)
244 R_PAREN@[338; 339)
245 SEMI@[339; 340)
246 WHITESPACE@[340; 345)
247 R_CURLY@[345; 346)
248 WHITESPACE@[346; 347)
249 R_CURLY@[347; 348)
250 WHITESPACE@[348; 350)