aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/libeditor/src/symbols.rs2
-rw-r--r--crates/libeditor/tests/test.rs2
-rw-r--r--crates/libsyntax2/src/ast/generated.rs16
-rw-r--r--crates/libsyntax2/src/grammar.ron21
-rw-r--r--crates/libsyntax2/src/grammar/expressions/atom.rs73
-rw-r--r--crates/libsyntax2/src/grammar/expressions/mod.rs67
-rw-r--r--crates/libsyntax2/src/grammar/items/mod.rs26
-rw-r--r--crates/libsyntax2/src/grammar/items/structs.rs75
-rw-r--r--crates/libsyntax2/src/grammar/items/traits.rs54
-rw-r--r--crates/libsyntax2/src/grammar/items/use_item.rs8
-rw-r--r--crates/libsyntax2/src/grammar/mod.rs25
-rw-r--r--crates/libsyntax2/src/grammar/patterns.rs8
-rw-r--r--crates/libsyntax2/src/lib.rs28
-rw-r--r--crates/libsyntax2/src/syntax_kinds/generated.rs32
-rw-r--r--crates/libsyntax2/tests/data/parser/err/0000_struct_field_missing_comma.txt53
-rw-r--r--crates/libsyntax2/tests/data/parser/err/0001_item_recovery_in_file.txt5
-rw-r--r--crates/libsyntax2/tests/data/parser/err/0003_C++_semicolon.txt57
-rw-r--r--crates/libsyntax2/tests/data/parser/err/0005_attribute_recover.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/err/0006_named_field_recovery.txt131
-rw-r--r--crates/libsyntax2/tests/data/parser/err/0007_stray_curly_in_file.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/err/0008_item_block_recovery.txt34
-rw-r--r--crates/libsyntax2/tests/data/parser/err/0010_unsafe_lambda_block.txt19
-rw-r--r--crates/libsyntax2/tests/data/parser/err/0013_invalid_type.txt143
-rw-r--r--crates/libsyntax2/tests/data/parser/err/0014_where_no_bounds.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0001_const_unsafe_fn.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0002_const_fn.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0003_extern_block.txt7
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0004_extern_fn.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0007_unsafe_trait.txt5
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0008_unsafe_impl.txt5
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0009_unsafe_auto_trait.txt5
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0010_unsafe_default_impl.txt5
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0011_unsafe_fn.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0012_unsafe_extern_fn.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0013_unsafe_block_in_mod.txt4
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0034_bind_pat.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0035_ref_pat.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0036_placeholder_pat.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0038_function_ret_type.txt4
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0039_path_expr.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0040_expr_literals.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0043_call_expr.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0044_ref_expr.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0045_block.txt8
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0046_default_impl.txt5
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0047_impl_item.txt5
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0048_impl_item_neg.txt5
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0050_let_stmt;.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0051_method_call_expr.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0052_field_expr.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0053_block_items.txt4
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0054_impl_item_items.txt133
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0055_self_param.txt209
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0056_trait_item.txt5
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0057_auto_trait.txt5
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0059_function_where_clause.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0060_function_type_params.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0061_struct_lit.txt109
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0064_param_list.txt8
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0065_if_expr.txt16
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0066_lambda_expr.txt4
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0067_block_expr.txt12
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0068_pub_expr.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0068_return_expr.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0069_match_arm.txt83
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0070_match_expr.txt14
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0071_tuple_pat_fields.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0072_path_part.txt13
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0073_struct_pat_fields.txt84
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0074_unary_expr.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0075_try_expr.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0076_cond.txt4
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0077_while_expr.txt6
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0078_mod_contents.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0079_cast_expr.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0080_tuple_expr.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0081_index_expr.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0082_tuple_pat.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0083_postfix_range.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0084_loop_expr.txt4
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0085_for_expr.txt4
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0085_match_arms_commas.txt72
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0086_array_expr.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0086_no_semi_after_block.txt25
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0087_stmt_postfix_expr_ambiguity.txt76
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0088_stmt_bin_expr_ambiguity.txt20
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0089_slice_pat.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0090_trait_item_items.txt113
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0091_fn_decl.txt27
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0092_literal_pattern.txt75
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0094_range_pat.txt41
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0095_path_type_with_bounds.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0097_param_list_opt_patterns.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0098_where_clause.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0099_crate_keyword_vis.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0101_qual_paths.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0102_full_range_expr.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0103_field_attrs.txt67
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0104_arb_self_types.txt121
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0105_continue_expr.txt4
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0106_break_expr.txt4
-rw-r--r--crates/libsyntax2/tests/data/parser/inline/0107_label.txt8
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0001_struct_item.txt31
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0002_struct_item_field.txt29
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0005_fn_item.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0008_mod_item.txt119
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0011_outer_attribute.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0012_visibility.txt10
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0014_use_tree.txt58
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0015_use_tree.txt73
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0016_struct_flavors.txt110
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0017_attr_trailing_comma.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0018_struct_type_params.txt46
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0019_enums.txt217
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0021_extern_fn.txt6
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0022_empty_extern_block.txt18
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0025_extern_fn_in_block.txt4
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0026_const_fn_in_block.txt4
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0027_unsafe_fn_in_block.txt17
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0028_operator_binding_power.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0029_range_forms.txt2
-rw-r--r--crates/libsyntax2/tests/data/parser/ok/0030_traits.txt133
122 files changed, 1739 insertions, 1531 deletions
diff --git a/crates/libeditor/src/symbols.rs b/crates/libeditor/src/symbols.rs
index b2b05bc6a..37cef6389 100644
--- a/crates/libeditor/src/symbols.rs
+++ b/crates/libeditor/src/symbols.rs
@@ -93,7 +93,7 @@ fn structure_node(node: SyntaxNodeRef) -> Option<StructureNode> {
93 visitor() 93 visitor()
94 .visit(decl::<ast::FnDef>) 94 .visit(decl::<ast::FnDef>)
95 .visit(decl::<ast::StructDef>) 95 .visit(decl::<ast::StructDef>)
96 .visit(decl::<ast::NamedField>) 96 .visit(decl::<ast::NamedFieldDef>)
97 .visit(decl::<ast::EnumDef>) 97 .visit(decl::<ast::EnumDef>)
98 .visit(decl::<ast::TraitDef>) 98 .visit(decl::<ast::TraitDef>)
99 .visit(decl::<ast::Module>) 99 .visit(decl::<ast::Module>)
diff --git a/crates/libeditor/tests/test.rs b/crates/libeditor/tests/test.rs
index 858c6c4a6..4f7c2e07a 100644
--- a/crates/libeditor/tests/test.rs
+++ b/crates/libeditor/tests/test.rs
@@ -104,7 +104,7 @@ impl fmt::Debug for E {}
104 let symbols = file_structure(&file); 104 let symbols = file_structure(&file);
105 assert_eq_dbg( 105 assert_eq_dbg(
106 r#"[StructureNode { parent: None, label: "Foo", navigation_range: [8; 11), node_range: [1; 26), kind: STRUCT_DEF }, 106 r#"[StructureNode { parent: None, label: "Foo", navigation_range: [8; 11), node_range: [1; 26), kind: STRUCT_DEF },
107 StructureNode { parent: Some(0), label: "x", navigation_range: [18; 19), node_range: [18; 24), kind: NAMED_FIELD }, 107 StructureNode { parent: Some(0), label: "x", navigation_range: [18; 19), node_range: [18; 24), kind: NAMED_FIELD_DEF },
108 StructureNode { parent: None, label: "m", navigation_range: [32; 33), node_range: [28; 53), kind: MODULE }, 108 StructureNode { parent: None, label: "m", navigation_range: [32; 33), node_range: [28; 53), kind: MODULE },
109 StructureNode { parent: Some(2), label: "bar", navigation_range: [43; 46), node_range: [40; 51), kind: FN_DEF }, 109 StructureNode { parent: Some(2), label: "bar", navigation_range: [43; 46), node_range: [40; 51), kind: FN_DEF },
110 StructureNode { parent: None, label: "E", navigation_range: [60; 61), node_range: [55; 75), kind: ENUM_DEF }, 110 StructureNode { parent: None, label: "E", navigation_range: [60; 61), node_range: [55; 75), kind: ENUM_DEF },
diff --git a/crates/libsyntax2/src/ast/generated.rs b/crates/libsyntax2/src/ast/generated.rs
index 5edb9faaa..8eb91c1df 100644
--- a/crates/libsyntax2/src/ast/generated.rs
+++ b/crates/libsyntax2/src/ast/generated.rs
@@ -283,25 +283,25 @@ impl<'a> AstNode<'a> for NameRef<'a> {
283 283
284impl<'a> NameRef<'a> {} 284impl<'a> NameRef<'a> {}
285 285
286// NamedField 286// NamedFieldDef
287#[derive(Debug, Clone, Copy)] 287#[derive(Debug, Clone, Copy)]
288pub struct NamedField<'a> { 288pub struct NamedFieldDef<'a> {
289 syntax: SyntaxNodeRef<'a>, 289 syntax: SyntaxNodeRef<'a>,
290} 290}
291 291
292impl<'a> AstNode<'a> for NamedField<'a> { 292impl<'a> AstNode<'a> for NamedFieldDef<'a> {
293 fn cast(syntax: SyntaxNodeRef<'a>) -> Option<Self> { 293 fn cast(syntax: SyntaxNodeRef<'a>) -> Option<Self> {
294 match syntax.kind() { 294 match syntax.kind() {
295 NAMED_FIELD => Some(NamedField { syntax }), 295 NAMED_FIELD_DEF => Some(NamedFieldDef { syntax }),
296 _ => None, 296 _ => None,
297 } 297 }
298 } 298 }
299 fn syntax(self) -> SyntaxNodeRef<'a> { self.syntax } 299 fn syntax(self) -> SyntaxNodeRef<'a> { self.syntax }
300} 300}
301 301
302impl<'a> ast::NameOwner<'a> for NamedField<'a> {} 302impl<'a> ast::NameOwner<'a> for NamedFieldDef<'a> {}
303impl<'a> ast::AttrsOwner<'a> for NamedField<'a> {} 303impl<'a> ast::AttrsOwner<'a> for NamedFieldDef<'a> {}
304impl<'a> NamedField<'a> {} 304impl<'a> NamedFieldDef<'a> {}
305 305
306// NeverType 306// NeverType
307#[derive(Debug, Clone, Copy)] 307#[derive(Debug, Clone, Copy)]
@@ -498,7 +498,7 @@ impl<'a> ast::NameOwner<'a> for StructDef<'a> {}
498impl<'a> ast::TypeParamsOwner<'a> for StructDef<'a> {} 498impl<'a> ast::TypeParamsOwner<'a> for StructDef<'a> {}
499impl<'a> ast::AttrsOwner<'a> for StructDef<'a> {} 499impl<'a> ast::AttrsOwner<'a> for StructDef<'a> {}
500impl<'a> StructDef<'a> { 500impl<'a> StructDef<'a> {
501 pub fn fields(self) -> impl Iterator<Item = NamedField<'a>> + 'a { 501 pub fn fields(self) -> impl Iterator<Item = NamedFieldDef<'a>> + 'a {
502 super::children(self) 502 super::children(self)
503 } 503 }
504} 504}
diff --git a/crates/libsyntax2/src/grammar.ron b/crates/libsyntax2/src/grammar.ron
index 52764e664..f4792df1d 100644
--- a/crates/libsyntax2/src/grammar.ron
+++ b/crates/libsyntax2/src/grammar.ron
@@ -149,6 +149,7 @@ Grammar(
149 "PLACEHOLDER_PAT", 149 "PLACEHOLDER_PAT",
150 "PATH_PAT", 150 "PATH_PAT",
151 "STRUCT_PAT", 151 "STRUCT_PAT",
152 "FIELD_PAT_LIST",
152 "TUPLE_STRUCT_PAT", 153 "TUPLE_STRUCT_PAT",
153 "TUPLE_PAT", 154 "TUPLE_PAT",
154 "SLICE_PAT", 155 "SLICE_PAT",
@@ -170,10 +171,12 @@ Grammar(
170 "BLOCK_EXPR", 171 "BLOCK_EXPR",
171 "RETURN_EXPR", 172 "RETURN_EXPR",
172 "MATCH_EXPR", 173 "MATCH_EXPR",
174 "MATCH_ARM_LIST",
173 "MATCH_ARM", 175 "MATCH_ARM",
174 "MATCH_GUARD", 176 "MATCH_GUARD",
175 "STRUCT_LIT", 177 "STRUCT_LIT",
176 "STRUCT_LIT_FIELD", 178 "NAMED_FIELD_LIST",
179 "NAMED_FIELD",
177 180
178 // postfix 181 // postfix
179 "CALL_EXPR", 182 "CALL_EXPR",
@@ -190,14 +193,20 @@ Grammar(
190 "RANGE_EXPR", // just weird 193 "RANGE_EXPR", // just weird
191 "BIN_EXPR", 194 "BIN_EXPR",
192 195
193 196 "BLOCK",
194 "EXTERN_BLOCK_EXPR", 197 "EXTERN_BLOCK",
198 "EXTERN_ITEM_LIST",
195 "ENUM_VARIANT", 199 "ENUM_VARIANT",
196 "NAMED_FIELD", 200 "NAMED_FIELD_DEF_LIST",
201 "NAMED_FIELD_DEF",
202 "POS_FIELD_LIST",
197 "POS_FIELD", 203 "POS_FIELD",
204 "ENUM_VARIANT_LIST",
205 "ITEM_LIST",
198 "ATTR", 206 "ATTR",
199 "META_ITEM", // not an item actually 207 "META_ITEM", // not an item actually
200 "USE_TREE", 208 "USE_TREE",
209 "USE_TREE_LIST",
201 "PATH", 210 "PATH",
202 "PATH_SEGMENT", 211 "PATH_SEGMENT",
203 "LITERAL", 212 "LITERAL",
@@ -244,10 +253,10 @@ Grammar(
244 "AttrsOwner", 253 "AttrsOwner",
245 ], 254 ],
246 collections: [ 255 collections: [
247 ["fields", "NamedField"] 256 ["fields", "NamedFieldDef"]
248 ] 257 ]
249 ), 258 ),
250 "NamedField": ( traits: ["NameOwner", "AttrsOwner"] ), 259 "NamedFieldDef": ( traits: ["NameOwner", "AttrsOwner"] ),
251 "EnumDef": ( traits: [ 260 "EnumDef": ( traits: [
252 "NameOwner", 261 "NameOwner",
253 "TypeParamsOwner", 262 "TypeParamsOwner",
diff --git a/crates/libsyntax2/src/grammar/expressions/atom.rs b/crates/libsyntax2/src/grammar/expressions/atom.rs
index 9d98340af..417366026 100644
--- a/crates/libsyntax2/src/grammar/expressions/atom.rs
+++ b/crates/libsyntax2/src/grammar/expressions/atom.rs
@@ -148,7 +148,11 @@ fn lambda_expr(p: &mut Parser) -> CompletedMarker {
148 p.eat(MOVE_KW); 148 p.eat(MOVE_KW);
149 params::param_list_opt_types(p); 149 params::param_list_opt_types(p);
150 if opt_fn_ret_type(p) { 150 if opt_fn_ret_type(p) {
151 block(p); 151 if p.at(L_CURLY) {
152 block(p);
153 } else {
154 p.error("expected a block");
155 }
152 } else { 156 } else {
153 expr(p); 157 expr(p);
154 } 158 }
@@ -254,6 +258,17 @@ fn match_expr(p: &mut Parser) -> CompletedMarker {
254 let m = p.start(); 258 let m = p.start();
255 p.bump(); 259 p.bump();
256 expr_no_struct(p); 260 expr_no_struct(p);
261 if p.at(L_CURLY) {
262 match_arm_list(p);
263 } else {
264 p.error("expected `{`")
265 }
266 m.complete(p, MATCH_EXPR)
267}
268
269fn match_arm_list(p: &mut Parser) {
270 assert!(p.at(L_CURLY));
271 let m = p.start();
257 p.eat(L_CURLY); 272 p.eat(L_CURLY);
258 while !p.at(EOF) && !p.at(R_CURLY) { 273 while !p.at(EOF) && !p.at(R_CURLY) {
259 // test match_arms_commas 274 // test match_arms_commas
@@ -271,7 +286,7 @@ fn match_expr(p: &mut Parser) -> CompletedMarker {
271 } 286 }
272 } 287 }
273 p.expect(R_CURLY); 288 p.expect(R_CURLY);
274 m.complete(p, MATCH_EXPR) 289 m.complete(p, MATCH_ARM_LIST);
275} 290}
276 291
277// test match_arm 292// test match_arm
@@ -307,62 +322,10 @@ pub(super) fn block_expr(p: &mut Parser) -> CompletedMarker {
307 assert!(p.at(L_CURLY) || p.at(UNSAFE_KW) && p.nth(1) == L_CURLY); 322 assert!(p.at(L_CURLY) || p.at(UNSAFE_KW) && p.nth(1) == L_CURLY);
308 let m = p.start(); 323 let m = p.start();
309 p.eat(UNSAFE_KW); 324 p.eat(UNSAFE_KW);
310 p.bump(); 325 block(p);
311 while !p.at(EOF) && !p.at(R_CURLY) {
312 match p.current() {
313 LET_KW => let_stmt(p),
314 _ => {
315 // test block_items
316 // fn a() { fn b() {} }
317 let m = p.start();
318 match items::maybe_item(p, items::ItemFlavor::Mod) {
319 items::MaybeItem::Item(kind) => {
320 m.complete(p, kind);
321 }
322 items::MaybeItem::Modifiers => {
323 m.abandon(p);
324 p.error("expected an item");
325 }
326 // test pub_expr
327 // fn foo() { pub 92; } //FIXME
328 items::MaybeItem::None => {
329 let is_blocklike = expressions::expr_stmt(p) == BlockLike::Block;
330 if p.eat(SEMI) || (is_blocklike && !p.at(R_CURLY)) {
331 m.complete(p, EXPR_STMT);
332 } else {
333 m.abandon(p);
334 }
335 }
336 }
337 }
338 }
339 }
340 p.expect(R_CURLY);
341 m.complete(p, BLOCK_EXPR) 326 m.complete(p, BLOCK_EXPR)
342} 327}
343 328
344// test let_stmt;
345// fn foo() {
346// let a;
347// let b: i32;
348// let c = 92;
349// let d: i32 = 92;
350// }
351fn let_stmt(p: &mut Parser) {
352 assert!(p.at(LET_KW));
353 let m = p.start();
354 p.bump();
355 patterns::pattern(p);
356 if p.at(COLON) {
357 types::ascription(p);
358 }
359 if p.eat(EQ) {
360 expressions::expr(p);
361 }
362 p.expect(SEMI);
363 m.complete(p, LET_STMT);
364}
365
366// test return_expr 329// test return_expr
367// fn foo() { 330// fn foo() {
368// return; 331// return;
diff --git a/crates/libsyntax2/src/grammar/expressions/mod.rs b/crates/libsyntax2/src/grammar/expressions/mod.rs
index 9ce0c1f8f..e133c1d9b 100644
--- a/crates/libsyntax2/src/grammar/expressions/mod.rs
+++ b/crates/libsyntax2/src/grammar/expressions/mod.rs
@@ -26,11 +26,62 @@ fn expr_no_struct(p: &mut Parser) {
26// fn c() { 1; 2; } 26// fn c() { 1; 2; }
27// fn d() { 1; 2 } 27// fn d() { 1; 2 }
28pub(super) fn block(p: &mut Parser) { 28pub(super) fn block(p: &mut Parser) {
29 if !p.at(L_CURLY) { 29 assert!(p.at(L_CURLY));
30 p.error("expected block"); 30 let m = p.start();
31 return; 31 p.bump();
32 while !p.at(EOF) && !p.at(R_CURLY) {
33 match p.current() {
34 LET_KW => let_stmt(p),
35 _ => {
36 // test block_items
37 // fn a() { fn b() {} }
38 let m = p.start();
39 match items::maybe_item(p, items::ItemFlavor::Mod) {
40 items::MaybeItem::Item(kind) => {
41 m.complete(p, kind);
42 }
43 items::MaybeItem::Modifiers => {
44 m.abandon(p);
45 p.error("expected an item");
46 }
47 // test pub_expr
48 // fn foo() { pub 92; } //FIXME
49 items::MaybeItem::None => {
50 let is_blocklike = expressions::expr_stmt(p) == BlockLike::Block;
51 if p.eat(SEMI) || (is_blocklike && !p.at(R_CURLY)) {
52 m.complete(p, EXPR_STMT);
53 } else {
54 m.abandon(p);
55 }
56 }
57 }
58 }
59 }
60 }
61 p.expect(R_CURLY);
62 m.complete(p, BLOCK);
63
64 // test let_stmt;
65 // fn foo() {
66 // let a;
67 // let b: i32;
68 // let c = 92;
69 // let d: i32 = 92;
70 // }
71 fn let_stmt(p: &mut Parser) {
72 assert!(p.at(LET_KW));
73 let m = p.start();
74 p.bump();
75 patterns::pattern(p);
76 if p.at(COLON) {
77 types::ascription(p);
78 }
79 if p.eat(EQ) {
80 expressions::expr(p);
81 }
82 p.expect(SEMI);
83 m.complete(p, LET_STMT);
32 } 84 }
33 atom::block_expr(p);
34} 85}
35 86
36#[derive(Clone, Copy)] 87#[derive(Clone, Copy)]
@@ -339,7 +390,7 @@ fn path_expr(p: &mut Parser, r: Restrictions) -> CompletedMarker {
339 paths::expr_path(p); 390 paths::expr_path(p);
340 match p.current() { 391 match p.current() {
341 L_CURLY if !r.forbid_structs => { 392 L_CURLY if !r.forbid_structs => {
342 struct_lit(p); 393 named_field_list(p);
343 m.complete(p, STRUCT_LIT) 394 m.complete(p, STRUCT_LIT)
344 } 395 }
345 EXCL => { 396 EXCL => {
@@ -356,8 +407,9 @@ fn path_expr(p: &mut Parser, r: Restrictions) -> CompletedMarker {
356// S { x, y: 32, }; 407// S { x, y: 32, };
357// S { x, y: 32, ..Default::default() }; 408// S { x, y: 32, ..Default::default() };
358// } 409// }
359fn struct_lit(p: &mut Parser) { 410fn named_field_list(p: &mut Parser) {
360 assert!(p.at(L_CURLY)); 411 assert!(p.at(L_CURLY));
412 let m = p.start();
361 p.bump(); 413 p.bump();
362 while !p.at(EOF) && !p.at(R_CURLY) { 414 while !p.at(EOF) && !p.at(R_CURLY) {
363 match p.current() { 415 match p.current() {
@@ -367,7 +419,7 @@ fn struct_lit(p: &mut Parser) {
367 if p.eat(COLON) { 419 if p.eat(COLON) {
368 expr(p); 420 expr(p);
369 } 421 }
370 m.complete(p, STRUCT_LIT_FIELD); 422 m.complete(p, NAMED_FIELD);
371 } 423 }
372 DOTDOT => { 424 DOTDOT => {
373 p.bump(); 425 p.bump();
@@ -380,4 +432,5 @@ fn struct_lit(p: &mut Parser) {
380 } 432 }
381 } 433 }
382 p.expect(R_CURLY); 434 p.expect(R_CURLY);
435 m.complete(p, NAMED_FIELD_LIST);
383} 436}
diff --git a/crates/libsyntax2/src/grammar/items/mod.rs b/crates/libsyntax2/src/grammar/items/mod.rs
index 18b681ee2..d236fb506 100644
--- a/crates/libsyntax2/src/grammar/items/mod.rs
+++ b/crates/libsyntax2/src/grammar/items/mod.rs
@@ -194,8 +194,8 @@ fn items_without_modifiers(p: &mut Parser) -> Option<SyntaxKind> {
194 // extern {} 194 // extern {}
195 EXTERN_KW if la == L_CURLY || ((la == STRING || la == RAW_STRING) && p.nth(2) == L_CURLY) => { 195 EXTERN_KW if la == L_CURLY || ((la == STRING || la == RAW_STRING) && p.nth(2) == L_CURLY) => {
196 abi(p); 196 abi(p);
197 extern_block(p); 197 extern_item_list(p);
198 EXTERN_BLOCK_EXPR 198 EXTERN_BLOCK
199 } 199 }
200 _ => return None, 200 _ => return None,
201 }; 201 };
@@ -212,10 +212,12 @@ fn extern_crate_item(p: &mut Parser) {
212 p.expect(SEMI); 212 p.expect(SEMI);
213} 213}
214 214
215fn extern_block(p: &mut Parser) { 215fn extern_item_list(p: &mut Parser) {
216 assert!(p.at(L_CURLY)); 216 assert!(p.at(L_CURLY));
217 let m = p.start();
217 p.bump(); 218 p.bump();
218 p.expect(R_CURLY); 219 p.expect(R_CURLY);
220 m.complete(p, EXTERN_ITEM_LIST);
219} 221}
220 222
221fn function(p: &mut Parser, flavor: ItemFlavor) { 223fn function(p: &mut Parser, flavor: ItemFlavor) {
@@ -284,14 +286,22 @@ fn mod_item(p: &mut Parser) {
284 p.bump(); 286 p.bump();
285 287
286 name(p); 288 name(p);
287 if !p.eat(SEMI) { 289 if p.at(L_CURLY) {
288 if p.expect(L_CURLY) { 290 mod_item_list(p);
289 mod_contents(p, true); 291 } else if !p.eat(SEMI) {
290 p.expect(R_CURLY); 292 p.error("expected `;` or `{`");
291 }
292 } 293 }
293} 294}
294 295
296fn mod_item_list(p: &mut Parser) {
297 assert!(p.at(L_CURLY));
298 let m = p.start();
299 p.bump();
300 mod_contents(p, true);
301 p.expect(R_CURLY);
302 m.complete(p, ITEM_LIST);
303}
304
295fn macro_call(p: &mut Parser) -> BlockLike { 305fn macro_call(p: &mut Parser) -> BlockLike {
296 assert!(paths::is_path_start(p)); 306 assert!(paths::is_path_start(p));
297 paths::use_path(p); 307 paths::use_path(p);
diff --git a/crates/libsyntax2/src/grammar/items/structs.rs b/crates/libsyntax2/src/grammar/items/structs.rs
index cde9d0ae6..ca027d718 100644
--- a/crates/libsyntax2/src/grammar/items/structs.rs
+++ b/crates/libsyntax2/src/grammar/items/structs.rs
@@ -14,7 +14,7 @@ pub(super) fn struct_def(p: &mut Parser) {
14 p.bump(); 14 p.bump();
15 return; 15 return;
16 } 16 }
17 L_CURLY => named_fields(p), 17 L_CURLY => named_field_def_list(p),
18 _ => { 18 _ => {
19 //TODO: special case `(` error message 19 //TODO: special case `(` error message
20 p.error("expected `;` or `{`"); 20 p.error("expected `;` or `{`");
@@ -26,9 +26,9 @@ pub(super) fn struct_def(p: &mut Parser) {
26 p.bump(); 26 p.bump();
27 return; 27 return;
28 } 28 }
29 L_CURLY => named_fields(p), 29 L_CURLY => named_field_def_list(p),
30 L_PAREN => { 30 L_PAREN => {
31 pos_fields(p); 31 pos_field_list(p);
32 p.expect(SEMI); 32 p.expect(SEMI);
33 } 33 }
34 _ => { 34 _ => {
@@ -44,46 +44,58 @@ pub(super) fn enum_def(p: &mut Parser) {
44 name(p); 44 name(p);
45 type_params::opt_type_param_list(p); 45 type_params::opt_type_param_list(p);
46 type_params::opt_where_clause(p); 46 type_params::opt_where_clause(p);
47 if p.expect(L_CURLY) { 47 if p.at(L_CURLY) {
48 while !p.at(EOF) && !p.at(R_CURLY) { 48 enum_variant_list(p);
49 let var = p.start(); 49 } else {
50 attributes::outer_attributes(p); 50 p.error("expected `{`")
51 if p.at(IDENT) { 51 }
52 name(p); 52}
53 match p.current() { 53
54 L_CURLY => named_fields(p), 54fn enum_variant_list(p: &mut Parser) {
55 L_PAREN => pos_fields(p), 55 assert!(p.at(L_CURLY));
56 EQ => { 56 let m = p.start();
57 p.bump(); 57 p.bump();
58 expressions::expr(p); 58 while !p.at(EOF) && !p.at(R_CURLY) {
59 } 59 let var = p.start();
60 _ => (), 60 attributes::outer_attributes(p);
61 if p.at(IDENT) {
62 name(p);
63 match p.current() {
64 L_CURLY => named_field_def_list(p),
65 L_PAREN => pos_field_list(p),
66 EQ => {
67 p.bump();
68 expressions::expr(p);
61 } 69 }
62 var.complete(p, ENUM_VARIANT); 70 _ => (),
63 } else {
64 var.abandon(p);
65 p.err_and_bump("expected enum variant");
66 }
67 if !p.at(R_CURLY) {
68 p.expect(COMMA);
69 } 71 }
72 var.complete(p, ENUM_VARIANT);
73 } else {
74 var.abandon(p);
75 p.err_and_bump("expected enum variant");
76 }
77 if !p.at(R_CURLY) {
78 p.expect(COMMA);
70 } 79 }
71 p.expect(R_CURLY);
72 } 80 }
81 p.expect(R_CURLY);
82 m.complete(p, ENUM_VARIANT_LIST);
73} 83}
74 84
75fn named_fields(p: &mut Parser) { 85fn named_field_def_list(p: &mut Parser) {
76 assert!(p.at(L_CURLY)); 86 assert!(p.at(L_CURLY));
87 let m = p.start();
77 p.bump(); 88 p.bump();
78 while !p.at(R_CURLY) && !p.at(EOF) { 89 while !p.at(R_CURLY) && !p.at(EOF) {
79 named_field(p); 90 named_field_def(p);
80 if !p.at(R_CURLY) { 91 if !p.at(R_CURLY) {
81 p.expect(COMMA); 92 p.expect(COMMA);
82 } 93 }
83 } 94 }
84 p.expect(R_CURLY); 95 p.expect(R_CURLY);
96 m.complete(p, NAMED_FIELD_DEF_LIST);
85 97
86 fn named_field(p: &mut Parser) { 98 fn named_field_def(p: &mut Parser) {
87 let m = p.start(); 99 let m = p.start();
88 // test field_attrs 100 // test field_attrs
89 // struct S { 101 // struct S {
@@ -96,7 +108,7 @@ fn named_fields(p: &mut Parser) {
96 name(p); 108 name(p);
97 p.expect(COLON); 109 p.expect(COLON);
98 types::type_(p); 110 types::type_(p);
99 m.complete(p, NAMED_FIELD); 111 m.complete(p, NAMED_FIELD_DEF);
100 } else { 112 } else {
101 m.abandon(p); 113 m.abandon(p);
102 p.err_and_bump("expected field declaration"); 114 p.err_and_bump("expected field declaration");
@@ -104,7 +116,9 @@ fn named_fields(p: &mut Parser) {
104 } 116 }
105} 117}
106 118
107fn pos_fields(p: &mut Parser) { 119fn pos_field_list(p: &mut Parser) {
120 assert!(p.at(L_PAREN));
121 let m = p.start();
108 if !p.expect(L_PAREN) { 122 if !p.expect(L_PAREN) {
109 return; 123 return;
110 } 124 }
@@ -119,4 +133,5 @@ fn pos_fields(p: &mut Parser) {
119 } 133 }
120 } 134 }
121 p.expect(R_PAREN); 135 p.expect(R_PAREN);
136 m.complete(p, POS_FIELD_LIST);
122} 137}
diff --git a/crates/libsyntax2/src/grammar/items/traits.rs b/crates/libsyntax2/src/grammar/items/traits.rs
index 73ecd4bef..3853ccaab 100644
--- a/crates/libsyntax2/src/grammar/items/traits.rs
+++ b/crates/libsyntax2/src/grammar/items/traits.rs
@@ -11,18 +11,29 @@ pub(super) fn trait_def(p: &mut Parser) {
11 type_params::bounds(p); 11 type_params::bounds(p);
12 } 12 }
13 type_params::opt_where_clause(p); 13 type_params::opt_where_clause(p);
14 p.expect(L_CURLY); 14 if p.at(L_CURLY) {
15 // test trait_item_items 15 trait_item_list(p);
16 // impl F { 16 } else {
17 // type A: Clone; 17 p.error("expected `{`");
18 // const B: i32; 18 }
19 // fn foo() {} 19}
20 // fn bar(&self); 20
21 // } 21// test trait_item_list
22// impl F {
23// type A: Clone;
24// const B: i32;
25// fn foo() {}
26// fn bar(&self);
27// }
28fn trait_item_list(p: &mut Parser) {
29 assert!(p.at(L_CURLY));
30 let m = p.start();
31 p.bump();
22 while !p.at(EOF) && !p.at(R_CURLY) { 32 while !p.at(EOF) && !p.at(R_CURLY) {
23 item_or_macro(p, true, ItemFlavor::Trait); 33 item_or_macro(p, true, ItemFlavor::Trait);
24 } 34 }
25 p.expect(R_CURLY); 35 p.expect(R_CURLY);
36 m.complete(p, ITEM_LIST);
26} 37}
27 38
28// test impl_item 39// test impl_item
@@ -45,19 +56,30 @@ pub(super) fn impl_item(p: &mut Parser) {
45 types::type_(p); 56 types::type_(p);
46 } 57 }
47 type_params::opt_where_clause(p); 58 type_params::opt_where_clause(p);
48 p.expect(L_CURLY); 59 if p.at(L_CURLY) {
60 impl_item_list(p);
61 } else {
62 p.error("expected `{`");
63 }
64}
65
66// test impl_item_list
67// impl F {
68// type A = i32;
69// const B: i32 = 92;
70// fn foo() {}
71// fn bar(&self) {}
72// }
73fn impl_item_list(p: &mut Parser) {
74 assert!(p.at(L_CURLY));
75 let m = p.start();
76 p.bump();
49 77
50 // test impl_item_items
51 // impl F {
52 // type A = i32;
53 // const B: i32 = 92;
54 // fn foo() {}
55 // fn bar(&self) {}
56 // }
57 while !p.at(EOF) && !p.at(R_CURLY) { 78 while !p.at(EOF) && !p.at(R_CURLY) {
58 item_or_macro(p, true, ItemFlavor::Mod); 79 item_or_macro(p, true, ItemFlavor::Mod);
59 } 80 }
60 p.expect(R_CURLY); 81 p.expect(R_CURLY);
82 m.complete(p, ITEM_LIST);
61} 83}
62 84
63fn choose_type_params_over_qpath(p: &Parser) -> bool { 85fn choose_type_params_over_qpath(p: &Parser) -> bool {
diff --git a/crates/libsyntax2/src/grammar/items/use_item.rs b/crates/libsyntax2/src/grammar/items/use_item.rs
index 3da40a629..2fbf2234a 100644
--- a/crates/libsyntax2/src/grammar/items/use_item.rs
+++ b/crates/libsyntax2/src/grammar/items/use_item.rs
@@ -20,7 +20,7 @@ fn use_tree(p: &mut Parser) {
20 if p.at(COLONCOLON) { 20 if p.at(COLONCOLON) {
21 p.bump(); 21 p.bump();
22 } 22 }
23 nested_trees(p); 23 use_tree_list(p);
24 } 24 }
25 _ if paths::is_path_start(p) => { 25 _ if paths::is_path_start(p) => {
26 paths::use_path(p); 26 paths::use_path(p);
@@ -34,7 +34,7 @@ fn use_tree(p: &mut Parser) {
34 STAR => { 34 STAR => {
35 p.bump(); 35 p.bump();
36 } 36 }
37 L_CURLY => nested_trees(p), 37 L_CURLY => use_tree_list(p),
38 _ => { 38 _ => {
39 // is this unreachable? 39 // is this unreachable?
40 p.error("expected `{` or `*`"); 40 p.error("expected `{` or `*`");
@@ -53,8 +53,9 @@ fn use_tree(p: &mut Parser) {
53 m.complete(p, USE_TREE); 53 m.complete(p, USE_TREE);
54} 54}
55 55
56fn nested_trees(p: &mut Parser) { 56fn use_tree_list(p: &mut Parser) {
57 assert!(p.at(L_CURLY)); 57 assert!(p.at(L_CURLY));
58 let m = p.start();
58 p.bump(); 59 p.bump();
59 while !p.at(EOF) && !p.at(R_CURLY) { 60 while !p.at(EOF) && !p.at(R_CURLY) {
60 use_tree(p); 61 use_tree(p);
@@ -63,4 +64,5 @@ fn nested_trees(p: &mut Parser) {
63 } 64 }
64 } 65 }
65 p.expect(R_CURLY); 66 p.expect(R_CURLY);
67 m.complete(p, USE_TREE_LIST);
66} 68}
diff --git a/crates/libsyntax2/src/grammar/mod.rs b/crates/libsyntax2/src/grammar/mod.rs
index 25887921b..0f118f12d 100644
--- a/crates/libsyntax2/src/grammar/mod.rs
+++ b/crates/libsyntax2/src/grammar/mod.rs
@@ -144,18 +144,21 @@ fn name_ref(p: &mut Parser) {
144} 144}
145 145
146fn error_block(p: &mut Parser, message: &str) { 146fn error_block(p: &mut Parser, message: &str) {
147 assert!(p.at(L_CURLY)); 147 go(p, Some(message));
148 let err = p.start(); 148 fn go(p: &mut Parser, message: Option<&str>) {
149 p.error(message); 149 assert!(p.at(L_CURLY));
150 p.bump(); 150 let m = p.start();
151 let mut level: u32 = 1; 151 if let Some(message) = message {
152 while level > 0 && !p.at(EOF) { 152 p.error(message);
153 match p.current() {
154 L_CURLY => level += 1,
155 R_CURLY => level -= 1,
156 _ => (),
157 } 153 }
158 p.bump(); 154 p.bump();
155 while !p.at(EOF) && !p.at(R_CURLY) {
156 match p.current() {
157 L_CURLY => go(p, None),
158 _ => p.bump(),
159 }
160 }
161 p.eat(R_CURLY);
162 m.complete(p, ERROR);
159 } 163 }
160 err.complete(p, ERROR);
161} 164}
diff --git a/crates/libsyntax2/src/grammar/patterns.rs b/crates/libsyntax2/src/grammar/patterns.rs
index 71a1d5445..7ddbfa318 100644
--- a/crates/libsyntax2/src/grammar/patterns.rs
+++ b/crates/libsyntax2/src/grammar/patterns.rs
@@ -69,7 +69,7 @@ fn path_pat(p: &mut Parser) -> CompletedMarker {
69 TUPLE_STRUCT_PAT 69 TUPLE_STRUCT_PAT
70 } 70 }
71 L_CURLY => { 71 L_CURLY => {
72 struct_pat_fields(p); 72 field_pat_list(p);
73 STRUCT_PAT 73 STRUCT_PAT
74 } 74 }
75 _ => PATH_PAT 75 _ => PATH_PAT
@@ -99,15 +99,16 @@ fn tuple_pat_fields(p: &mut Parser) {
99 p.expect(R_PAREN); 99 p.expect(R_PAREN);
100} 100}
101 101
102// test struct_pat_fields 102// test field_pat_list
103// fn foo() { 103// fn foo() {
104// let S {} = (); 104// let S {} = ();
105// let S { f, ref mut g } = (); 105// let S { f, ref mut g } = ();
106// let S { h: _, ..} = (); 106// let S { h: _, ..} = ();
107// let S { h: _, } = (); 107// let S { h: _, } = ();
108// } 108// }
109fn struct_pat_fields(p: &mut Parser) { 109fn field_pat_list(p: &mut Parser) {
110 assert!(p.at(L_CURLY)); 110 assert!(p.at(L_CURLY));
111 let m = p.start();
111 p.bump(); 112 p.bump();
112 while !p.at(EOF) && !p.at(R_CURLY) { 113 while !p.at(EOF) && !p.at(R_CURLY) {
113 match p.current() { 114 match p.current() {
@@ -126,6 +127,7 @@ fn struct_pat_fields(p: &mut Parser) {
126 } 127 }
127 } 128 }
128 p.expect(R_CURLY); 129 p.expect(R_CURLY);
130 m.complete(p, FIELD_PAT_LIST);
129} 131}
130 132
131// test placeholder_pat 133// test placeholder_pat
diff --git a/crates/libsyntax2/src/lib.rs b/crates/libsyntax2/src/lib.rs
index 53ae18988..d3ecbe470 100644
--- a/crates/libsyntax2/src/lib.rs
+++ b/crates/libsyntax2/src/lib.rs
@@ -53,5 +53,31 @@ pub use {
53 53
54pub fn parse(text: &str) -> SyntaxNode { 54pub fn parse(text: &str) -> SyntaxNode {
55 let tokens = tokenize(&text); 55 let tokens = tokenize(&text);
56 parser_impl::parse::<yellow::GreenBuilder>(text, &tokens) 56 let res = parser_impl::parse::<yellow::GreenBuilder>(text, &tokens);
57 validate_block_structure(res.borrowed());
58 res
59}
60
61fn validate_block_structure(root: SyntaxNodeRef) {
62 let mut stack = Vec::new();
63 for node in algo::walk::preorder(root) {
64 match node.kind() {
65 SyntaxKind::L_CURLY => {
66 stack.push(node)
67 }
68 SyntaxKind::R_CURLY => {
69 if let Some(pair) = stack.pop() {
70 assert_eq!(node.parent(), pair.parent());
71 assert!(
72 node.next_sibling().is_none() && pair.prev_sibling().is_none(),
73 "floating curlys at {:?}\nfile:\n{}\nerror:\n{}\n",
74 node,
75 root.text(),
76 node.text(),
77 );
78 }
79 }
80 _ => (),
81 }
82 }
57} 83}
diff --git a/crates/libsyntax2/src/syntax_kinds/generated.rs b/crates/libsyntax2/src/syntax_kinds/generated.rs
index 61d527f93..6c7f44aee 100644
--- a/crates/libsyntax2/src/syntax_kinds/generated.rs
+++ b/crates/libsyntax2/src/syntax_kinds/generated.rs
@@ -147,6 +147,7 @@ pub enum SyntaxKind {
147 PLACEHOLDER_PAT, 147 PLACEHOLDER_PAT,
148 PATH_PAT, 148 PATH_PAT,
149 STRUCT_PAT, 149 STRUCT_PAT,
150 FIELD_PAT_LIST,
150 TUPLE_STRUCT_PAT, 151 TUPLE_STRUCT_PAT,
151 TUPLE_PAT, 152 TUPLE_PAT,
152 SLICE_PAT, 153 SLICE_PAT,
@@ -166,10 +167,12 @@ pub enum SyntaxKind {
166 BLOCK_EXPR, 167 BLOCK_EXPR,
167 RETURN_EXPR, 168 RETURN_EXPR,
168 MATCH_EXPR, 169 MATCH_EXPR,
170 MATCH_ARM_LIST,
169 MATCH_ARM, 171 MATCH_ARM,
170 MATCH_GUARD, 172 MATCH_GUARD,
171 STRUCT_LIT, 173 STRUCT_LIT,
172 STRUCT_LIT_FIELD, 174 NAMED_FIELD_LIST,
175 NAMED_FIELD,
173 CALL_EXPR, 176 CALL_EXPR,
174 INDEX_EXPR, 177 INDEX_EXPR,
175 METHOD_CALL_EXPR, 178 METHOD_CALL_EXPR,
@@ -180,13 +183,20 @@ pub enum SyntaxKind {
180 PREFIX_EXPR, 183 PREFIX_EXPR,
181 RANGE_EXPR, 184 RANGE_EXPR,
182 BIN_EXPR, 185 BIN_EXPR,
183 EXTERN_BLOCK_EXPR, 186 BLOCK,
187 EXTERN_BLOCK,
188 EXTERN_ITEM_LIST,
184 ENUM_VARIANT, 189 ENUM_VARIANT,
185 NAMED_FIELD, 190 NAMED_FIELD_DEF_LIST,
191 NAMED_FIELD_DEF,
192 POS_FIELD_LIST,
186 POS_FIELD, 193 POS_FIELD,
194 ENUM_VARIANT_LIST,
195 ITEM_LIST,
187 ATTR, 196 ATTR,
188 META_ITEM, 197 META_ITEM,
189 USE_TREE, 198 USE_TREE,
199 USE_TREE_LIST,
190 PATH, 200 PATH,
191 PATH_SEGMENT, 201 PATH_SEGMENT,
192 LITERAL, 202 LITERAL,
@@ -397,6 +407,7 @@ impl SyntaxKind {
397 PLACEHOLDER_PAT => &SyntaxInfo { name: "PLACEHOLDER_PAT" }, 407 PLACEHOLDER_PAT => &SyntaxInfo { name: "PLACEHOLDER_PAT" },
398 PATH_PAT => &SyntaxInfo { name: "PATH_PAT" }, 408 PATH_PAT => &SyntaxInfo { name: "PATH_PAT" },
399 STRUCT_PAT => &SyntaxInfo { name: "STRUCT_PAT" }, 409 STRUCT_PAT => &SyntaxInfo { name: "STRUCT_PAT" },
410 FIELD_PAT_LIST => &SyntaxInfo { name: "FIELD_PAT_LIST" },
400 TUPLE_STRUCT_PAT => &SyntaxInfo { name: "TUPLE_STRUCT_PAT" }, 411 TUPLE_STRUCT_PAT => &SyntaxInfo { name: "TUPLE_STRUCT_PAT" },
401 TUPLE_PAT => &SyntaxInfo { name: "TUPLE_PAT" }, 412 TUPLE_PAT => &SyntaxInfo { name: "TUPLE_PAT" },
402 SLICE_PAT => &SyntaxInfo { name: "SLICE_PAT" }, 413 SLICE_PAT => &SyntaxInfo { name: "SLICE_PAT" },
@@ -416,10 +427,12 @@ impl SyntaxKind {
416 BLOCK_EXPR => &SyntaxInfo { name: "BLOCK_EXPR" }, 427 BLOCK_EXPR => &SyntaxInfo { name: "BLOCK_EXPR" },
417 RETURN_EXPR => &SyntaxInfo { name: "RETURN_EXPR" }, 428 RETURN_EXPR => &SyntaxInfo { name: "RETURN_EXPR" },
418 MATCH_EXPR => &SyntaxInfo { name: "MATCH_EXPR" }, 429 MATCH_EXPR => &SyntaxInfo { name: "MATCH_EXPR" },
430 MATCH_ARM_LIST => &SyntaxInfo { name: "MATCH_ARM_LIST" },
419 MATCH_ARM => &SyntaxInfo { name: "MATCH_ARM" }, 431 MATCH_ARM => &SyntaxInfo { name: "MATCH_ARM" },
420 MATCH_GUARD => &SyntaxInfo { name: "MATCH_GUARD" }, 432 MATCH_GUARD => &SyntaxInfo { name: "MATCH_GUARD" },
421 STRUCT_LIT => &SyntaxInfo { name: "STRUCT_LIT" }, 433 STRUCT_LIT => &SyntaxInfo { name: "STRUCT_LIT" },
422 STRUCT_LIT_FIELD => &SyntaxInfo { name: "STRUCT_LIT_FIELD" }, 434 NAMED_FIELD_LIST => &SyntaxInfo { name: "NAMED_FIELD_LIST" },
435 NAMED_FIELD => &SyntaxInfo { name: "NAMED_FIELD" },
423 CALL_EXPR => &SyntaxInfo { name: "CALL_EXPR" }, 436 CALL_EXPR => &SyntaxInfo { name: "CALL_EXPR" },
424 INDEX_EXPR => &SyntaxInfo { name: "INDEX_EXPR" }, 437 INDEX_EXPR => &SyntaxInfo { name: "INDEX_EXPR" },
425 METHOD_CALL_EXPR => &SyntaxInfo { name: "METHOD_CALL_EXPR" }, 438 METHOD_CALL_EXPR => &SyntaxInfo { name: "METHOD_CALL_EXPR" },
@@ -430,13 +443,20 @@ impl SyntaxKind {
430 PREFIX_EXPR => &SyntaxInfo { name: "PREFIX_EXPR" }, 443 PREFIX_EXPR => &SyntaxInfo { name: "PREFIX_EXPR" },
431 RANGE_EXPR => &SyntaxInfo { name: "RANGE_EXPR" }, 444 RANGE_EXPR => &SyntaxInfo { name: "RANGE_EXPR" },
432 BIN_EXPR => &SyntaxInfo { name: "BIN_EXPR" }, 445 BIN_EXPR => &SyntaxInfo { name: "BIN_EXPR" },
433 EXTERN_BLOCK_EXPR => &SyntaxInfo { name: "EXTERN_BLOCK_EXPR" }, 446 BLOCK => &SyntaxInfo { name: "BLOCK" },
447 EXTERN_BLOCK => &SyntaxInfo { name: "EXTERN_BLOCK" },
448 EXTERN_ITEM_LIST => &SyntaxInfo { name: "EXTERN_ITEM_LIST" },
434 ENUM_VARIANT => &SyntaxInfo { name: "ENUM_VARIANT" }, 449 ENUM_VARIANT => &SyntaxInfo { name: "ENUM_VARIANT" },
435 NAMED_FIELD => &SyntaxInfo { name: "NAMED_FIELD" }, 450 NAMED_FIELD_DEF_LIST => &SyntaxInfo { name: "NAMED_FIELD_DEF_LIST" },
451 NAMED_FIELD_DEF => &SyntaxInfo { name: "NAMED_FIELD_DEF" },
452 POS_FIELD_LIST => &SyntaxInfo { name: "POS_FIELD_LIST" },
436 POS_FIELD => &SyntaxInfo { name: "POS_FIELD" }, 453 POS_FIELD => &SyntaxInfo { name: "POS_FIELD" },
454 ENUM_VARIANT_LIST => &SyntaxInfo { name: "ENUM_VARIANT_LIST" },
455 ITEM_LIST => &SyntaxInfo { name: "ITEM_LIST" },
437 ATTR => &SyntaxInfo { name: "ATTR" }, 456 ATTR => &SyntaxInfo { name: "ATTR" },
438 META_ITEM => &SyntaxInfo { name: "META_ITEM" }, 457 META_ITEM => &SyntaxInfo { name: "META_ITEM" },
439 USE_TREE => &SyntaxInfo { name: "USE_TREE" }, 458 USE_TREE => &SyntaxInfo { name: "USE_TREE" },
459 USE_TREE_LIST => &SyntaxInfo { name: "USE_TREE_LIST" },
440 PATH => &SyntaxInfo { name: "PATH" }, 460 PATH => &SyntaxInfo { name: "PATH" },
441 PATH_SEGMENT => &SyntaxInfo { name: "PATH_SEGMENT" }, 461 PATH_SEGMENT => &SyntaxInfo { name: "PATH_SEGMENT" },
442 LITERAL => &SyntaxInfo { name: "LITERAL" }, 462 LITERAL => &SyntaxInfo { name: "LITERAL" },
diff --git a/crates/libsyntax2/tests/data/parser/err/0000_struct_field_missing_comma.txt b/crates/libsyntax2/tests/data/parser/err/0000_struct_field_missing_comma.txt
index cd9cf54c6..8ab435821 100644
--- a/crates/libsyntax2/tests/data/parser/err/0000_struct_field_missing_comma.txt
+++ b/crates/libsyntax2/tests/data/parser/err/0000_struct_field_missing_comma.txt
@@ -5,29 +5,30 @@ FILE@[0; 34)
5 NAME@[7; 8) 5 NAME@[7; 8)
6 IDENT@[7; 8) "S" 6 IDENT@[7; 8) "S"
7 WHITESPACE@[8; 9) 7 WHITESPACE@[8; 9)
8 L_CURLY@[9; 10) 8 NAMED_FIELD_DEF_LIST@[9; 34)
9 WHITESPACE@[10; 15) 9 L_CURLY@[9; 10)
10 NAMED_FIELD@[15; 21) 10 WHITESPACE@[10; 15)
11 NAME@[15; 16) 11 NAMED_FIELD_DEF@[15; 21)
12 IDENT@[15; 16) "a" 12 NAME@[15; 16)
13 COLON@[16; 17) 13 IDENT@[15; 16) "a"
14 WHITESPACE@[17; 18) 14 COLON@[16; 17)
15 PATH_TYPE@[18; 21) 15 WHITESPACE@[17; 18)
16 PATH@[18; 21) 16 PATH_TYPE@[18; 21)
17 PATH_SEGMENT@[18; 21) 17 PATH@[18; 21)
18 NAME_REF@[18; 21) 18 PATH_SEGMENT@[18; 21)
19 IDENT@[18; 21) "u32" 19 NAME_REF@[18; 21)
20 err: `expected COMMA` 20 IDENT@[18; 21) "u32"
21 WHITESPACE@[21; 26) 21 err: `expected COMMA`
22 NAMED_FIELD@[26; 32) 22 WHITESPACE@[21; 26)
23 NAME@[26; 27) 23 NAMED_FIELD_DEF@[26; 32)
24 IDENT@[26; 27) "b" 24 NAME@[26; 27)
25 COLON@[27; 28) 25 IDENT@[26; 27) "b"
26 WHITESPACE@[28; 29) 26 COLON@[27; 28)
27 PATH_TYPE@[29; 32) 27 WHITESPACE@[28; 29)
28 PATH@[29; 32) 28 PATH_TYPE@[29; 32)
29 PATH_SEGMENT@[29; 32) 29 PATH@[29; 32)
30 NAME_REF@[29; 32) 30 PATH_SEGMENT@[29; 32)
31 IDENT@[29; 32) "u32" 31 NAME_REF@[29; 32)
32 WHITESPACE@[32; 33) 32 IDENT@[29; 32) "u32"
33 R_CURLY@[33; 34) 33 WHITESPACE@[32; 33)
34 R_CURLY@[33; 34)
diff --git a/crates/libsyntax2/tests/data/parser/err/0001_item_recovery_in_file.txt b/crates/libsyntax2/tests/data/parser/err/0001_item_recovery_in_file.txt
index e974b6e8c..9c0394e25 100644
--- a/crates/libsyntax2/tests/data/parser/err/0001_item_recovery_in_file.txt
+++ b/crates/libsyntax2/tests/data/parser/err/0001_item_recovery_in_file.txt
@@ -13,5 +13,6 @@ FILE@[0; 21)
13 NAME@[17; 18) 13 NAME@[17; 18)
14 IDENT@[17; 18) "S" 14 IDENT@[17; 18) "S"
15 WHITESPACE@[18; 19) 15 WHITESPACE@[18; 19)
16 L_CURLY@[19; 20) 16 NAMED_FIELD_DEF_LIST@[19; 21)
17 R_CURLY@[20; 21) 17 L_CURLY@[19; 20)
18 R_CURLY@[20; 21)
diff --git a/crates/libsyntax2/tests/data/parser/err/0003_C++_semicolon.txt b/crates/libsyntax2/tests/data/parser/err/0003_C++_semicolon.txt
index 01d12a646..13558d07e 100644
--- a/crates/libsyntax2/tests/data/parser/err/0003_C++_semicolon.txt
+++ b/crates/libsyntax2/tests/data/parser/err/0003_C++_semicolon.txt
@@ -5,34 +5,35 @@ FILE@[0; 40)
5 NAME@[7; 8) 5 NAME@[7; 8)
6 IDENT@[7; 8) "S" 6 IDENT@[7; 8) "S"
7 WHITESPACE@[8; 9) 7 WHITESPACE@[8; 9)
8 L_CURLY@[9; 10) 8 NAMED_FIELD_DEF_LIST@[9; 39)
9 WHITESPACE@[10; 15) 9 L_CURLY@[9; 10)
10 NAMED_FIELD@[15; 21) 10 WHITESPACE@[10; 15)
11 NAME@[15; 16) 11 NAMED_FIELD_DEF@[15; 21)
12 IDENT@[15; 16) "a" 12 NAME@[15; 16)
13 COLON@[16; 17) 13 IDENT@[15; 16) "a"
14 WHITESPACE@[17; 18) 14 COLON@[16; 17)
15 PATH_TYPE@[18; 21) 15 WHITESPACE@[17; 18)
16 PATH@[18; 21) 16 PATH_TYPE@[18; 21)
17 PATH_SEGMENT@[18; 21) 17 PATH@[18; 21)
18 NAME_REF@[18; 21) 18 PATH_SEGMENT@[18; 21)
19 IDENT@[18; 21) "i32" 19 NAME_REF@[18; 21)
20 COMMA@[21; 22) 20 IDENT@[18; 21) "i32"
21 WHITESPACE@[22; 27) 21 COMMA@[21; 22)
22 NAMED_FIELD@[27; 36) 22 WHITESPACE@[22; 27)
23 NAME@[27; 28) 23 NAMED_FIELD_DEF@[27; 36)
24 IDENT@[27; 28) "b" 24 NAME@[27; 28)
25 COLON@[28; 29) 25 IDENT@[27; 28) "b"
26 WHITESPACE@[29; 30) 26 COLON@[28; 29)
27 PATH_TYPE@[30; 36) 27 WHITESPACE@[29; 30)
28 PATH@[30; 36) 28 PATH_TYPE@[30; 36)
29 PATH_SEGMENT@[30; 36) 29 PATH@[30; 36)
30 NAME_REF@[30; 36) 30 PATH_SEGMENT@[30; 36)
31 IDENT@[30; 36) "String" 31 NAME_REF@[30; 36)
32 COMMA@[36; 37) 32 IDENT@[30; 36) "String"
33 WHITESPACE@[37; 38) 33 COMMA@[36; 37)
34 R_CURLY@[38; 39) 34 WHITESPACE@[37; 38)
35 err: `expected item, found `;` 35 R_CURLY@[38; 39)
36 err: `expected item, found `;`
36consider removing this semicolon` 37consider removing this semicolon`
37 ERROR@[39; 40) 38 ERROR@[39; 40)
38 SEMI@[39; 40) 39 SEMI@[39; 40)
diff --git a/crates/libsyntax2/tests/data/parser/err/0005_attribute_recover.txt b/crates/libsyntax2/tests/data/parser/err/0005_attribute_recover.txt
index 12451c892..8843e8372 100644
--- a/crates/libsyntax2/tests/data/parser/err/0005_attribute_recover.txt
+++ b/crates/libsyntax2/tests/data/parser/err/0005_attribute_recover.txt
@@ -25,7 +25,7 @@ FILE@[0; 54)
25 L_PAREN@[25; 26) 25 L_PAREN@[25; 26)
26 R_PAREN@[26; 27) 26 R_PAREN@[26; 27)
27 WHITESPACE@[27; 28) 27 WHITESPACE@[27; 28)
28 BLOCK_EXPR@[28; 31) 28 BLOCK@[28; 31)
29 L_CURLY@[28; 29) 29 L_CURLY@[28; 29)
30 WHITESPACE@[29; 30) 30 WHITESPACE@[29; 30)
31 R_CURLY@[30; 31) 31 R_CURLY@[30; 31)
diff --git a/crates/libsyntax2/tests/data/parser/err/0006_named_field_recovery.txt b/crates/libsyntax2/tests/data/parser/err/0006_named_field_recovery.txt
index 0b6fa65df..e6e33cdbd 100644
--- a/crates/libsyntax2/tests/data/parser/err/0006_named_field_recovery.txt
+++ b/crates/libsyntax2/tests/data/parser/err/0006_named_field_recovery.txt
@@ -5,69 +5,70 @@ FILE@[0; 74)
5 NAME@[7; 8) 5 NAME@[7; 8)
6 IDENT@[7; 8) "S" 6 IDENT@[7; 8) "S"
7 WHITESPACE@[8; 9) 7 WHITESPACE@[8; 9)
8 L_CURLY@[9; 10) 8 NAMED_FIELD_DEF_LIST@[9; 73)
9 WHITESPACE@[10; 15) 9 L_CURLY@[9; 10)
10 NAMED_FIELD@[15; 21) 10 WHITESPACE@[10; 15)
11 NAME@[15; 16) 11 NAMED_FIELD_DEF@[15; 21)
12 IDENT@[15; 16) "f" 12 NAME@[15; 16)
13 COLON@[16; 17) 13 IDENT@[15; 16) "f"
14 WHITESPACE@[17; 18) 14 COLON@[16; 17)
15 PATH_TYPE@[18; 21) 15 WHITESPACE@[17; 18)
16 PATH@[18; 21) 16 PATH_TYPE@[18; 21)
17 PATH_SEGMENT@[18; 21) 17 PATH@[18; 21)
18 NAME_REF@[18; 21) 18 PATH_SEGMENT@[18; 21)
19 IDENT@[18; 21) "u32" 19 NAME_REF@[18; 21)
20 COMMA@[21; 22) 20 IDENT@[18; 21) "u32"
21 WHITESPACE@[22; 27) 21 COMMA@[21; 22)
22 VISIBILITY@[27; 30) 22 WHITESPACE@[22; 27)
23 PUB_KW@[27; 30) 23 VISIBILITY@[27; 30)
24 WHITESPACE@[30; 31) 24 PUB_KW@[27; 30)
25 err: `expected field declaration` 25 WHITESPACE@[30; 31)
26 ERROR@[31; 33) 26 err: `expected field declaration`
27 INT_NUMBER@[31; 33) "92" 27 ERROR@[31; 33)
28 err: `expected COMMA` 28 INT_NUMBER@[31; 33) "92"
29 WHITESPACE@[33; 38) 29 err: `expected COMMA`
30 err: `expected field declaration` 30 WHITESPACE@[33; 38)
31 ERROR@[38; 39) 31 err: `expected field declaration`
32 PLUS@[38; 39) 32 ERROR@[38; 39)
33 err: `expected COMMA` 33 PLUS@[38; 39)
34 WHITESPACE@[39; 40) 34 err: `expected COMMA`
35 err: `expected field declaration` 35 WHITESPACE@[39; 40)
36 ERROR@[40; 41) 36 err: `expected field declaration`
37 MINUS@[40; 41) 37 ERROR@[40; 41)
38 err: `expected COMMA` 38 MINUS@[40; 41)
39 WHITESPACE@[41; 42) 39 err: `expected COMMA`
40 err: `expected field declaration` 40 WHITESPACE@[41; 42)
41 ERROR@[42; 43) 41 err: `expected field declaration`
42 STAR@[42; 43) 42 ERROR@[42; 43)
43 err: `expected COMMA` 43 STAR@[42; 43)
44 WHITESPACE@[43; 48) 44 err: `expected COMMA`
45 NAMED_FIELD@[48; 58) 45 WHITESPACE@[43; 48)
46 VISIBILITY@[48; 51) 46 NAMED_FIELD_DEF@[48; 58)
47 PUB_KW@[48; 51) 47 VISIBILITY@[48; 51)
48 WHITESPACE@[51; 52) 48 PUB_KW@[48; 51)
49 NAME@[52; 53) 49 WHITESPACE@[51; 52)
50 IDENT@[52; 53) "x" 50 NAME@[52; 53)
51 COLON@[53; 54) 51 IDENT@[52; 53) "x"
52 WHITESPACE@[54; 55) 52 COLON@[53; 54)
53 PATH_TYPE@[55; 58) 53 WHITESPACE@[54; 55)
54 PATH@[55; 58) 54 PATH_TYPE@[55; 58)
55 PATH_SEGMENT@[55; 58) 55 PATH@[55; 58)
56 NAME_REF@[55; 58) 56 PATH_SEGMENT@[55; 58)
57 IDENT@[55; 58) "u32" 57 NAME_REF@[55; 58)
58 COMMA@[58; 59) 58 IDENT@[55; 58) "u32"
59 WHITESPACE@[59; 64) 59 COMMA@[58; 59)
60 NAMED_FIELD@[64; 70) 60 WHITESPACE@[59; 64)
61 NAME@[64; 65) 61 NAMED_FIELD_DEF@[64; 70)
62 IDENT@[64; 65) "z" 62 NAME@[64; 65)
63 COLON@[65; 66) 63 IDENT@[64; 65) "z"
64 WHITESPACE@[66; 67) 64 COLON@[65; 66)
65 PATH_TYPE@[67; 70) 65 WHITESPACE@[66; 67)
66 PATH@[67; 70) 66 PATH_TYPE@[67; 70)
67 PATH_SEGMENT@[67; 70) 67 PATH@[67; 70)
68 NAME_REF@[67; 70) 68 PATH_SEGMENT@[67; 70)
69 IDENT@[67; 70) "f64" 69 NAME_REF@[67; 70)
70 COMMA@[70; 71) 70 IDENT@[67; 70) "f64"
71 WHITESPACE@[71; 72) 71 COMMA@[70; 71)
72 R_CURLY@[72; 73) 72 WHITESPACE@[71; 72)
73 R_CURLY@[72; 73)
73 WHITESPACE@[73; 74) 74 WHITESPACE@[73; 74)
diff --git a/crates/libsyntax2/tests/data/parser/err/0007_stray_curly_in_file.txt b/crates/libsyntax2/tests/data/parser/err/0007_stray_curly_in_file.txt
index cff8353d4..9642ed5bc 100644
--- a/crates/libsyntax2/tests/data/parser/err/0007_stray_curly_in_file.txt
+++ b/crates/libsyntax2/tests/data/parser/err/0007_stray_curly_in_file.txt
@@ -22,7 +22,7 @@ FILE@[0; 31)
22 PARAM_LIST@[23; 25) 22 PARAM_LIST@[23; 25)
23 L_PAREN@[23; 24) 23 L_PAREN@[23; 24)
24 R_PAREN@[24; 25) 24 R_PAREN@[24; 25)
25 BLOCK_EXPR@[25; 27) 25 BLOCK@[25; 27)
26 L_CURLY@[25; 26) 26 L_CURLY@[25; 26)
27 R_CURLY@[26; 27) 27 R_CURLY@[26; 27)
28 WHITESPACE@[27; 29) 28 WHITESPACE@[27; 29)
diff --git a/crates/libsyntax2/tests/data/parser/err/0008_item_block_recovery.txt b/crates/libsyntax2/tests/data/parser/err/0008_item_block_recovery.txt
index 68f2b8aa5..5a062acab 100644
--- a/crates/libsyntax2/tests/data/parser/err/0008_item_block_recovery.txt
+++ b/crates/libsyntax2/tests/data/parser/err/0008_item_block_recovery.txt
@@ -8,7 +8,7 @@ FILE@[0; 95)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 12) 11 BLOCK@[9; 12)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 11) 13 WHITESPACE@[10; 11)
14 R_CURLY@[11; 12) 14 R_CURLY@[11; 12)
@@ -32,23 +32,25 @@ FILE@[0; 95)
32 WHITESPACE@[28; 29) 32 WHITESPACE@[28; 29)
33 TRUE_KW@[29; 33) 33 TRUE_KW@[29; 33)
34 WHITESPACE@[33; 34) 34 WHITESPACE@[33; 34)
35 L_CURLY@[34; 35) 35 ERROR@[34; 51)
36 WHITESPACE@[35; 44) 36 L_CURLY@[34; 35)
37 INT_NUMBER@[44; 45) "1" 37 WHITESPACE@[35; 44)
38 WHITESPACE@[45; 50) 38 INT_NUMBER@[44; 45) "1"
39 R_CURLY@[50; 51) 39 WHITESPACE@[45; 50)
40 R_CURLY@[50; 51)
40 WHITESPACE@[51; 52) 41 WHITESPACE@[51; 52)
41 ELSE_KW@[52; 56) 42 ELSE_KW@[52; 56)
42 WHITESPACE@[56; 57) 43 WHITESPACE@[56; 57)
43 L_CURLY@[57; 58) 44 ERROR@[57; 78)
44 WHITESPACE@[58; 67) 45 L_CURLY@[57; 58)
45 INT_NUMBER@[67; 68) "2" 46 WHITESPACE@[58; 67)
46 WHITESPACE@[68; 69) 47 INT_NUMBER@[67; 68) "2"
47 PLUS@[69; 70) 48 WHITESPACE@[68; 69)
48 WHITESPACE@[70; 71) 49 PLUS@[69; 70)
49 INT_NUMBER@[71; 72) "3" 50 WHITESPACE@[70; 71)
50 WHITESPACE@[72; 77) 51 INT_NUMBER@[71; 72) "3"
51 R_CURLY@[77; 78) 52 WHITESPACE@[72; 77)
53 R_CURLY@[77; 78)
52 WHITESPACE@[78; 79) 54 WHITESPACE@[78; 79)
53 R_CURLY@[79; 80) 55 R_CURLY@[79; 80)
54 WHITESPACE@[80; 82) 56 WHITESPACE@[80; 82)
@@ -61,7 +63,7 @@ FILE@[0; 95)
61 L_PAREN@[88; 89) 63 L_PAREN@[88; 89)
62 R_PAREN@[89; 90) 64 R_PAREN@[89; 90)
63 WHITESPACE@[90; 91) 65 WHITESPACE@[90; 91)
64 BLOCK_EXPR@[91; 94) 66 BLOCK@[91; 94)
65 L_CURLY@[91; 92) 67 L_CURLY@[91; 92)
66 WHITESPACE@[92; 93) 68 WHITESPACE@[92; 93)
67 R_CURLY@[93; 94) 69 R_CURLY@[93; 94)
diff --git a/crates/libsyntax2/tests/data/parser/err/0010_unsafe_lambda_block.txt b/crates/libsyntax2/tests/data/parser/err/0010_unsafe_lambda_block.txt
index b18de3a9c..e453c3651 100644
--- a/crates/libsyntax2/tests/data/parser/err/0010_unsafe_lambda_block.txt
+++ b/crates/libsyntax2/tests/data/parser/err/0010_unsafe_lambda_block.txt
@@ -8,7 +8,7 @@ FILE@[0; 42)
8 L_PAREN@[7; 8) 8 L_PAREN@[7; 8)
9 R_PAREN@[8; 9) 9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10) 10 WHITESPACE@[9; 10)
11 BLOCK_EXPR@[10; 41) 11 BLOCK@[10; 41)
12 L_CURLY@[10; 11) 12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16) 13 WHITESPACE@[11; 16)
14 LAMBDA_EXPR@[16; 24) 14 LAMBDA_EXPR@[16; 24)
@@ -21,19 +21,20 @@ FILE@[0; 42)
21 TUPLE_TYPE@[22; 24) 21 TUPLE_TYPE@[22; 24)
22 L_PAREN@[22; 23) 22 L_PAREN@[22; 23)
23 R_PAREN@[23; 24) 23 R_PAREN@[23; 24)
24 err: `expected block` 24 err: `expected a block`
25 WHITESPACE@[24; 25) 25 WHITESPACE@[24; 25)
26 EXPR_STMT@[25; 39) 26 EXPR_STMT@[25; 39)
27 BLOCK_EXPR@[25; 38) 27 BLOCK_EXPR@[25; 38)
28 UNSAFE_KW@[25; 31) 28 UNSAFE_KW@[25; 31)
29 WHITESPACE@[31; 32) 29 WHITESPACE@[31; 32)
30 L_CURLY@[32; 33) 30 BLOCK@[32; 38)
31 WHITESPACE@[33; 34) 31 L_CURLY@[32; 33)
32 TUPLE_EXPR@[34; 36) 32 WHITESPACE@[33; 34)
33 L_PAREN@[34; 35) 33 TUPLE_EXPR@[34; 36)
34 R_PAREN@[35; 36) 34 L_PAREN@[34; 35)
35 WHITESPACE@[36; 37) 35 R_PAREN@[35; 36)
36 R_CURLY@[37; 38) 36 WHITESPACE@[36; 37)
37 R_CURLY@[37; 38)
37 SEMI@[38; 39) 38 SEMI@[38; 39)
38 WHITESPACE@[39; 40) 39 WHITESPACE@[39; 40)
39 R_CURLY@[40; 41) 40 R_CURLY@[40; 41)
diff --git a/crates/libsyntax2/tests/data/parser/err/0013_invalid_type.txt b/crates/libsyntax2/tests/data/parser/err/0013_invalid_type.txt
index 3ec4be9fa..7f48502da 100644
--- a/crates/libsyntax2/tests/data/parser/err/0013_invalid_type.txt
+++ b/crates/libsyntax2/tests/data/parser/err/0013_invalid_type.txt
@@ -7,76 +7,77 @@ FILE@[0; 86)
7 WHITESPACE@[10; 11) 7 WHITESPACE@[10; 11)
8 NAME@[11; 16) 8 NAME@[11; 16)
9 IDENT@[11; 16) "Cache" 9 IDENT@[11; 16) "Cache"
10 L_PAREN@[16; 17) 10 POS_FIELD_LIST@[16; 83)
11 WHITESPACE@[17; 22) 11 L_PAREN@[16; 17)
12 POS_FIELD@[22; 68) 12 WHITESPACE@[17; 22)
13 PATH_TYPE@[22; 68) 13 POS_FIELD@[22; 68)
14 PATH@[22; 68) 14 PATH_TYPE@[22; 68)
15 PATH_SEGMENT@[22; 68) 15 PATH@[22; 68)
16 NAME_REF@[22; 29) 16 PATH_SEGMENT@[22; 68)
17 IDENT@[22; 29) "RefCell" 17 NAME_REF@[22; 29)
18 TYPE_ARG_LIST@[29; 68) 18 IDENT@[22; 29) "RefCell"
19 L_ANGLE@[29; 30) 19 TYPE_ARG_LIST@[29; 68)
20 TYPE_ARG@[30; 68) 20 L_ANGLE@[29; 30)
21 PATH_TYPE@[30; 68) 21 TYPE_ARG@[30; 68)
22 PATH@[30; 68) 22 PATH_TYPE@[30; 68)
23 PATH_SEGMENT@[30; 68) 23 PATH@[30; 68)
24 NAME_REF@[30; 37) 24 PATH_SEGMENT@[30; 68)
25 IDENT@[30; 37) "HashMap" 25 NAME_REF@[30; 37)
26 TYPE_ARG_LIST@[37; 68) 26 IDENT@[30; 37) "HashMap"
27 L_ANGLE@[37; 38) 27 TYPE_ARG_LIST@[37; 68)
28 WHITESPACE@[38; 47) 28 L_ANGLE@[37; 38)
29 TYPE_ARG@[47; 53) 29 WHITESPACE@[38; 47)
30 PATH_TYPE@[47; 53) 30 TYPE_ARG@[47; 53)
31 PATH@[47; 53) 31 PATH_TYPE@[47; 53)
32 PATH_SEGMENT@[47; 53) 32 PATH@[47; 53)
33 NAME_REF@[47; 53) 33 PATH_SEGMENT@[47; 53)
34 IDENT@[47; 53) "TypeId" 34 NAME_REF@[47; 53)
35 COMMA@[53; 54) 35 IDENT@[47; 53) "TypeId"
36 WHITESPACE@[54; 63) 36 COMMA@[53; 54)
37 TYPE_ARG@[63; 68) 37 WHITESPACE@[54; 63)
38 PATH_TYPE@[63; 68) 38 TYPE_ARG@[63; 68)
39 PATH@[63; 68) 39 PATH_TYPE@[63; 68)
40 PATH_SEGMENT@[63; 68) 40 PATH@[63; 68)
41 NAME_REF@[63; 66) 41 PATH_SEGMENT@[63; 68)
42 IDENT@[63; 66) "Box" 42 NAME_REF@[63; 66)
43 TYPE_ARG_LIST@[66; 68) 43 IDENT@[63; 66) "Box"
44 L_ANGLE@[66; 67) 44 TYPE_ARG_LIST@[66; 68)
45 err: `expected type` 45 L_ANGLE@[66; 67)
46 TYPE_ARG@[67; 68) 46 err: `expected type`
47 ERROR@[67; 68) 47 TYPE_ARG@[67; 68)
48 AT@[67; 68) 48 ERROR@[67; 68)
49 err: `expected COMMA` 49 AT@[67; 68)
50 err: `expected R_ANGLE` 50 err: `expected COMMA`
51 err: `expected COMMA` 51 err: `expected R_ANGLE`
52 err: `expected R_ANGLE` 52 err: `expected COMMA`
53 err: `expected COMMA` 53 err: `expected R_ANGLE`
54 err: `expected R_ANGLE` 54 err: `expected COMMA`
55 err: `expected COMMA` 55 err: `expected R_ANGLE`
56 WHITESPACE@[68; 69) 56 err: `expected COMMA`
57 POS_FIELD@[69; 72) 57 WHITESPACE@[68; 69)
58 PATH_TYPE@[69; 72) 58 POS_FIELD@[69; 72)
59 PATH@[69; 72) 59 PATH_TYPE@[69; 72)
60 PATH_SEGMENT@[69; 72) 60 PATH@[69; 72)
61 NAME_REF@[69; 72) 61 PATH_SEGMENT@[69; 72)
62 IDENT@[69; 72) "Any" 62 NAME_REF@[69; 72)
63 err: `expected COMMA` 63 IDENT@[69; 72) "Any"
64 err: `expected type` 64 err: `expected COMMA`
65 POS_FIELD@[72; 73) 65 err: `expected type`
66 ERROR@[72; 73) 66 POS_FIELD@[72; 73)
67 R_ANGLE@[72; 73) 67 ERROR@[72; 73)
68 COMMA@[73; 74) 68 R_ANGLE@[72; 73)
69 WHITESPACE@[74; 79) 69 COMMA@[73; 74)
70 err: `expected type` 70 WHITESPACE@[74; 79)
71 POS_FIELD@[79; 80) 71 err: `expected type`
72 ERROR@[79; 80) 72 POS_FIELD@[79; 80)
73 R_ANGLE@[79; 80) 73 ERROR@[79; 80)
74 err: `expected COMMA` 74 R_ANGLE@[79; 80)
75 err: `expected type` 75 err: `expected COMMA`
76 POS_FIELD@[80; 81) 76 err: `expected type`
77 ERROR@[80; 81) 77 POS_FIELD@[80; 81)
78 R_ANGLE@[80; 81) 78 ERROR@[80; 81)
79 WHITESPACE@[81; 82) 79 R_ANGLE@[80; 81)
80 R_PAREN@[82; 83) 80 WHITESPACE@[81; 82)
81 R_PAREN@[82; 83)
81 SEMI@[83; 84) 82 SEMI@[83; 84)
82 WHITESPACE@[84; 86) 83 WHITESPACE@[84; 86)
diff --git a/crates/libsyntax2/tests/data/parser/err/0014_where_no_bounds.txt b/crates/libsyntax2/tests/data/parser/err/0014_where_no_bounds.txt
index 37b16a566..cef20327c 100644
--- a/crates/libsyntax2/tests/data/parser/err/0014_where_no_bounds.txt
+++ b/crates/libsyntax2/tests/data/parser/err/0014_where_no_bounds.txt
@@ -25,7 +25,7 @@ FILE@[0; 23)
25 IDENT@[18; 19) "T" 25 IDENT@[18; 19) "T"
26 err: `expected colon` 26 err: `expected colon`
27 WHITESPACE@[19; 20) 27 WHITESPACE@[19; 20)
28 BLOCK_EXPR@[20; 22) 28 BLOCK@[20; 22)
29 L_CURLY@[20; 21) 29 L_CURLY@[20; 21)
30 R_CURLY@[21; 22) 30 R_CURLY@[21; 22)
31 WHITESPACE@[22; 23) 31 WHITESPACE@[22; 23)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0001_const_unsafe_fn.txt b/crates/libsyntax2/tests/data/parser/inline/0001_const_unsafe_fn.txt
index 234c3c748..29c479f8b 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0001_const_unsafe_fn.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0001_const_unsafe_fn.txt
@@ -12,7 +12,7 @@ FILE@[0; 25)
12 L_PAREN@[19; 20) 12 L_PAREN@[19; 20)
13 R_PAREN@[20; 21) 13 R_PAREN@[20; 21)
14 WHITESPACE@[21; 22) 14 WHITESPACE@[21; 22)
15 BLOCK_EXPR@[22; 24) 15 BLOCK@[22; 24)
16 L_CURLY@[22; 23) 16 L_CURLY@[22; 23)
17 R_CURLY@[23; 24) 17 R_CURLY@[23; 24)
18 WHITESPACE@[24; 25) 18 WHITESPACE@[24; 25)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0002_const_fn.txt b/crates/libsyntax2/tests/data/parser/inline/0002_const_fn.txt
index c7d66b2e1..a2f94eb14 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0002_const_fn.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0002_const_fn.txt
@@ -10,7 +10,7 @@ FILE@[0; 18)
10 L_PAREN@[12; 13) 10 L_PAREN@[12; 13)
11 R_PAREN@[13; 14) 11 R_PAREN@[13; 14)
12 WHITESPACE@[14; 15) 12 WHITESPACE@[14; 15)
13 BLOCK_EXPR@[15; 17) 13 BLOCK@[15; 17)
14 L_CURLY@[15; 16) 14 L_CURLY@[15; 16)
15 R_CURLY@[16; 17) 15 R_CURLY@[16; 17)
16 WHITESPACE@[17; 18) 16 WHITESPACE@[17; 18)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0003_extern_block.txt b/crates/libsyntax2/tests/data/parser/inline/0003_extern_block.txt
index cbe9a1ebc..ab9bc0463 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0003_extern_block.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0003_extern_block.txt
@@ -1,8 +1,9 @@
1FILE@[0; 10) 1FILE@[0; 10)
2 EXTERN_BLOCK_EXPR@[0; 9) 2 EXTERN_BLOCK@[0; 9)
3 ABI@[0; 6) 3 ABI@[0; 6)
4 EXTERN_KW@[0; 6) 4 EXTERN_KW@[0; 6)
5 WHITESPACE@[6; 7) 5 WHITESPACE@[6; 7)
6 L_CURLY@[7; 8) 6 EXTERN_ITEM_LIST@[7; 9)
7 R_CURLY@[8; 9) 7 L_CURLY@[7; 8)
8 R_CURLY@[8; 9)
8 WHITESPACE@[9; 10) 9 WHITESPACE@[9; 10)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0004_extern_fn.txt b/crates/libsyntax2/tests/data/parser/inline/0004_extern_fn.txt
index 161af9c7d..9cf20991a 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0004_extern_fn.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0004_extern_fn.txt
@@ -11,7 +11,7 @@ FILE@[0; 19)
11 L_PAREN@[13; 14) 11 L_PAREN@[13; 14)
12 R_PAREN@[14; 15) 12 R_PAREN@[14; 15)
13 WHITESPACE@[15; 16) 13 WHITESPACE@[15; 16)
14 BLOCK_EXPR@[16; 18) 14 BLOCK@[16; 18)
15 L_CURLY@[16; 17) 15 L_CURLY@[16; 17)
16 R_CURLY@[17; 18) 16 R_CURLY@[17; 18)
17 WHITESPACE@[18; 19) 17 WHITESPACE@[18; 19)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0007_unsafe_trait.txt b/crates/libsyntax2/tests/data/parser/inline/0007_unsafe_trait.txt
index e75f18802..d7e20db70 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0007_unsafe_trait.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0007_unsafe_trait.txt
@@ -7,6 +7,7 @@ FILE@[0; 18)
7 NAME@[13; 14) 7 NAME@[13; 14)
8 IDENT@[13; 14) "T" 8 IDENT@[13; 14) "T"
9 WHITESPACE@[14; 15) 9 WHITESPACE@[14; 15)
10 L_CURLY@[15; 16) 10 ITEM_LIST@[15; 17)
11 R_CURLY@[16; 17) 11 L_CURLY@[15; 16)
12 R_CURLY@[16; 17)
12 WHITESPACE@[17; 18) 13 WHITESPACE@[17; 18)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0008_unsafe_impl.txt b/crates/libsyntax2/tests/data/parser/inline/0008_unsafe_impl.txt
index 6fd3f868f..20c0c2de4 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0008_unsafe_impl.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0008_unsafe_impl.txt
@@ -10,6 +10,7 @@ FILE@[0; 19)
10 NAME_REF@[12; 15) 10 NAME_REF@[12; 15)
11 IDENT@[12; 15) "Foo" 11 IDENT@[12; 15) "Foo"
12 WHITESPACE@[15; 16) 12 WHITESPACE@[15; 16)
13 L_CURLY@[16; 17) 13 ITEM_LIST@[16; 18)
14 R_CURLY@[17; 18) 14 L_CURLY@[16; 17)
15 R_CURLY@[17; 18)
15 WHITESPACE@[18; 19) 16 WHITESPACE@[18; 19)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0009_unsafe_auto_trait.txt b/crates/libsyntax2/tests/data/parser/inline/0009_unsafe_auto_trait.txt
index 78d0331d0..fe296aef6 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0009_unsafe_auto_trait.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0009_unsafe_auto_trait.txt
@@ -9,6 +9,7 @@ FILE@[0; 23)
9 NAME@[18; 19) 9 NAME@[18; 19)
10 IDENT@[18; 19) "T" 10 IDENT@[18; 19) "T"
11 WHITESPACE@[19; 20) 11 WHITESPACE@[19; 20)
12 L_CURLY@[20; 21) 12 ITEM_LIST@[20; 22)
13 R_CURLY@[21; 22) 13 L_CURLY@[20; 21)
14 R_CURLY@[21; 22)
14 WHITESPACE@[22; 23) 15 WHITESPACE@[22; 23)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0010_unsafe_default_impl.txt b/crates/libsyntax2/tests/data/parser/inline/0010_unsafe_default_impl.txt
index ab12d5fc0..11e0041f5 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0010_unsafe_default_impl.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0010_unsafe_default_impl.txt
@@ -12,6 +12,7 @@ FILE@[0; 27)
12 NAME_REF@[20; 23) 12 NAME_REF@[20; 23)
13 IDENT@[20; 23) "Foo" 13 IDENT@[20; 23) "Foo"
14 WHITESPACE@[23; 24) 14 WHITESPACE@[23; 24)
15 L_CURLY@[24; 25) 15 ITEM_LIST@[24; 26)
16 R_CURLY@[25; 26) 16 L_CURLY@[24; 25)
17 R_CURLY@[25; 26)
17 WHITESPACE@[26; 27) 18 WHITESPACE@[26; 27)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0011_unsafe_fn.txt b/crates/libsyntax2/tests/data/parser/inline/0011_unsafe_fn.txt
index 3f9672f54..54d444182 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0011_unsafe_fn.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0011_unsafe_fn.txt
@@ -10,7 +10,7 @@ FILE@[0; 19)
10 L_PAREN@[13; 14) 10 L_PAREN@[13; 14)
11 R_PAREN@[14; 15) 11 R_PAREN@[14; 15)
12 WHITESPACE@[15; 16) 12 WHITESPACE@[15; 16)
13 BLOCK_EXPR@[16; 18) 13 BLOCK@[16; 18)
14 L_CURLY@[16; 17) 14 L_CURLY@[16; 17)
15 R_CURLY@[17; 18) 15 R_CURLY@[17; 18)
16 WHITESPACE@[18; 19) 16 WHITESPACE@[18; 19)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0012_unsafe_extern_fn.txt b/crates/libsyntax2/tests/data/parser/inline/0012_unsafe_extern_fn.txt
index 27c807aea..e71a86d64 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0012_unsafe_extern_fn.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0012_unsafe_extern_fn.txt
@@ -15,7 +15,7 @@ FILE@[0; 30)
15 L_PAREN@[24; 25) 15 L_PAREN@[24; 25)
16 R_PAREN@[25; 26) 16 R_PAREN@[25; 26)
17 WHITESPACE@[26; 27) 17 WHITESPACE@[26; 27)
18 BLOCK_EXPR@[27; 29) 18 BLOCK@[27; 29)
19 L_CURLY@[27; 28) 19 L_CURLY@[27; 28)
20 R_CURLY@[28; 29) 20 R_CURLY@[28; 29)
21 WHITESPACE@[29; 30) 21 WHITESPACE@[29; 30)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0013_unsafe_block_in_mod.txt b/crates/libsyntax2/tests/data/parser/inline/0013_unsafe_block_in_mod.txt
index 4cd9b579c..3718caba5 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0013_unsafe_block_in_mod.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0013_unsafe_block_in_mod.txt
@@ -7,7 +7,7 @@ FILE@[0; 33)
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@[6; 8)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 BLOCK_EXPR@[8; 10) 10 BLOCK@[8; 10)
11 L_CURLY@[8; 9) 11 L_CURLY@[8; 9)
12 R_CURLY@[9; 10) 12 R_CURLY@[9; 10)
13 WHITESPACE@[10; 11) 13 WHITESPACE@[10; 11)
@@ -29,7 +29,7 @@ FILE@[0; 33)
29 PARAM_LIST@[28; 30) 29 PARAM_LIST@[28; 30)
30 L_PAREN@[28; 29) 30 L_PAREN@[28; 29)
31 R_PAREN@[29; 30) 31 R_PAREN@[29; 30)
32 BLOCK_EXPR@[30; 32) 32 BLOCK@[30; 32)
33 L_CURLY@[30; 31) 33 L_CURLY@[30; 31)
34 R_CURLY@[31; 32) 34 R_CURLY@[31; 32)
35 WHITESPACE@[32; 33) 35 WHITESPACE@[32; 33)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0034_bind_pat.txt b/crates/libsyntax2/tests/data/parser/inline/0034_bind_pat.txt
index 54396c247..d9fd29cca 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0034_bind_pat.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0034_bind_pat.txt
@@ -8,7 +8,7 @@ FILE@[0; 146)
8 L_PAREN@[7; 8) 8 L_PAREN@[7; 8)
9 R_PAREN@[8; 9) 9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10) 10 WHITESPACE@[9; 10)
11 BLOCK_EXPR@[10; 145) 11 BLOCK@[10; 145)
12 L_CURLY@[10; 11) 12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16) 13 WHITESPACE@[11; 16)
14 LET_STMT@[16; 27) 14 LET_STMT@[16; 27)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0035_ref_pat.txt b/crates/libsyntax2/tests/data/parser/inline/0035_ref_pat.txt
index ef2e2e748..01187c363 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0035_ref_pat.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0035_ref_pat.txt
@@ -8,7 +8,7 @@ FILE@[0; 52)
8 L_PAREN@[7; 8) 8 L_PAREN@[7; 8)
9 R_PAREN@[8; 9) 9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10) 10 WHITESPACE@[9; 10)
11 BLOCK_EXPR@[10; 51) 11 BLOCK@[10; 51)
12 L_CURLY@[10; 11) 12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16) 13 WHITESPACE@[11; 16)
14 LET_STMT@[16; 28) 14 LET_STMT@[16; 28)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0036_placeholder_pat.txt b/crates/libsyntax2/tests/data/parser/inline/0036_placeholder_pat.txt
index 7cf2b43a7..4fff927b5 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0036_placeholder_pat.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0036_placeholder_pat.txt
@@ -8,7 +8,7 @@ FILE@[0; 26)
8 L_PAREN@[7; 8) 8 L_PAREN@[7; 8)
9 R_PAREN@[8; 9) 9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10) 10 WHITESPACE@[9; 10)
11 BLOCK_EXPR@[10; 25) 11 BLOCK@[10; 25)
12 L_CURLY@[10; 11) 12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 12) 13 WHITESPACE@[11; 12)
14 LET_STMT@[12; 23) 14 LET_STMT@[12; 23)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0038_function_ret_type.txt b/crates/libsyntax2/tests/data/parser/inline/0038_function_ret_type.txt
index 66e3e1bba..73e91856d 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0038_function_ret_type.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0038_function_ret_type.txt
@@ -8,7 +8,7 @@ FILE@[0; 30)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 11) 11 BLOCK@[9; 11)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 R_CURLY@[10; 11) 13 R_CURLY@[10; 11)
14 WHITESPACE@[11; 12) 14 WHITESPACE@[11; 12)
@@ -27,7 +27,7 @@ FILE@[0; 30)
27 L_PAREN@[24; 25) 27 L_PAREN@[24; 25)
28 R_PAREN@[25; 26) 28 R_PAREN@[25; 26)
29 WHITESPACE@[26; 27) 29 WHITESPACE@[26; 27)
30 BLOCK_EXPR@[27; 29) 30 BLOCK@[27; 29)
31 L_CURLY@[27; 28) 31 L_CURLY@[27; 28)
32 R_CURLY@[28; 29) 32 R_CURLY@[28; 29)
33 WHITESPACE@[29; 30) 33 WHITESPACE@[29; 30)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0039_path_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0039_path_expr.txt
index 629a8ec9b..98b4bebd8 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0039_path_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0039_path_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 91)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 90) 11 BLOCK@[9; 90)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 LET_STMT@[15; 25) 14 LET_STMT@[15; 25)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0040_expr_literals.txt b/crates/libsyntax2/tests/data/parser/inline/0040_expr_literals.txt
index 78cd614a7..3948c8fdc 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0040_expr_literals.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0040_expr_literals.txt
@@ -8,7 +8,7 @@ FILE@[0; 189)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 188) 11 BLOCK@[9; 188)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 LET_STMT@[15; 28) 14 LET_STMT@[15; 28)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0043_call_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0043_call_expr.txt
index 59b920560..0dedcc0d1 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0043_call_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0043_call_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 57)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 56) 11 BLOCK@[9; 56)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 LET_STMT@[15; 27) 14 LET_STMT@[15; 27)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0044_ref_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0044_ref_expr.txt
index f9e0260d0..b762f8f18 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0044_ref_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0044_ref_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 52)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 51) 11 BLOCK@[9; 51)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 LET_STMT@[15; 26) 14 LET_STMT@[15; 26)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0045_block.txt b/crates/libsyntax2/tests/data/parser/inline/0045_block.txt
index 14e43f481..b2fe68f5d 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0045_block.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0045_block.txt
@@ -8,7 +8,7 @@ FILE@[0; 65)
8 L_PAREN@[4; 5) 8 L_PAREN@[4; 5)
9 R_PAREN@[5; 6) 9 R_PAREN@[5; 6)
10 WHITESPACE@[6; 7) 10 WHITESPACE@[6; 7)
11 BLOCK_EXPR@[7; 9) 11 BLOCK@[7; 9)
12 L_CURLY@[7; 8) 12 L_CURLY@[7; 8)
13 R_CURLY@[8; 9) 13 R_CURLY@[8; 9)
14 WHITESPACE@[9; 10) 14 WHITESPACE@[9; 10)
@@ -21,7 +21,7 @@ FILE@[0; 65)
21 L_PAREN@[14; 15) 21 L_PAREN@[14; 15)
22 R_PAREN@[15; 16) 22 R_PAREN@[15; 16)
23 WHITESPACE@[16; 17) 23 WHITESPACE@[16; 17)
24 BLOCK_EXPR@[17; 31) 24 BLOCK@[17; 31)
25 L_CURLY@[17; 18) 25 L_CURLY@[17; 18)
26 WHITESPACE@[18; 19) 26 WHITESPACE@[18; 19)
27 LET_STMT@[19; 29) 27 LET_STMT@[19; 29)
@@ -47,7 +47,7 @@ FILE@[0; 65)
47 L_PAREN@[36; 37) 47 L_PAREN@[36; 37)
48 R_PAREN@[37; 38) 48 R_PAREN@[37; 38)
49 WHITESPACE@[38; 39) 49 WHITESPACE@[38; 39)
50 BLOCK_EXPR@[39; 48) 50 BLOCK@[39; 48)
51 L_CURLY@[39; 40) 51 L_CURLY@[39; 40)
52 WHITESPACE@[40; 41) 52 WHITESPACE@[40; 41)
53 EXPR_STMT@[41; 43) 53 EXPR_STMT@[41; 43)
@@ -71,7 +71,7 @@ FILE@[0; 65)
71 L_PAREN@[53; 54) 71 L_PAREN@[53; 54)
72 R_PAREN@[54; 55) 72 R_PAREN@[54; 55)
73 WHITESPACE@[55; 56) 73 WHITESPACE@[55; 56)
74 BLOCK_EXPR@[56; 64) 74 BLOCK@[56; 64)
75 L_CURLY@[56; 57) 75 L_CURLY@[56; 57)
76 WHITESPACE@[57; 58) 76 WHITESPACE@[57; 58)
77 EXPR_STMT@[58; 60) 77 EXPR_STMT@[58; 60)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0046_default_impl.txt b/crates/libsyntax2/tests/data/parser/inline/0046_default_impl.txt
index d5a27baf7..12584a528 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0046_default_impl.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0046_default_impl.txt
@@ -10,6 +10,7 @@ FILE@[0; 20)
10 NAME_REF@[13; 16) 10 NAME_REF@[13; 16)
11 IDENT@[13; 16) "Foo" 11 IDENT@[13; 16) "Foo"
12 WHITESPACE@[16; 17) 12 WHITESPACE@[16; 17)
13 L_CURLY@[17; 18) 13 ITEM_LIST@[17; 19)
14 R_CURLY@[18; 19) 14 L_CURLY@[17; 18)
15 R_CURLY@[18; 19)
15 WHITESPACE@[19; 20) 16 WHITESPACE@[19; 20)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0047_impl_item.txt b/crates/libsyntax2/tests/data/parser/inline/0047_impl_item.txt
index 76b29f95d..0850b299e 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0047_impl_item.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0047_impl_item.txt
@@ -8,6 +8,7 @@ FILE@[0; 12)
8 NAME_REF@[5; 8) 8 NAME_REF@[5; 8)
9 IDENT@[5; 8) "Foo" 9 IDENT@[5; 8) "Foo"
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 L_CURLY@[9; 10) 11 ITEM_LIST@[9; 11)
12 R_CURLY@[10; 11) 12 L_CURLY@[9; 10)
13 R_CURLY@[10; 11)
13 WHITESPACE@[11; 12) 14 WHITESPACE@[11; 12)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0048_impl_item_neg.txt b/crates/libsyntax2/tests/data/parser/inline/0048_impl_item_neg.txt
index 2d01419c0..b90a0d133 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0048_impl_item_neg.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0048_impl_item_neg.txt
@@ -17,6 +17,7 @@ FILE@[0; 20)
17 NAME_REF@[15; 16) 17 NAME_REF@[15; 16)
18 IDENT@[15; 16) "X" 18 IDENT@[15; 16) "X"
19 WHITESPACE@[16; 17) 19 WHITESPACE@[16; 17)
20 L_CURLY@[17; 18) 20 ITEM_LIST@[17; 19)
21 R_CURLY@[18; 19) 21 L_CURLY@[17; 18)
22 R_CURLY@[18; 19)
22 WHITESPACE@[19; 20) 23 WHITESPACE@[19; 20)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0050_let_stmt;.txt b/crates/libsyntax2/tests/data/parser/inline/0050_let_stmt;.txt
index fa7709151..7f99ecb13 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0050_let_stmt;.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0050_let_stmt;.txt
@@ -8,7 +8,7 @@ FILE@[0; 77)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 76) 11 BLOCK@[9; 76)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 LET_STMT@[15; 21) 14 LET_STMT@[15; 21)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0051_method_call_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0051_method_call_expr.txt
index 9edfabc64..25a61e848 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0051_method_call_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0051_method_call_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 49)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 48) 11 BLOCK@[9; 48)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 23) 14 EXPR_STMT@[15; 23)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0052_field_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0052_field_expr.txt
index 465f7abba..096ed3211 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0052_field_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0052_field_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 37)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 36) 11 BLOCK@[9; 36)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 21) 14 EXPR_STMT@[15; 21)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0053_block_items.txt b/crates/libsyntax2/tests/data/parser/inline/0053_block_items.txt
index add5eab89..ff432e1d3 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0053_block_items.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0053_block_items.txt
@@ -8,7 +8,7 @@ FILE@[0; 21)
8 L_PAREN@[4; 5) 8 L_PAREN@[4; 5)
9 R_PAREN@[5; 6) 9 R_PAREN@[5; 6)
10 WHITESPACE@[6; 7) 10 WHITESPACE@[6; 7)
11 BLOCK_EXPR@[7; 20) 11 BLOCK@[7; 20)
12 L_CURLY@[7; 8) 12 L_CURLY@[7; 8)
13 WHITESPACE@[8; 9) 13 WHITESPACE@[8; 9)
14 FN_DEF@[9; 18) 14 FN_DEF@[9; 18)
@@ -20,7 +20,7 @@ FILE@[0; 21)
20 L_PAREN@[13; 14) 20 L_PAREN@[13; 14)
21 R_PAREN@[14; 15) 21 R_PAREN@[14; 15)
22 WHITESPACE@[15; 16) 22 WHITESPACE@[15; 16)
23 BLOCK_EXPR@[16; 18) 23 BLOCK@[16; 18)
24 L_CURLY@[16; 17) 24 L_CURLY@[16; 17)
25 R_CURLY@[17; 18) 25 R_CURLY@[17; 18)
26 WHITESPACE@[18; 19) 26 WHITESPACE@[18; 19)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0054_impl_item_items.txt b/crates/libsyntax2/tests/data/parser/inline/0054_impl_item_items.txt
index 0b75f6466..e0d5e0107 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0054_impl_item_items.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0054_impl_item_items.txt
@@ -8,70 +8,71 @@ FILE@[0; 89)
8 NAME_REF@[5; 6) 8 NAME_REF@[5; 6)
9 IDENT@[5; 6) "F" 9 IDENT@[5; 6) "F"
10 WHITESPACE@[6; 7) 10 WHITESPACE@[6; 7)
11 L_CURLY@[7; 8) 11 ITEM_LIST@[7; 88)
12 WHITESPACE@[8; 13) 12 L_CURLY@[7; 8)
13 TYPE_DEF@[13; 26) 13 WHITESPACE@[8; 13)
14 TYPE_KW@[13; 17) 14 TYPE_DEF@[13; 26)
15 WHITESPACE@[17; 18) 15 TYPE_KW@[13; 17)
16 NAME@[18; 19) 16 WHITESPACE@[17; 18)
17 IDENT@[18; 19) "A" 17 NAME@[18; 19)
18 WHITESPACE@[19; 20) 18 IDENT@[18; 19) "A"
19 EQ@[20; 21) 19 WHITESPACE@[19; 20)
20 WHITESPACE@[21; 22) 20 EQ@[20; 21)
21 PATH_TYPE@[22; 25) 21 WHITESPACE@[21; 22)
22 PATH@[22; 25) 22 PATH_TYPE@[22; 25)
23 PATH_SEGMENT@[22; 25) 23 PATH@[22; 25)
24 NAME_REF@[22; 25) 24 PATH_SEGMENT@[22; 25)
25 IDENT@[22; 25) "i32" 25 NAME_REF@[22; 25)
26 SEMI@[25; 26) 26 IDENT@[22; 25) "i32"
27 WHITESPACE@[26; 31) 27 SEMI@[25; 26)
28 CONST_DEF@[31; 49) 28 WHITESPACE@[26; 31)
29 CONST_KW@[31; 36) 29 CONST_DEF@[31; 49)
30 WHITESPACE@[36; 37) 30 CONST_KW@[31; 36)
31 NAME@[37; 38) 31 WHITESPACE@[36; 37)
32 IDENT@[37; 38) "B" 32 NAME@[37; 38)
33 COLON@[38; 39) 33 IDENT@[37; 38) "B"
34 WHITESPACE@[39; 40) 34 COLON@[38; 39)
35 PATH_TYPE@[40; 43) 35 WHITESPACE@[39; 40)
36 PATH@[40; 43) 36 PATH_TYPE@[40; 43)
37 PATH_SEGMENT@[40; 43) 37 PATH@[40; 43)
38 NAME_REF@[40; 43) 38 PATH_SEGMENT@[40; 43)
39 IDENT@[40; 43) "i32" 39 NAME_REF@[40; 43)
40 WHITESPACE@[43; 44) 40 IDENT@[40; 43) "i32"
41 EQ@[44; 45) 41 WHITESPACE@[43; 44)
42 WHITESPACE@[45; 46) 42 EQ@[44; 45)
43 LITERAL@[46; 48) 43 WHITESPACE@[45; 46)
44 INT_NUMBER@[46; 48) "92" 44 LITERAL@[46; 48)
45 SEMI@[48; 49) 45 INT_NUMBER@[46; 48) "92"
46 WHITESPACE@[49; 54) 46 SEMI@[48; 49)
47 FN_DEF@[54; 65) 47 WHITESPACE@[49; 54)
48 FN_KW@[54; 56) 48 FN_DEF@[54; 65)
49 WHITESPACE@[56; 57) 49 FN_KW@[54; 56)
50 NAME@[57; 60) 50 WHITESPACE@[56; 57)
51 IDENT@[57; 60) "foo" 51 NAME@[57; 60)
52 PARAM_LIST@[60; 62) 52 IDENT@[57; 60) "foo"
53 L_PAREN@[60; 61) 53 PARAM_LIST@[60; 62)
54 R_PAREN@[61; 62) 54 L_PAREN@[60; 61)
55 WHITESPACE@[62; 63) 55 R_PAREN@[61; 62)
56 BLOCK_EXPR@[63; 65) 56 WHITESPACE@[62; 63)
57 L_CURLY@[63; 64) 57 BLOCK@[63; 65)
58 R_CURLY@[64; 65) 58 L_CURLY@[63; 64)
59 WHITESPACE@[65; 70) 59 R_CURLY@[64; 65)
60 FN_DEF@[70; 86) 60 WHITESPACE@[65; 70)
61 FN_KW@[70; 72) 61 FN_DEF@[70; 86)
62 WHITESPACE@[72; 73) 62 FN_KW@[70; 72)
63 NAME@[73; 76) 63 WHITESPACE@[72; 73)
64 IDENT@[73; 76) "bar" 64 NAME@[73; 76)
65 PARAM_LIST@[76; 83) 65 IDENT@[73; 76) "bar"
66 L_PAREN@[76; 77) 66 PARAM_LIST@[76; 83)
67 SELF_PARAM@[77; 82) 67 L_PAREN@[76; 77)
68 AMP@[77; 78) 68 SELF_PARAM@[77; 82)
69 SELF_KW@[78; 82) 69 AMP@[77; 78)
70 R_PAREN@[82; 83) 70 SELF_KW@[78; 82)
71 WHITESPACE@[83; 84) 71 R_PAREN@[82; 83)
72 BLOCK_EXPR@[84; 86) 72 WHITESPACE@[83; 84)
73 L_CURLY@[84; 85) 73 BLOCK@[84; 86)
74 R_CURLY@[85; 86) 74 L_CURLY@[84; 85)
75 WHITESPACE@[86; 87) 75 R_CURLY@[85; 86)
76 R_CURLY@[87; 88) 76 WHITESPACE@[86; 87)
77 R_CURLY@[87; 88)
77 WHITESPACE@[88; 89) 78 WHITESPACE@[88; 89)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0055_self_param.txt b/crates/libsyntax2/tests/data/parser/inline/0055_self_param.txt
index dd21dfe94..99a9f63ac 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0055_self_param.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0055_self_param.txt
@@ -8,108 +8,109 @@ FILE@[0; 128)
8 NAME_REF@[5; 6) 8 NAME_REF@[5; 6)
9 IDENT@[5; 6) "S" 9 IDENT@[5; 6) "S"
10 WHITESPACE@[6; 7) 10 WHITESPACE@[6; 7)
11 L_CURLY@[7; 8) 11 ITEM_LIST@[7; 127)
12 WHITESPACE@[8; 13) 12 L_CURLY@[7; 8)
13 FN_DEF@[13; 26) 13 WHITESPACE@[8; 13)
14 FN_KW@[13; 15) 14 FN_DEF@[13; 26)
15 WHITESPACE@[15; 16) 15 FN_KW@[13; 15)
16 NAME@[16; 17) 16 WHITESPACE@[15; 16)
17 IDENT@[16; 17) "a" 17 NAME@[16; 17)
18 PARAM_LIST@[17; 23) 18 IDENT@[16; 17) "a"
19 L_PAREN@[17; 18) 19 PARAM_LIST@[17; 23)
20 SELF_PARAM@[18; 22) 20 L_PAREN@[17; 18)
21 SELF_KW@[18; 22) 21 SELF_PARAM@[18; 22)
22 R_PAREN@[22; 23) 22 SELF_KW@[18; 22)
23 WHITESPACE@[23; 24) 23 R_PAREN@[22; 23)
24 BLOCK_EXPR@[24; 26) 24 WHITESPACE@[23; 24)
25 L_CURLY@[24; 25) 25 BLOCK@[24; 26)
26 R_CURLY@[25; 26) 26 L_CURLY@[24; 25)
27 WHITESPACE@[26; 31) 27 R_CURLY@[25; 26)
28 FN_DEF@[31; 46) 28 WHITESPACE@[26; 31)
29 FN_KW@[31; 33) 29 FN_DEF@[31; 46)
30 WHITESPACE@[33; 34) 30 FN_KW@[31; 33)
31 NAME@[34; 35) 31 WHITESPACE@[33; 34)
32 IDENT@[34; 35) "b" 32 NAME@[34; 35)
33 PARAM_LIST@[35; 43) 33 IDENT@[34; 35) "b"
34 L_PAREN@[35; 36) 34 PARAM_LIST@[35; 43)
35 SELF_PARAM@[36; 41) 35 L_PAREN@[35; 36)
36 AMP@[36; 37) 36 SELF_PARAM@[36; 41)
37 SELF_KW@[37; 41) 37 AMP@[36; 37)
38 COMMA@[41; 42) 38 SELF_KW@[37; 41)
39 R_PAREN@[42; 43) 39 COMMA@[41; 42)
40 WHITESPACE@[43; 44) 40 R_PAREN@[42; 43)
41 BLOCK_EXPR@[44; 46) 41 WHITESPACE@[43; 44)
42 L_CURLY@[44; 45) 42 BLOCK@[44; 46)
43 R_CURLY@[45; 46) 43 L_CURLY@[44; 45)
44 WHITESPACE@[46; 51) 44 R_CURLY@[45; 46)
45 FN_DEF@[51; 69) 45 WHITESPACE@[46; 51)
46 FN_KW@[51; 53) 46 FN_DEF@[51; 69)
47 WHITESPACE@[53; 54) 47 FN_KW@[51; 53)
48 NAME@[54; 55) 48 WHITESPACE@[53; 54)
49 IDENT@[54; 55) "c" 49 NAME@[54; 55)
50 PARAM_LIST@[55; 66) 50 IDENT@[54; 55) "c"
51 L_PAREN@[55; 56) 51 PARAM_LIST@[55; 66)
52 SELF_PARAM@[56; 64) 52 L_PAREN@[55; 56)
53 AMP@[56; 57) 53 SELF_PARAM@[56; 64)
54 LIFETIME@[57; 59) "'a" 54 AMP@[56; 57)
55 WHITESPACE@[59; 60) 55 LIFETIME@[57; 59) "'a"
56 SELF_KW@[60; 64) 56 WHITESPACE@[59; 60)
57 COMMA@[64; 65) 57 SELF_KW@[60; 64)
58 R_PAREN@[65; 66) 58 COMMA@[64; 65)
59 WHITESPACE@[66; 67) 59 R_PAREN@[65; 66)
60 BLOCK_EXPR@[67; 69) 60 WHITESPACE@[66; 67)
61 L_CURLY@[67; 68) 61 BLOCK@[67; 69)
62 R_CURLY@[68; 69) 62 L_CURLY@[67; 68)
63 WHITESPACE@[69; 74) 63 R_CURLY@[68; 69)
64 FN_DEF@[74; 103) 64 WHITESPACE@[69; 74)
65 FN_KW@[74; 76) 65 FN_DEF@[74; 103)
66 WHITESPACE@[76; 77) 66 FN_KW@[74; 76)
67 NAME@[77; 78) 67 WHITESPACE@[76; 77)
68 IDENT@[77; 78) "d" 68 NAME@[77; 78)
69 PARAM_LIST@[78; 100) 69 IDENT@[77; 78) "d"
70 L_PAREN@[78; 79) 70 PARAM_LIST@[78; 100)
71 SELF_PARAM@[79; 91) 71 L_PAREN@[78; 79)
72 AMP@[79; 80) 72 SELF_PARAM@[79; 91)
73 LIFETIME@[80; 82) "'a" 73 AMP@[79; 80)
74 WHITESPACE@[82; 83) 74 LIFETIME@[80; 82) "'a"
75 MUT_KW@[83; 86) 75 WHITESPACE@[82; 83)
76 WHITESPACE@[86; 87) 76 MUT_KW@[83; 86)
77 SELF_KW@[87; 91) 77 WHITESPACE@[86; 87)
78 COMMA@[91; 92) 78 SELF_KW@[87; 91)
79 WHITESPACE@[92; 93) 79 COMMA@[91; 92)
80 PARAM@[93; 99) 80 WHITESPACE@[92; 93)
81 BIND_PAT@[93; 94) 81 PARAM@[93; 99)
82 NAME@[93; 94) 82 BIND_PAT@[93; 94)
83 IDENT@[93; 94) "x" 83 NAME@[93; 94)
84 COLON@[94; 95) 84 IDENT@[93; 94) "x"
85 WHITESPACE@[95; 96) 85 COLON@[94; 95)
86 PATH_TYPE@[96; 99) 86 WHITESPACE@[95; 96)
87 PATH@[96; 99) 87 PATH_TYPE@[96; 99)
88 PATH_SEGMENT@[96; 99) 88 PATH@[96; 99)
89 NAME_REF@[96; 99) 89 PATH_SEGMENT@[96; 99)
90 IDENT@[96; 99) "i32" 90 NAME_REF@[96; 99)
91 R_PAREN@[99; 100) 91 IDENT@[96; 99) "i32"
92 WHITESPACE@[100; 101) 92 R_PAREN@[99; 100)
93 BLOCK_EXPR@[101; 103) 93 WHITESPACE@[100; 101)
94 L_CURLY@[101; 102) 94 BLOCK@[101; 103)
95 R_CURLY@[102; 103) 95 L_CURLY@[101; 102)
96 WHITESPACE@[103; 108) 96 R_CURLY@[102; 103)
97 FN_DEF@[108; 125) 97 WHITESPACE@[103; 108)
98 FN_KW@[108; 110) 98 FN_DEF@[108; 125)
99 WHITESPACE@[110; 111) 99 FN_KW@[108; 110)
100 NAME@[111; 112) 100 WHITESPACE@[110; 111)
101 IDENT@[111; 112) "e" 101 NAME@[111; 112)
102 PARAM_LIST@[112; 122) 102 IDENT@[111; 112) "e"
103 L_PAREN@[112; 113) 103 PARAM_LIST@[112; 122)
104 SELF_PARAM@[113; 121) 104 L_PAREN@[112; 113)
105 MUT_KW@[113; 116) 105 SELF_PARAM@[113; 121)
106 WHITESPACE@[116; 117) 106 MUT_KW@[113; 116)
107 SELF_KW@[117; 121) 107 WHITESPACE@[116; 117)
108 R_PAREN@[121; 122) 108 SELF_KW@[117; 121)
109 WHITESPACE@[122; 123) 109 R_PAREN@[121; 122)
110 BLOCK_EXPR@[123; 125) 110 WHITESPACE@[122; 123)
111 L_CURLY@[123; 124) 111 BLOCK@[123; 125)
112 R_CURLY@[124; 125) 112 L_CURLY@[123; 124)
113 WHITESPACE@[125; 126) 113 R_CURLY@[124; 125)
114 R_CURLY@[126; 127) 114 WHITESPACE@[125; 126)
115 R_CURLY@[126; 127)
115 WHITESPACE@[127; 128) 116 WHITESPACE@[127; 128)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0056_trait_item.txt b/crates/libsyntax2/tests/data/parser/inline/0056_trait_item.txt
index 40749d12a..5f89a144a 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0056_trait_item.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0056_trait_item.txt
@@ -40,6 +40,7 @@ FILE@[0; 42)
40 NAME_REF@[34; 38) 40 NAME_REF@[34; 38)
41 IDENT@[34; 38) "Copy" 41 IDENT@[34; 38) "Copy"
42 WHITESPACE@[38; 39) 42 WHITESPACE@[38; 39)
43 L_CURLY@[39; 40) 43 ITEM_LIST@[39; 41)
44 R_CURLY@[40; 41) 44 L_CURLY@[39; 40)
45 R_CURLY@[40; 41)
45 WHITESPACE@[41; 42) 46 WHITESPACE@[41; 42)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0057_auto_trait.txt b/crates/libsyntax2/tests/data/parser/inline/0057_auto_trait.txt
index 738661e3c..ede098260 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0057_auto_trait.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0057_auto_trait.txt
@@ -7,6 +7,7 @@ FILE@[0; 16)
7 NAME@[11; 12) 7 NAME@[11; 12)
8 IDENT@[11; 12) "T" 8 IDENT@[11; 12) "T"
9 WHITESPACE@[12; 13) 9 WHITESPACE@[12; 13)
10 L_CURLY@[13; 14) 10 ITEM_LIST@[13; 15)
11 R_CURLY@[14; 15) 11 L_CURLY@[13; 14)
12 R_CURLY@[14; 15)
12 WHITESPACE@[15; 16) 13 WHITESPACE@[15; 16)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0059_function_where_clause.txt b/crates/libsyntax2/tests/data/parser/inline/0059_function_where_clause.txt
index 36822ac05..1eea49e34 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0059_function_where_clause.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0059_function_where_clause.txt
@@ -30,7 +30,7 @@ FILE@[0; 29)
30 NAME_REF@[21; 25) 30 NAME_REF@[21; 25)
31 IDENT@[21; 25) "Copy" 31 IDENT@[21; 25) "Copy"
32 WHITESPACE@[25; 26) 32 WHITESPACE@[25; 26)
33 BLOCK_EXPR@[26; 28) 33 BLOCK@[26; 28)
34 L_CURLY@[26; 27) 34 L_CURLY@[26; 27)
35 R_CURLY@[27; 28) 35 R_CURLY@[27; 28)
36 WHITESPACE@[28; 29) 36 WHITESPACE@[28; 29)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0060_function_type_params.txt b/crates/libsyntax2/tests/data/parser/inline/0060_function_type_params.txt
index c03553c0d..94987753a 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0060_function_type_params.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0060_function_type_params.txt
@@ -26,7 +26,7 @@ FILE@[0; 28)
26 PARAM_LIST@[23; 25) 26 PARAM_LIST@[23; 25)
27 L_PAREN@[23; 24) 27 L_PAREN@[23; 24)
28 R_PAREN@[24; 25) 28 R_PAREN@[24; 25)
29 BLOCK_EXPR@[25; 27) 29 BLOCK@[25; 27)
30 L_CURLY@[25; 26) 30 L_CURLY@[25; 26)
31 R_CURLY@[26; 27) 31 R_CURLY@[26; 27)
32 WHITESPACE@[27; 28) 32 WHITESPACE@[27; 28)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0061_struct_lit.txt b/crates/libsyntax2/tests/data/parser/inline/0061_struct_lit.txt
index 2eb04a3c7..35b5d28b4 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0061_struct_lit.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0061_struct_lit.txt
@@ -8,7 +8,7 @@ FILE@[0; 86)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 85) 11 BLOCK@[9; 85)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 20) 14 EXPR_STMT@[15; 20)
@@ -18,8 +18,9 @@ FILE@[0; 86)
18 NAME_REF@[15; 16) 18 NAME_REF@[15; 16)
19 IDENT@[15; 16) "S" 19 IDENT@[15; 16) "S"
20 WHITESPACE@[16; 17) 20 WHITESPACE@[16; 17)
21 L_CURLY@[17; 18) 21 NAMED_FIELD_LIST@[17; 19)
22 R_CURLY@[18; 19) 22 L_CURLY@[17; 18)
23 R_CURLY@[18; 19)
23 SEMI@[19; 20) 24 SEMI@[19; 20)
24 WHITESPACE@[20; 25) 25 WHITESPACE@[20; 25)
25 EXPR_STMT@[25; 41) 26 EXPR_STMT@[25; 41)
@@ -29,23 +30,24 @@ FILE@[0; 86)
29 NAME_REF@[25; 26) 30 NAME_REF@[25; 26)
30 IDENT@[25; 26) "S" 31 IDENT@[25; 26) "S"
31 WHITESPACE@[26; 27) 32 WHITESPACE@[26; 27)
32 L_CURLY@[27; 28) 33 NAMED_FIELD_LIST@[27; 40)
33 WHITESPACE@[28; 29) 34 L_CURLY@[27; 28)
34 STRUCT_LIT_FIELD@[29; 30) 35 WHITESPACE@[28; 29)
35 NAME_REF@[29; 30) 36 NAMED_FIELD@[29; 30)
36 IDENT@[29; 30) "x" 37 NAME_REF@[29; 30)
37 COMMA@[30; 31) 38 IDENT@[29; 30) "x"
38 WHITESPACE@[31; 32) 39 COMMA@[30; 31)
39 STRUCT_LIT_FIELD@[32; 37) 40 WHITESPACE@[31; 32)
40 NAME_REF@[32; 33) 41 NAMED_FIELD@[32; 37)
41 IDENT@[32; 33) "y" 42 NAME_REF@[32; 33)
42 COLON@[33; 34) 43 IDENT@[32; 33) "y"
43 WHITESPACE@[34; 35) 44 COLON@[33; 34)
44 LITERAL@[35; 37) 45 WHITESPACE@[34; 35)
45 INT_NUMBER@[35; 37) "32" 46 LITERAL@[35; 37)
46 COMMA@[37; 38) 47 INT_NUMBER@[35; 37) "32"
47 WHITESPACE@[38; 39) 48 COMMA@[37; 38)
48 R_CURLY@[39; 40) 49 WHITESPACE@[38; 39)
50 R_CURLY@[39; 40)
49 SEMI@[40; 41) 51 SEMI@[40; 41)
50 WHITESPACE@[41; 46) 52 WHITESPACE@[41; 46)
51 EXPR_STMT@[46; 83) 53 EXPR_STMT@[46; 83)
@@ -55,39 +57,40 @@ FILE@[0; 86)
55 NAME_REF@[46; 47) 57 NAME_REF@[46; 47)
56 IDENT@[46; 47) "S" 58 IDENT@[46; 47) "S"
57 WHITESPACE@[47; 48) 59 WHITESPACE@[47; 48)
58 L_CURLY@[48; 49) 60 NAMED_FIELD_LIST@[48; 82)
59 WHITESPACE@[49; 50) 61 L_CURLY@[48; 49)
60 STRUCT_LIT_FIELD@[50; 51) 62 WHITESPACE@[49; 50)
61 NAME_REF@[50; 51) 63 NAMED_FIELD@[50; 51)
62 IDENT@[50; 51) "x" 64 NAME_REF@[50; 51)
63 COMMA@[51; 52) 65 IDENT@[50; 51) "x"
64 WHITESPACE@[52; 53) 66 COMMA@[51; 52)
65 STRUCT_LIT_FIELD@[53; 58) 67 WHITESPACE@[52; 53)
66 NAME_REF@[53; 54) 68 NAMED_FIELD@[53; 58)
67 IDENT@[53; 54) "y" 69 NAME_REF@[53; 54)
68 COLON@[54; 55) 70 IDENT@[53; 54) "y"
69 WHITESPACE@[55; 56) 71 COLON@[54; 55)
70 LITERAL@[56; 58) 72 WHITESPACE@[55; 56)
71 INT_NUMBER@[56; 58) "32" 73 LITERAL@[56; 58)
72 COMMA@[58; 59) 74 INT_NUMBER@[56; 58) "32"
73 WHITESPACE@[59; 60) 75 COMMA@[58; 59)
74 DOTDOT@[60; 62) 76 WHITESPACE@[59; 60)
75 CALL_EXPR@[62; 80) 77 DOTDOT@[60; 62)
76 PATH_EXPR@[62; 78) 78 CALL_EXPR@[62; 80)
77 PATH@[62; 78) 79 PATH_EXPR@[62; 78)
78 PATH@[62; 69) 80 PATH@[62; 78)
79 PATH_SEGMENT@[62; 69) 81 PATH@[62; 69)
80 NAME_REF@[62; 69) 82 PATH_SEGMENT@[62; 69)
81 IDENT@[62; 69) "Default" 83 NAME_REF@[62; 69)
82 COLONCOLON@[69; 71) 84 IDENT@[62; 69) "Default"
83 PATH_SEGMENT@[71; 78) 85 COLONCOLON@[69; 71)
84 NAME_REF@[71; 78) 86 PATH_SEGMENT@[71; 78)
85 IDENT@[71; 78) "default" 87 NAME_REF@[71; 78)
86 ARG_LIST@[78; 80) 88 IDENT@[71; 78) "default"
87 L_PAREN@[78; 79) 89 ARG_LIST@[78; 80)
88 R_PAREN@[79; 80) 90 L_PAREN@[78; 79)
89 WHITESPACE@[80; 81) 91 R_PAREN@[79; 80)
90 R_CURLY@[81; 82) 92 WHITESPACE@[80; 81)
93 R_CURLY@[81; 82)
91 SEMI@[82; 83) 94 SEMI@[82; 83)
92 WHITESPACE@[83; 84) 95 WHITESPACE@[83; 84)
93 R_CURLY@[84; 85) 96 R_CURLY@[84; 85)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0064_param_list.txt b/crates/libsyntax2/tests/data/parser/inline/0064_param_list.txt
index daad3dc73..50c14ceec 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0064_param_list.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0064_param_list.txt
@@ -8,7 +8,7 @@ FILE@[0; 67)
8 L_PAREN@[4; 5) 8 L_PAREN@[4; 5)
9 R_PAREN@[5; 6) 9 R_PAREN@[5; 6)
10 WHITESPACE@[6; 7) 10 WHITESPACE@[6; 7)
11 BLOCK_EXPR@[7; 9) 11 BLOCK@[7; 9)
12 L_CURLY@[7; 8) 12 L_CURLY@[7; 8)
13 R_CURLY@[8; 9) 13 R_CURLY@[8; 9)
14 WHITESPACE@[9; 10) 14 WHITESPACE@[9; 10)
@@ -32,7 +32,7 @@ FILE@[0; 67)
32 IDENT@[18; 21) "i32" 32 IDENT@[18; 21) "i32"
33 R_PAREN@[21; 22) 33 R_PAREN@[21; 22)
34 WHITESPACE@[22; 23) 34 WHITESPACE@[22; 23)
35 BLOCK_EXPR@[23; 25) 35 BLOCK@[23; 25)
36 L_CURLY@[23; 24) 36 L_CURLY@[23; 24)
37 R_CURLY@[24; 25) 37 R_CURLY@[24; 25)
38 WHITESPACE@[25; 26) 38 WHITESPACE@[25; 26)
@@ -58,7 +58,7 @@ FILE@[0; 67)
58 WHITESPACE@[38; 39) 58 WHITESPACE@[38; 39)
59 R_PAREN@[39; 40) 59 R_PAREN@[39; 40)
60 WHITESPACE@[40; 41) 60 WHITESPACE@[40; 41)
61 BLOCK_EXPR@[41; 43) 61 BLOCK@[41; 43)
62 L_CURLY@[41; 42) 62 L_CURLY@[41; 42)
63 R_CURLY@[42; 43) 63 R_CURLY@[42; 43)
64 WHITESPACE@[43; 44) 64 WHITESPACE@[43; 44)
@@ -93,7 +93,7 @@ FILE@[0; 67)
93 R_PAREN@[61; 62) 93 R_PAREN@[61; 62)
94 R_PAREN@[62; 63) 94 R_PAREN@[62; 63)
95 WHITESPACE@[63; 64) 95 WHITESPACE@[63; 64)
96 BLOCK_EXPR@[64; 66) 96 BLOCK@[64; 66)
97 L_CURLY@[64; 65) 97 L_CURLY@[64; 65)
98 R_CURLY@[65; 66) 98 R_CURLY@[65; 66)
99 WHITESPACE@[66; 67) 99 WHITESPACE@[66; 67)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0065_if_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0065_if_expr.txt
index f6895b4f7..c353a330a 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0065_if_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0065_if_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 107)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 106) 11 BLOCK@[9; 106)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 26) 14 EXPR_STMT@[15; 26)
@@ -18,7 +18,7 @@ FILE@[0; 107)
18 LITERAL@[18; 22) 18 LITERAL@[18; 22)
19 TRUE_KW@[18; 22) 19 TRUE_KW@[18; 22)
20 WHITESPACE@[22; 23) 20 WHITESPACE@[22; 23)
21 BLOCK_EXPR@[23; 25) 21 BLOCK@[23; 25)
22 L_CURLY@[23; 24) 22 L_CURLY@[23; 24)
23 R_CURLY@[24; 25) 23 R_CURLY@[24; 25)
24 SEMI@[25; 26) 24 SEMI@[25; 26)
@@ -30,13 +30,13 @@ FILE@[0; 107)
30 LITERAL@[34; 38) 30 LITERAL@[34; 38)
31 TRUE_KW@[34; 38) 31 TRUE_KW@[34; 38)
32 WHITESPACE@[38; 39) 32 WHITESPACE@[38; 39)
33 BLOCK_EXPR@[39; 41) 33 BLOCK@[39; 41)
34 L_CURLY@[39; 40) 34 L_CURLY@[39; 40)
35 R_CURLY@[40; 41) 35 R_CURLY@[40; 41)
36 WHITESPACE@[41; 42) 36 WHITESPACE@[41; 42)
37 ELSE_KW@[42; 46) 37 ELSE_KW@[42; 46)
38 WHITESPACE@[46; 47) 38 WHITESPACE@[46; 47)
39 BLOCK_EXPR@[47; 49) 39 BLOCK@[47; 49)
40 L_CURLY@[47; 48) 40 L_CURLY@[47; 48)
41 R_CURLY@[48; 49) 41 R_CURLY@[48; 49)
42 SEMI@[49; 50) 42 SEMI@[49; 50)
@@ -48,7 +48,7 @@ FILE@[0; 107)
48 LITERAL@[58; 62) 48 LITERAL@[58; 62)
49 TRUE_KW@[58; 62) 49 TRUE_KW@[58; 62)
50 WHITESPACE@[62; 63) 50 WHITESPACE@[62; 63)
51 BLOCK_EXPR@[63; 65) 51 BLOCK@[63; 65)
52 L_CURLY@[63; 64) 52 L_CURLY@[63; 64)
53 R_CURLY@[64; 65) 53 R_CURLY@[64; 65)
54 WHITESPACE@[65; 66) 54 WHITESPACE@[65; 66)
@@ -60,13 +60,13 @@ FILE@[0; 107)
60 LITERAL@[74; 79) 60 LITERAL@[74; 79)
61 FALSE_KW@[74; 79) 61 FALSE_KW@[74; 79)
62 WHITESPACE@[79; 80) 62 WHITESPACE@[79; 80)
63 BLOCK_EXPR@[80; 82) 63 BLOCK@[80; 82)
64 L_CURLY@[80; 81) 64 L_CURLY@[80; 81)
65 R_CURLY@[81; 82) 65 R_CURLY@[81; 82)
66 WHITESPACE@[82; 83) 66 WHITESPACE@[82; 83)
67 ELSE_KW@[83; 87) 67 ELSE_KW@[83; 87)
68 WHITESPACE@[87; 88) 68 WHITESPACE@[87; 88)
69 BLOCK_EXPR@[88; 90) 69 BLOCK@[88; 90)
70 L_CURLY@[88; 89) 70 L_CURLY@[88; 89)
71 R_CURLY@[89; 90) 71 R_CURLY@[89; 90)
72 SEMI@[90; 91) 72 SEMI@[90; 91)
@@ -81,7 +81,7 @@ FILE@[0; 107)
81 NAME_REF@[99; 100) 81 NAME_REF@[99; 100)
82 IDENT@[99; 100) "S" 82 IDENT@[99; 100) "S"
83 WHITESPACE@[100; 101) 83 WHITESPACE@[100; 101)
84 BLOCK_EXPR@[101; 103) 84 BLOCK@[101; 103)
85 L_CURLY@[101; 102) 85 L_CURLY@[101; 102)
86 R_CURLY@[102; 103) 86 R_CURLY@[102; 103)
87 SEMI@[103; 104) 87 SEMI@[103; 104)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0066_lambda_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0066_lambda_expr.txt
index a5acd9d12..0e95f84c4 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0066_lambda_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0066_lambda_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 79)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 78) 11 BLOCK@[9; 78)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 21) 14 EXPR_STMT@[15; 21)
@@ -36,7 +36,7 @@ FILE@[0; 79)
36 NAME_REF@[32; 35) 36 NAME_REF@[32; 35)
37 IDENT@[32; 35) "i32" 37 IDENT@[32; 35) "i32"
38 WHITESPACE@[35; 36) 38 WHITESPACE@[35; 36)
39 BLOCK_EXPR@[36; 42) 39 BLOCK@[36; 42)
40 L_CURLY@[36; 37) 40 L_CURLY@[36; 37)
41 WHITESPACE@[37; 38) 41 WHITESPACE@[37; 38)
42 LITERAL@[38; 40) 42 LITERAL@[38; 40)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0067_block_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0067_block_expr.txt
index 688466a13..e1ad36165 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0067_block_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0067_block_expr.txt
@@ -8,21 +8,23 @@ FILE@[0; 36)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 35) 11 BLOCK@[9; 35)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 18) 14 EXPR_STMT@[15; 18)
15 BLOCK_EXPR@[15; 17) 15 BLOCK_EXPR@[15; 17)
16 L_CURLY@[15; 16) 16 BLOCK@[15; 17)
17 R_CURLY@[16; 17) 17 L_CURLY@[15; 16)
18 R_CURLY@[16; 17)
18 SEMI@[17; 18) 19 SEMI@[17; 18)
19 WHITESPACE@[18; 23) 20 WHITESPACE@[18; 23)
20 EXPR_STMT@[23; 33) 21 EXPR_STMT@[23; 33)
21 BLOCK_EXPR@[23; 32) 22 BLOCK_EXPR@[23; 32)
22 UNSAFE_KW@[23; 29) 23 UNSAFE_KW@[23; 29)
23 WHITESPACE@[29; 30) 24 WHITESPACE@[29; 30)
24 L_CURLY@[30; 31) 25 BLOCK@[30; 32)
25 R_CURLY@[31; 32) 26 L_CURLY@[30; 31)
27 R_CURLY@[31; 32)
26 SEMI@[32; 33) 28 SEMI@[32; 33)
27 WHITESPACE@[33; 34) 29 WHITESPACE@[33; 34)
28 R_CURLY@[34; 35) 30 R_CURLY@[34; 35)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0068_pub_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0068_pub_expr.txt
index 22d30cf32..7f475745d 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0068_pub_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0068_pub_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 29)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 20) 11 BLOCK@[9; 20)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 11) 13 WHITESPACE@[10; 11)
14 EXPR_STMT@[11; 18) 14 EXPR_STMT@[11; 18)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0068_return_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0068_return_expr.txt
index fa999bfca..8832d2cff 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0068_return_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0068_return_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 40)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 39) 11 BLOCK@[9; 39)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 22) 14 EXPR_STMT@[15; 22)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0069_match_arm.txt b/crates/libsyntax2/tests/data/parser/inline/0069_match_arm.txt
index a3061cfa2..1fffec7b1 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0069_match_arm.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0069_match_arm.txt
@@ -8,7 +8,7 @@ FILE@[0; 78)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 77) 11 BLOCK@[9; 77)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 75) 14 EXPR_STMT@[15; 75)
@@ -19,46 +19,47 @@ FILE@[0; 78)
19 L_PAREN@[21; 22) 19 L_PAREN@[21; 22)
20 R_PAREN@[22; 23) 20 R_PAREN@[22; 23)
21 WHITESPACE@[23; 24) 21 WHITESPACE@[23; 24)
22 L_CURLY@[24; 25) 22 MATCH_ARM_LIST@[24; 74)
23 WHITESPACE@[25; 34) 23 L_CURLY@[24; 25)
24 MATCH_ARM@[34; 41) 24 WHITESPACE@[25; 34)
25 PLACEHOLDER_PAT@[34; 35) 25 MATCH_ARM@[34; 41)
26 UNDERSCORE@[34; 35) 26 PLACEHOLDER_PAT@[34; 35)
27 WHITESPACE@[35; 36) 27 UNDERSCORE@[34; 35)
28 FAT_ARROW@[36; 38) 28 WHITESPACE@[35; 36)
29 WHITESPACE@[38; 39) 29 FAT_ARROW@[36; 38)
30 TUPLE_EXPR@[39; 41) 30 WHITESPACE@[38; 39)
31 L_PAREN@[39; 40) 31 TUPLE_EXPR@[39; 41)
32 R_PAREN@[40; 41) 32 L_PAREN@[39; 40)
33 COMMA@[41; 42) 33 R_PAREN@[40; 41)
34 WHITESPACE@[42; 51) 34 COMMA@[41; 42)
35 MATCH_ARM@[51; 67) 35 WHITESPACE@[42; 51)
36 BIND_PAT@[51; 52) 36 MATCH_ARM@[51; 67)
37 NAME@[51; 52) 37 BIND_PAT@[51; 52)
38 IDENT@[51; 52) "X" 38 NAME@[51; 52)
39 WHITESPACE@[52; 53) 39 IDENT@[51; 52) "X"
40 PIPE@[53; 54) 40 WHITESPACE@[52; 53)
41 WHITESPACE@[54; 55) 41 PIPE@[53; 54)
42 BIND_PAT@[55; 56) 42 WHITESPACE@[54; 55)
43 NAME@[55; 56) 43 BIND_PAT@[55; 56)
44 IDENT@[55; 56) "Y" 44 NAME@[55; 56)
45 WHITESPACE@[56; 57) 45 IDENT@[55; 56) "Y"
46 IF_KW@[57; 59) 46 WHITESPACE@[56; 57)
47 WHITESPACE@[59; 60) 47 IF_KW@[57; 59)
48 PATH_EXPR@[60; 61) 48 WHITESPACE@[59; 60)
49 PATH@[60; 61) 49 PATH_EXPR@[60; 61)
50 PATH_SEGMENT@[60; 61) 50 PATH@[60; 61)
51 NAME_REF@[60; 61) 51 PATH_SEGMENT@[60; 61)
52 IDENT@[60; 61) "Z" 52 NAME_REF@[60; 61)
53 WHITESPACE@[61; 62) 53 IDENT@[60; 61) "Z"
54 FAT_ARROW@[62; 64) 54 WHITESPACE@[61; 62)
55 WHITESPACE@[64; 65) 55 FAT_ARROW@[62; 64)
56 TUPLE_EXPR@[65; 67) 56 WHITESPACE@[64; 65)
57 L_PAREN@[65; 66) 57 TUPLE_EXPR@[65; 67)
58 R_PAREN@[66; 67) 58 L_PAREN@[65; 66)
59 COMMA@[67; 68) 59 R_PAREN@[66; 67)
60 WHITESPACE@[68; 73) 60 COMMA@[67; 68)
61 R_CURLY@[73; 74) 61 WHITESPACE@[68; 73)
62 R_CURLY@[73; 74)
62 SEMI@[74; 75) 63 SEMI@[74; 75)
63 WHITESPACE@[75; 76) 64 WHITESPACE@[75; 76)
64 R_CURLY@[76; 77) 65 R_CURLY@[76; 77)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0070_match_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0070_match_expr.txt
index a722766d0..2ffe99c0e 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0070_match_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0070_match_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 47)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 46) 11 BLOCK@[9; 46)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 28) 14 EXPR_STMT@[15; 28)
@@ -19,9 +19,10 @@ FILE@[0; 47)
19 L_PAREN@[21; 22) 19 L_PAREN@[21; 22)
20 R_PAREN@[22; 23) 20 R_PAREN@[22; 23)
21 WHITESPACE@[23; 24) 21 WHITESPACE@[23; 24)
22 L_CURLY@[24; 25) 22 MATCH_ARM_LIST@[24; 27)
23 WHITESPACE@[25; 26) 23 L_CURLY@[24; 25)
24 R_CURLY@[26; 27) 24 WHITESPACE@[25; 26)
25 R_CURLY@[26; 27)
25 SEMI@[27; 28) 26 SEMI@[27; 28)
26 WHITESPACE@[28; 33) 27 WHITESPACE@[28; 33)
27 EXPR_STMT@[33; 44) 28 EXPR_STMT@[33; 44)
@@ -34,8 +35,9 @@ FILE@[0; 47)
34 NAME_REF@[39; 40) 35 NAME_REF@[39; 40)
35 IDENT@[39; 40) "S" 36 IDENT@[39; 40) "S"
36 WHITESPACE@[40; 41) 37 WHITESPACE@[40; 41)
37 L_CURLY@[41; 42) 38 MATCH_ARM_LIST@[41; 43)
38 R_CURLY@[42; 43) 39 L_CURLY@[41; 42)
40 R_CURLY@[42; 43)
39 SEMI@[43; 44) 41 SEMI@[43; 44)
40 WHITESPACE@[44; 45) 42 WHITESPACE@[44; 45)
41 R_CURLY@[45; 46) 43 R_CURLY@[45; 46)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0071_tuple_pat_fields.txt b/crates/libsyntax2/tests/data/parser/inline/0071_tuple_pat_fields.txt
index 76df989fc..dad7d3e87 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0071_tuple_pat_fields.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0071_tuple_pat_fields.txt
@@ -8,7 +8,7 @@ FILE@[0; 97)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 96) 11 BLOCK@[9; 96)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 LET_STMT@[15; 28) 14 LET_STMT@[15; 28)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0072_path_part.txt b/crates/libsyntax2/tests/data/parser/inline/0072_path_part.txt
index dabc64d2b..ae5296580 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0072_path_part.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0072_path_part.txt
@@ -8,7 +8,7 @@ FILE@[0; 103)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 102) 11 BLOCK@[9; 102)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 LET_STMT@[15; 33) 14 LET_STMT@[15; 33)
@@ -58,11 +58,12 @@ FILE@[0; 103)
58 NAME_REF@[62; 65) 58 NAME_REF@[62; 65)
59 IDENT@[62; 65) "Bar" 59 IDENT@[62; 65) "Bar"
60 WHITESPACE@[65; 66) 60 WHITESPACE@[65; 66)
61 L_CURLY@[66; 67) 61 FIELD_PAT_LIST@[66; 72)
62 WHITESPACE@[67; 68) 62 L_CURLY@[66; 67)
63 DOTDOT@[68; 70) 63 WHITESPACE@[67; 68)
64 WHITESPACE@[70; 71) 64 DOTDOT@[68; 70)
65 R_CURLY@[71; 72) 65 WHITESPACE@[70; 71)
66 R_CURLY@[71; 72)
66 WHITESPACE@[72; 73) 67 WHITESPACE@[72; 73)
67 EQ@[73; 74) 68 EQ@[73; 74)
68 WHITESPACE@[74; 75) 69 WHITESPACE@[74; 75)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0073_struct_pat_fields.txt b/crates/libsyntax2/tests/data/parser/inline/0073_struct_pat_fields.txt
index 9a0b6dbec..cfe37a15a 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0073_struct_pat_fields.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0073_struct_pat_fields.txt
@@ -8,7 +8,7 @@ FILE@[0; 119)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 118) 11 BLOCK@[9; 118)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 LET_STMT@[15; 29) 14 LET_STMT@[15; 29)
@@ -20,8 +20,9 @@ FILE@[0; 119)
20 NAME_REF@[19; 20) 20 NAME_REF@[19; 20)
21 IDENT@[19; 20) "S" 21 IDENT@[19; 20) "S"
22 WHITESPACE@[20; 21) 22 WHITESPACE@[20; 21)
23 L_CURLY@[21; 22) 23 FIELD_PAT_LIST@[21; 23)
24 R_CURLY@[22; 23) 24 L_CURLY@[21; 22)
25 R_CURLY@[22; 23)
25 WHITESPACE@[23; 24) 26 WHITESPACE@[23; 24)
26 EQ@[24; 25) 27 EQ@[24; 25)
27 WHITESPACE@[25; 26) 28 WHITESPACE@[25; 26)
@@ -39,22 +40,23 @@ FILE@[0; 119)
39 NAME_REF@[38; 39) 40 NAME_REF@[38; 39)
40 IDENT@[38; 39) "S" 41 IDENT@[38; 39) "S"
41 WHITESPACE@[39; 40) 42 WHITESPACE@[39; 40)
42 L_CURLY@[40; 41) 43 FIELD_PAT_LIST@[40; 56)
43 WHITESPACE@[41; 42) 44 L_CURLY@[40; 41)
44 BIND_PAT@[42; 43) 45 WHITESPACE@[41; 42)
45 NAME@[42; 43) 46 BIND_PAT@[42; 43)
46 IDENT@[42; 43) "f" 47 NAME@[42; 43)
47 COMMA@[43; 44) 48 IDENT@[42; 43) "f"
48 WHITESPACE@[44; 45) 49 COMMA@[43; 44)
49 BIND_PAT@[45; 54) 50 WHITESPACE@[44; 45)
50 REF_KW@[45; 48) 51 BIND_PAT@[45; 54)
51 WHITESPACE@[48; 49) 52 REF_KW@[45; 48)
52 MUT_KW@[49; 52) 53 WHITESPACE@[48; 49)
53 WHITESPACE@[52; 53) 54 MUT_KW@[49; 52)
54 NAME@[53; 54) 55 WHITESPACE@[52; 53)
55 IDENT@[53; 54) "g" 56 NAME@[53; 54)
56 WHITESPACE@[54; 55) 57 IDENT@[53; 54) "g"
57 R_CURLY@[55; 56) 58 WHITESPACE@[54; 55)
59 R_CURLY@[55; 56)
58 WHITESPACE@[56; 57) 60 WHITESPACE@[56; 57)
59 EQ@[57; 58) 61 EQ@[57; 58)
60 WHITESPACE@[58; 59) 62 WHITESPACE@[58; 59)
@@ -72,17 +74,18 @@ FILE@[0; 119)
72 NAME_REF@[71; 72) 74 NAME_REF@[71; 72)
73 IDENT@[71; 72) "S" 75 IDENT@[71; 72) "S"
74 WHITESPACE@[72; 73) 76 WHITESPACE@[72; 73)
75 L_CURLY@[73; 74) 77 FIELD_PAT_LIST@[73; 84)
76 WHITESPACE@[74; 75) 78 L_CURLY@[73; 74)
77 IDENT@[75; 76) "h" 79 WHITESPACE@[74; 75)
78 COLON@[76; 77) 80 IDENT@[75; 76) "h"
79 WHITESPACE@[77; 78) 81 COLON@[76; 77)
80 PLACEHOLDER_PAT@[78; 79) 82 WHITESPACE@[77; 78)
81 UNDERSCORE@[78; 79) 83 PLACEHOLDER_PAT@[78; 79)
82 COMMA@[79; 80) 84 UNDERSCORE@[78; 79)
83 WHITESPACE@[80; 81) 85 COMMA@[79; 80)
84 DOTDOT@[81; 83) 86 WHITESPACE@[80; 81)
85 R_CURLY@[83; 84) 87 DOTDOT@[81; 83)
88 R_CURLY@[83; 84)
86 WHITESPACE@[84; 85) 89 WHITESPACE@[84; 85)
87 EQ@[85; 86) 90 EQ@[85; 86)
88 WHITESPACE@[86; 87) 91 WHITESPACE@[86; 87)
@@ -100,16 +103,17 @@ FILE@[0; 119)
100 NAME_REF@[99; 100) 103 NAME_REF@[99; 100)
101 IDENT@[99; 100) "S" 104 IDENT@[99; 100) "S"
102 WHITESPACE@[100; 101) 105 WHITESPACE@[100; 101)
103 L_CURLY@[101; 102) 106 FIELD_PAT_LIST@[101; 110)
104 WHITESPACE@[102; 103) 107 L_CURLY@[101; 102)
105 IDENT@[103; 104) "h" 108 WHITESPACE@[102; 103)
106 COLON@[104; 105) 109 IDENT@[103; 104) "h"
107 WHITESPACE@[105; 106) 110 COLON@[104; 105)
108 PLACEHOLDER_PAT@[106; 107) 111 WHITESPACE@[105; 106)
109 UNDERSCORE@[106; 107) 112 PLACEHOLDER_PAT@[106; 107)
110 COMMA@[107; 108) 113 UNDERSCORE@[106; 107)
111 WHITESPACE@[108; 109) 114 COMMA@[107; 108)
112 R_CURLY@[109; 110) 115 WHITESPACE@[108; 109)
116 R_CURLY@[109; 110)
113 WHITESPACE@[110; 111) 117 WHITESPACE@[110; 111)
114 EQ@[111; 112) 118 EQ@[111; 112)
115 WHITESPACE@[112; 113) 119 WHITESPACE@[112; 113)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0074_unary_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0074_unary_expr.txt
index 4da473a7f..3daf1d777 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0074_unary_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0074_unary_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 44)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 43) 11 BLOCK@[9; 43)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 20) 14 EXPR_STMT@[15; 20)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0075_try_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0075_try_expr.txt
index c97d671d2..104847c82 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0075_try_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0075_try_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 21)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 20) 11 BLOCK@[9; 20)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 18) 14 EXPR_STMT@[15; 18)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0076_cond.txt b/crates/libsyntax2/tests/data/parser/inline/0076_cond.txt
index 2ee8fa78a..6f26b7c0f 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0076_cond.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0076_cond.txt
@@ -8,7 +8,7 @@ FILE@[0; 38)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 37) 11 BLOCK@[9; 37)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 11) 13 WHITESPACE@[10; 11)
14 IF_EXPR@[11; 35) 14 IF_EXPR@[11; 35)
@@ -34,7 +34,7 @@ FILE@[0; 38)
34 NAME_REF@[28; 32) 34 NAME_REF@[28; 32)
35 IDENT@[28; 32) "None" 35 IDENT@[28; 32) "None"
36 WHITESPACE@[32; 33) 36 WHITESPACE@[32; 33)
37 BLOCK_EXPR@[33; 35) 37 BLOCK@[33; 35)
38 L_CURLY@[33; 34) 38 L_CURLY@[33; 34)
39 R_CURLY@[34; 35) 39 R_CURLY@[34; 35)
40 WHITESPACE@[35; 36) 40 WHITESPACE@[35; 36)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0077_while_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0077_while_expr.txt
index 45a0c92dd..399dbd278 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0077_while_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0077_while_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 70)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 69) 11 BLOCK@[9; 69)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 29) 14 EXPR_STMT@[15; 29)
@@ -18,7 +18,7 @@ FILE@[0; 70)
18 LITERAL@[21; 25) 18 LITERAL@[21; 25)
19 TRUE_KW@[21; 25) 19 TRUE_KW@[21; 25)
20 WHITESPACE@[25; 26) 20 WHITESPACE@[25; 26)
21 BLOCK_EXPR@[26; 28) 21 BLOCK@[26; 28)
22 L_CURLY@[26; 27) 22 L_CURLY@[26; 27)
23 R_CURLY@[27; 28) 23 R_CURLY@[27; 28)
24 SEMI@[28; 29) 24 SEMI@[28; 29)
@@ -55,7 +55,7 @@ FILE@[0; 70)
55 L_PAREN@[61; 62) 55 L_PAREN@[61; 62)
56 R_PAREN@[62; 63) 56 R_PAREN@[62; 63)
57 WHITESPACE@[63; 64) 57 WHITESPACE@[63; 64)
58 BLOCK_EXPR@[64; 66) 58 BLOCK@[64; 66)
59 L_CURLY@[64; 65) 59 L_CURLY@[64; 65)
60 R_CURLY@[65; 66) 60 R_CURLY@[65; 66)
61 SEMI@[66; 67) 61 SEMI@[66; 67)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0078_mod_contents.txt b/crates/libsyntax2/tests/data/parser/inline/0078_mod_contents.txt
index 696695eba..9324f2278 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0078_mod_contents.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0078_mod_contents.txt
@@ -8,7 +8,7 @@ FILE@[0; 70)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 11) 11 BLOCK@[9; 11)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 R_CURLY@[10; 11) 13 R_CURLY@[10; 11)
14 WHITESPACE@[11; 12) 14 WHITESPACE@[11; 12)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0079_cast_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0079_cast_expr.txt
index b49926d22..817f7b36e 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0079_cast_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0079_cast_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 28)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 27) 11 BLOCK@[9; 27)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 25) 14 EXPR_STMT@[15; 25)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0080_tuple_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0080_tuple_expr.txt
index d2b4051a3..5e1dd1a62 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0080_tuple_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0080_tuple_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 40)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 39) 11 BLOCK@[9; 39)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 18) 14 EXPR_STMT@[15; 18)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0081_index_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0081_index_expr.txt
index 9da850898..4ebd0e172 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0081_index_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0081_index_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 26)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 25) 11 BLOCK@[9; 25)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 23) 14 EXPR_STMT@[15; 23)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0082_tuple_pat.txt b/crates/libsyntax2/tests/data/parser/inline/0082_tuple_pat.txt
index d47c712db..c498f4fc5 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0082_tuple_pat.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0082_tuple_pat.txt
@@ -8,7 +8,7 @@ FILE@[0; 39)
8 L_PAREN@[7; 8) 8 L_PAREN@[7; 8)
9 R_PAREN@[8; 9) 9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10) 10 WHITESPACE@[9; 10)
11 BLOCK_EXPR@[10; 38) 11 BLOCK@[10; 38)
12 L_CURLY@[10; 11) 12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16) 13 WHITESPACE@[11; 16)
14 LET_STMT@[16; 36) 14 LET_STMT@[16; 36)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0083_postfix_range.txt b/crates/libsyntax2/tests/data/parser/inline/0083_postfix_range.txt
index 312f8df1e..b4794e3e3 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0083_postfix_range.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0083_postfix_range.txt
@@ -8,7 +8,7 @@ FILE@[0; 26)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 25) 11 BLOCK@[9; 25)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 11) 13 WHITESPACE@[10; 11)
14 LET_STMT@[11; 23) 14 LET_STMT@[11; 23)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0084_loop_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0084_loop_expr.txt
index eba105e64..ce0dfe7a4 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0084_loop_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0084_loop_expr.txt
@@ -8,14 +8,14 @@ FILE@[0; 26)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 25) 11 BLOCK@[9; 25)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 23) 14 EXPR_STMT@[15; 23)
15 LOOP_EXPR@[15; 22) 15 LOOP_EXPR@[15; 22)
16 LOOP_KW@[15; 19) 16 LOOP_KW@[15; 19)
17 WHITESPACE@[19; 20) 17 WHITESPACE@[19; 20)
18 BLOCK_EXPR@[20; 22) 18 BLOCK@[20; 22)
19 L_CURLY@[20; 21) 19 L_CURLY@[20; 21)
20 R_CURLY@[21; 22) 20 R_CURLY@[21; 22)
21 SEMI@[22; 23) 21 SEMI@[22; 23)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0085_for_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0085_for_expr.txt
index c140b7225..9fb0c63c2 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0085_for_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0085_for_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 33)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 32) 11 BLOCK@[9; 32)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 30) 14 EXPR_STMT@[15; 30)
@@ -25,7 +25,7 @@ FILE@[0; 33)
25 L_BRACK@[24; 25) 25 L_BRACK@[24; 25)
26 R_BRACK@[25; 26) 26 R_BRACK@[25; 26)
27 WHITESPACE@[26; 27) 27 WHITESPACE@[26; 27)
28 BLOCK_EXPR@[27; 29) 28 BLOCK@[27; 29)
29 L_CURLY@[27; 28) 29 L_CURLY@[27; 28)
30 R_CURLY@[28; 29) 30 R_CURLY@[28; 29)
31 SEMI@[29; 30) 31 SEMI@[29; 30)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0085_match_arms_commas.txt b/crates/libsyntax2/tests/data/parser/inline/0085_match_arms_commas.txt
index fb8f36ec9..361c3d6ac 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0085_match_arms_commas.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0085_match_arms_commas.txt
@@ -8,7 +8,7 @@ FILE@[0; 83)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 82) 11 BLOCK@[9; 82)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 MATCH_EXPR@[15; 80) 14 MATCH_EXPR@[15; 80)
@@ -18,40 +18,42 @@ FILE@[0; 83)
18 L_PAREN@[21; 22) 18 L_PAREN@[21; 22)
19 R_PAREN@[22; 23) 19 R_PAREN@[22; 23)
20 WHITESPACE@[23; 24) 20 WHITESPACE@[23; 24)
21 L_CURLY@[24; 25) 21 MATCH_ARM_LIST@[24; 80)
22 WHITESPACE@[25; 34) 22 L_CURLY@[24; 25)
23 MATCH_ARM@[34; 41) 23 WHITESPACE@[25; 34)
24 PLACEHOLDER_PAT@[34; 35) 24 MATCH_ARM@[34; 41)
25 UNDERSCORE@[34; 35) 25 PLACEHOLDER_PAT@[34; 35)
26 WHITESPACE@[35; 36) 26 UNDERSCORE@[34; 35)
27 FAT_ARROW@[36; 38) 27 WHITESPACE@[35; 36)
28 WHITESPACE@[38; 39) 28 FAT_ARROW@[36; 38)
29 TUPLE_EXPR@[39; 41) 29 WHITESPACE@[38; 39)
30 L_PAREN@[39; 40) 30 TUPLE_EXPR@[39; 41)
31 R_PAREN@[40; 41) 31 L_PAREN@[39; 40)
32 COMMA@[41; 42) 32 R_PAREN@[40; 41)
33 WHITESPACE@[42; 51) 33 COMMA@[41; 42)
34 MATCH_ARM@[51; 58) 34 WHITESPACE@[42; 51)
35 PLACEHOLDER_PAT@[51; 52) 35 MATCH_ARM@[51; 58)
36 UNDERSCORE@[51; 52) 36 PLACEHOLDER_PAT@[51; 52)
37 WHITESPACE@[52; 53) 37 UNDERSCORE@[51; 52)
38 FAT_ARROW@[53; 55) 38 WHITESPACE@[52; 53)
39 WHITESPACE@[55; 56) 39 FAT_ARROW@[53; 55)
40 BLOCK_EXPR@[56; 58) 40 WHITESPACE@[55; 56)
41 L_CURLY@[56; 57) 41 BLOCK_EXPR@[56; 58)
42 R_CURLY@[57; 58) 42 BLOCK@[56; 58)
43 WHITESPACE@[58; 67) 43 L_CURLY@[56; 57)
44 MATCH_ARM@[67; 74) 44 R_CURLY@[57; 58)
45 PLACEHOLDER_PAT@[67; 68) 45 WHITESPACE@[58; 67)
46 UNDERSCORE@[67; 68) 46 MATCH_ARM@[67; 74)
47 WHITESPACE@[68; 69) 47 PLACEHOLDER_PAT@[67; 68)
48 FAT_ARROW@[69; 71) 48 UNDERSCORE@[67; 68)
49 WHITESPACE@[71; 72) 49 WHITESPACE@[68; 69)
50 TUPLE_EXPR@[72; 74) 50 FAT_ARROW@[69; 71)
51 L_PAREN@[72; 73) 51 WHITESPACE@[71; 72)
52 R_PAREN@[73; 74) 52 TUPLE_EXPR@[72; 74)
53 WHITESPACE@[74; 79) 53 L_PAREN@[72; 73)
54 R_CURLY@[79; 80) 54 R_PAREN@[73; 74)
55 WHITESPACE@[74; 79)
56 R_CURLY@[79; 80)
55 WHITESPACE@[80; 81) 57 WHITESPACE@[80; 81)
56 R_CURLY@[81; 82) 58 R_CURLY@[81; 82)
57 WHITESPACE@[82; 83) 59 WHITESPACE@[82; 83)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0086_array_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0086_array_expr.txt
index e3b9c0dcd..b954f575d 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0086_array_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0086_array_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 55)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 54) 11 BLOCK@[9; 54)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 18) 14 EXPR_STMT@[15; 18)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0086_no_semi_after_block.txt b/crates/libsyntax2/tests/data/parser/inline/0086_no_semi_after_block.txt
index 3cb9eb11d..34ec269e6 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0086_no_semi_after_block.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0086_no_semi_after_block.txt
@@ -8,7 +8,7 @@ FILE@[0; 107)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 106) 11 BLOCK@[9; 106)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 25) 14 EXPR_STMT@[15; 25)
@@ -18,7 +18,7 @@ FILE@[0; 107)
18 LITERAL@[18; 22) 18 LITERAL@[18; 22)
19 TRUE_KW@[18; 22) 19 TRUE_KW@[18; 22)
20 WHITESPACE@[22; 23) 20 WHITESPACE@[22; 23)
21 BLOCK_EXPR@[23; 25) 21 BLOCK@[23; 25)
22 L_CURLY@[23; 24) 22 L_CURLY@[23; 24)
23 R_CURLY@[24; 25) 23 R_CURLY@[24; 25)
24 WHITESPACE@[25; 30) 24 WHITESPACE@[25; 30)
@@ -26,7 +26,7 @@ FILE@[0; 107)
26 LOOP_EXPR@[30; 37) 26 LOOP_EXPR@[30; 37)
27 LOOP_KW@[30; 34) 27 LOOP_KW@[30; 34)
28 WHITESPACE@[34; 35) 28 WHITESPACE@[34; 35)
29 BLOCK_EXPR@[35; 37) 29 BLOCK@[35; 37)
30 L_CURLY@[35; 36) 30 L_CURLY@[35; 36)
31 R_CURLY@[36; 37) 31 R_CURLY@[36; 37)
32 WHITESPACE@[37; 42) 32 WHITESPACE@[37; 42)
@@ -38,8 +38,9 @@ FILE@[0; 107)
38 L_PAREN@[48; 49) 38 L_PAREN@[48; 49)
39 R_PAREN@[49; 50) 39 R_PAREN@[49; 50)
40 WHITESPACE@[50; 51) 40 WHITESPACE@[50; 51)
41 L_CURLY@[51; 52) 41 MATCH_ARM_LIST@[51; 53)
42 R_CURLY@[52; 53) 42 L_CURLY@[51; 52)
43 R_CURLY@[52; 53)
43 WHITESPACE@[53; 58) 44 WHITESPACE@[53; 58)
44 EXPR_STMT@[58; 71) 45 EXPR_STMT@[58; 71)
45 WHILE_EXPR@[58; 71) 46 WHILE_EXPR@[58; 71)
@@ -48,7 +49,7 @@ FILE@[0; 107)
48 LITERAL@[64; 68) 49 LITERAL@[64; 68)
49 TRUE_KW@[64; 68) 50 TRUE_KW@[64; 68)
50 WHITESPACE@[68; 69) 51 WHITESPACE@[68; 69)
51 BLOCK_EXPR@[69; 71) 52 BLOCK@[69; 71)
52 L_CURLY@[69; 70) 53 L_CURLY@[69; 70)
53 R_CURLY@[70; 71) 54 R_CURLY@[70; 71)
54 WHITESPACE@[71; 76) 55 WHITESPACE@[71; 76)
@@ -65,18 +66,20 @@ FILE@[0; 107)
65 L_PAREN@[85; 86) 66 L_PAREN@[85; 86)
66 R_PAREN@[86; 87) 67 R_PAREN@[86; 87)
67 WHITESPACE@[87; 88) 68 WHITESPACE@[87; 88)
68 BLOCK_EXPR@[88; 90) 69 BLOCK@[88; 90)
69 L_CURLY@[88; 89) 70 L_CURLY@[88; 89)
70 R_CURLY@[89; 90) 71 R_CURLY@[89; 90)
71 WHITESPACE@[90; 95) 72 WHITESPACE@[90; 95)
72 EXPR_STMT@[95; 97) 73 EXPR_STMT@[95; 97)
73 BLOCK_EXPR@[95; 97) 74 BLOCK_EXPR@[95; 97)
74 L_CURLY@[95; 96) 75 BLOCK@[95; 97)
75 R_CURLY@[96; 97) 76 L_CURLY@[95; 96)
77 R_CURLY@[96; 97)
76 WHITESPACE@[97; 102) 78 WHITESPACE@[97; 102)
77 BLOCK_EXPR@[102; 104) 79 BLOCK_EXPR@[102; 104)
78 L_CURLY@[102; 103) 80 BLOCK@[102; 104)
79 R_CURLY@[103; 104) 81 L_CURLY@[102; 103)
82 R_CURLY@[103; 104)
80 WHITESPACE@[104; 105) 83 WHITESPACE@[104; 105)
81 R_CURLY@[105; 106) 84 R_CURLY@[105; 106)
82 WHITESPACE@[106; 107) 85 WHITESPACE@[106; 107)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0087_stmt_postfix_expr_ambiguity.txt b/crates/libsyntax2/tests/data/parser/inline/0087_stmt_postfix_expr_ambiguity.txt
index 17351c87c..1451cdfbc 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0087_stmt_postfix_expr_ambiguity.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0087_stmt_postfix_expr_ambiguity.txt
@@ -8,7 +8,7 @@ FILE@[0; 84)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 83) 11 BLOCK@[9; 83)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 MATCH_EXPR@[15; 81) 14 MATCH_EXPR@[15; 81)
@@ -18,41 +18,45 @@ FILE@[0; 84)
18 L_PAREN@[21; 22) 18 L_PAREN@[21; 22)
19 R_PAREN@[22; 23) 19 R_PAREN@[22; 23)
20 WHITESPACE@[23; 24) 20 WHITESPACE@[23; 24)
21 L_CURLY@[24; 25) 21 MATCH_ARM_LIST@[24; 81)
22 WHITESPACE@[25; 34) 22 L_CURLY@[24; 25)
23 MATCH_ARM@[34; 41) 23 WHITESPACE@[25; 34)
24 PLACEHOLDER_PAT@[34; 35) 24 MATCH_ARM@[34; 41)
25 UNDERSCORE@[34; 35) 25 PLACEHOLDER_PAT@[34; 35)
26 WHITESPACE@[35; 36) 26 UNDERSCORE@[34; 35)
27 FAT_ARROW@[36; 38) 27 WHITESPACE@[35; 36)
28 WHITESPACE@[38; 39) 28 FAT_ARROW@[36; 38)
29 BLOCK_EXPR@[39; 41) 29 WHITESPACE@[38; 39)
30 L_CURLY@[39; 40) 30 BLOCK_EXPR@[39; 41)
31 R_CURLY@[40; 41) 31 BLOCK@[39; 41)
32 WHITESPACE@[41; 50) 32 L_CURLY@[39; 40)
33 MATCH_ARM@[50; 58) 33 R_CURLY@[40; 41)
34 TUPLE_PAT@[50; 52) 34 WHITESPACE@[41; 50)
35 L_PAREN@[50; 51) 35 MATCH_ARM@[50; 58)
36 R_PAREN@[51; 52) 36 TUPLE_PAT@[50; 52)
37 WHITESPACE@[52; 53) 37 L_PAREN@[50; 51)
38 FAT_ARROW@[53; 55) 38 R_PAREN@[51; 52)
39 WHITESPACE@[55; 56) 39 WHITESPACE@[52; 53)
40 BLOCK_EXPR@[56; 58) 40 FAT_ARROW@[53; 55)
41 L_CURLY@[56; 57) 41 WHITESPACE@[55; 56)
42 R_CURLY@[57; 58) 42 BLOCK_EXPR@[56; 58)
43 WHITESPACE@[58; 67) 43 BLOCK@[56; 58)
44 MATCH_ARM@[67; 75) 44 L_CURLY@[56; 57)
45 SLICE_PAT@[67; 69) 45 R_CURLY@[57; 58)
46 L_BRACK@[67; 68) 46 WHITESPACE@[58; 67)
47 R_BRACK@[68; 69) 47 MATCH_ARM@[67; 75)
48 WHITESPACE@[69; 70) 48 SLICE_PAT@[67; 69)
49 FAT_ARROW@[70; 72) 49 L_BRACK@[67; 68)
50 WHITESPACE@[72; 73) 50 R_BRACK@[68; 69)
51 BLOCK_EXPR@[73; 75) 51 WHITESPACE@[69; 70)
52 L_CURLY@[73; 74) 52 FAT_ARROW@[70; 72)
53 R_CURLY@[74; 75) 53 WHITESPACE@[72; 73)
54 WHITESPACE@[75; 80) 54 BLOCK_EXPR@[73; 75)
55 R_CURLY@[80; 81) 55 BLOCK@[73; 75)
56 L_CURLY@[73; 74)
57 R_CURLY@[74; 75)
58 WHITESPACE@[75; 80)
59 R_CURLY@[80; 81)
56 WHITESPACE@[81; 82) 60 WHITESPACE@[81; 82)
57 R_CURLY@[82; 83) 61 R_CURLY@[82; 83)
58 WHITESPACE@[83; 84) 62 WHITESPACE@[83; 84)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0088_stmt_bin_expr_ambiguity.txt b/crates/libsyntax2/tests/data/parser/inline/0088_stmt_bin_expr_ambiguity.txt
index 51db54f15..71e55f570 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0088_stmt_bin_expr_ambiguity.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0088_stmt_bin_expr_ambiguity.txt
@@ -8,7 +8,7 @@ FILE@[0; 46)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 45) 11 BLOCK@[9; 45)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 LET_STMT@[15; 31) 14 LET_STMT@[15; 31)
@@ -21,10 +21,11 @@ FILE@[0; 46)
21 WHITESPACE@[22; 23) 21 WHITESPACE@[22; 23)
22 BIN_EXPR@[23; 30) 22 BIN_EXPR@[23; 30)
23 BLOCK_EXPR@[23; 26) 23 BLOCK_EXPR@[23; 26)
24 L_CURLY@[23; 24) 24 BLOCK@[23; 26)
25 LITERAL@[24; 25) 25 L_CURLY@[23; 24)
26 INT_NUMBER@[24; 25) "1" 26 LITERAL@[24; 25)
27 R_CURLY@[25; 26) 27 INT_NUMBER@[24; 25) "1"
28 R_CURLY@[25; 26)
28 WHITESPACE@[26; 27) 29 WHITESPACE@[26; 27)
29 AMP@[27; 28) 30 AMP@[27; 28)
30 WHITESPACE@[28; 29) 31 WHITESPACE@[28; 29)
@@ -34,10 +35,11 @@ FILE@[0; 46)
34 WHITESPACE@[31; 36) 35 WHITESPACE@[31; 36)
35 EXPR_STMT@[36; 39) 36 EXPR_STMT@[36; 39)
36 BLOCK_EXPR@[36; 39) 37 BLOCK_EXPR@[36; 39)
37 L_CURLY@[36; 37) 38 BLOCK@[36; 39)
38 LITERAL@[37; 38) 39 L_CURLY@[36; 37)
39 INT_NUMBER@[37; 38) "1" 40 LITERAL@[37; 38)
40 R_CURLY@[38; 39) 41 INT_NUMBER@[37; 38) "1"
42 R_CURLY@[38; 39)
41 WHITESPACE@[39; 40) 43 WHITESPACE@[39; 40)
42 EXPR_STMT@[40; 43) 44 EXPR_STMT@[40; 43)
43 REF_EXPR@[40; 42) 45 REF_EXPR@[40; 42)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0089_slice_pat.txt b/crates/libsyntax2/tests/data/parser/inline/0089_slice_pat.txt
index 8c3aaf096..b092a4ac4 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0089_slice_pat.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0089_slice_pat.txt
@@ -8,7 +8,7 @@ FILE@[0; 39)
8 L_PAREN@[7; 8) 8 L_PAREN@[7; 8)
9 R_PAREN@[8; 9) 9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10) 10 WHITESPACE@[9; 10)
11 BLOCK_EXPR@[10; 38) 11 BLOCK@[10; 38)
12 L_CURLY@[10; 11) 12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16) 13 WHITESPACE@[11; 16)
14 LET_STMT@[16; 36) 14 LET_STMT@[16; 36)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0090_trait_item_items.txt b/crates/libsyntax2/tests/data/parser/inline/0090_trait_item_items.txt
index 62d728f21..92ac51781 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0090_trait_item_items.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0090_trait_item_items.txt
@@ -8,60 +8,61 @@ FILE@[0; 83)
8 NAME_REF@[5; 6) 8 NAME_REF@[5; 6)
9 IDENT@[5; 6) "F" 9 IDENT@[5; 6) "F"
10 WHITESPACE@[6; 7) 10 WHITESPACE@[6; 7)
11 L_CURLY@[7; 8) 11 ITEM_LIST@[7; 82)
12 WHITESPACE@[8; 13) 12 L_CURLY@[7; 8)
13 TYPE_DEF@[13; 27) 13 WHITESPACE@[8; 13)
14 TYPE_KW@[13; 17) 14 TYPE_DEF@[13; 27)
15 WHITESPACE@[17; 18) 15 TYPE_KW@[13; 17)
16 NAME@[18; 19) 16 WHITESPACE@[17; 18)
17 IDENT@[18; 19) "A" 17 NAME@[18; 19)
18 COLON@[19; 20) 18 IDENT@[18; 19) "A"
19 WHITESPACE@[20; 21) 19 COLON@[19; 20)
20 PATH@[21; 26) 20 WHITESPACE@[20; 21)
21 PATH_SEGMENT@[21; 26) 21 PATH@[21; 26)
22 NAME_REF@[21; 26) 22 PATH_SEGMENT@[21; 26)
23 IDENT@[21; 26) "Clone" 23 NAME_REF@[21; 26)
24 SEMI@[26; 27) 24 IDENT@[21; 26) "Clone"
25 WHITESPACE@[27; 32) 25 SEMI@[26; 27)
26 CONST_DEF@[32; 45) 26 WHITESPACE@[27; 32)
27 CONST_KW@[32; 37) 27 CONST_DEF@[32; 45)
28 WHITESPACE@[37; 38) 28 CONST_KW@[32; 37)
29 NAME@[38; 39) 29 WHITESPACE@[37; 38)
30 IDENT@[38; 39) "B" 30 NAME@[38; 39)
31 COLON@[39; 40) 31 IDENT@[38; 39) "B"
32 WHITESPACE@[40; 41) 32 COLON@[39; 40)
33 PATH_TYPE@[41; 44) 33 WHITESPACE@[40; 41)
34 PATH@[41; 44) 34 PATH_TYPE@[41; 44)
35 PATH_SEGMENT@[41; 44) 35 PATH@[41; 44)
36 NAME_REF@[41; 44) 36 PATH_SEGMENT@[41; 44)
37 IDENT@[41; 44) "i32" 37 NAME_REF@[41; 44)
38 SEMI@[44; 45) 38 IDENT@[41; 44) "i32"
39 WHITESPACE@[45; 50) 39 SEMI@[44; 45)
40 FN_DEF@[50; 61) 40 WHITESPACE@[45; 50)
41 FN_KW@[50; 52) 41 FN_DEF@[50; 61)
42 WHITESPACE@[52; 53) 42 FN_KW@[50; 52)
43 NAME@[53; 56) 43 WHITESPACE@[52; 53)
44 IDENT@[53; 56) "foo" 44 NAME@[53; 56)
45 PARAM_LIST@[56; 58) 45 IDENT@[53; 56) "foo"
46 L_PAREN@[56; 57) 46 PARAM_LIST@[56; 58)
47 R_PAREN@[57; 58) 47 L_PAREN@[56; 57)
48 WHITESPACE@[58; 59) 48 R_PAREN@[57; 58)
49 BLOCK_EXPR@[59; 61) 49 WHITESPACE@[58; 59)
50 L_CURLY@[59; 60) 50 BLOCK@[59; 61)
51 R_CURLY@[60; 61) 51 L_CURLY@[59; 60)
52 WHITESPACE@[61; 66) 52 R_CURLY@[60; 61)
53 FN_DEF@[66; 80) 53 WHITESPACE@[61; 66)
54 FN_KW@[66; 68) 54 FN_DEF@[66; 80)
55 WHITESPACE@[68; 69) 55 FN_KW@[66; 68)
56 NAME@[69; 72) 56 WHITESPACE@[68; 69)
57 IDENT@[69; 72) "bar" 57 NAME@[69; 72)
58 PARAM_LIST@[72; 79) 58 IDENT@[69; 72) "bar"
59 L_PAREN@[72; 73) 59 PARAM_LIST@[72; 79)
60 SELF_PARAM@[73; 78) 60 L_PAREN@[72; 73)
61 AMP@[73; 74) 61 SELF_PARAM@[73; 78)
62 SELF_KW@[74; 78) 62 AMP@[73; 74)
63 R_PAREN@[78; 79) 63 SELF_KW@[74; 78)
64 SEMI@[79; 80) 64 R_PAREN@[78; 79)
65 WHITESPACE@[80; 81) 65 SEMI@[79; 80)
66 R_CURLY@[81; 82) 66 WHITESPACE@[80; 81)
67 R_CURLY@[81; 82)
67 WHITESPACE@[82; 83) 68 WHITESPACE@[82; 83)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0091_fn_decl.txt b/crates/libsyntax2/tests/data/parser/inline/0091_fn_decl.txt
index e5c96aa76..6b6d70150 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0091_fn_decl.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0091_fn_decl.txt
@@ -5,17 +5,18 @@ FILE@[0; 22)
5 NAME@[6; 7) 5 NAME@[6; 7)
6 IDENT@[6; 7) "T" 6 IDENT@[6; 7) "T"
7 WHITESPACE@[7; 8) 7 WHITESPACE@[7; 8)
8 L_CURLY@[8; 9) 8 ITEM_LIST@[8; 21)
9 WHITESPACE@[9; 10) 9 L_CURLY@[8; 9)
10 FN_DEF@[10; 19) 10 WHITESPACE@[9; 10)
11 FN_KW@[10; 12) 11 FN_DEF@[10; 19)
12 WHITESPACE@[12; 13) 12 FN_KW@[10; 12)
13 NAME@[13; 16) 13 WHITESPACE@[12; 13)
14 IDENT@[13; 16) "foo" 14 NAME@[13; 16)
15 PARAM_LIST@[16; 18) 15 IDENT@[13; 16) "foo"
16 L_PAREN@[16; 17) 16 PARAM_LIST@[16; 18)
17 R_PAREN@[17; 18) 17 L_PAREN@[16; 17)
18 SEMI@[18; 19) 18 R_PAREN@[17; 18)
19 WHITESPACE@[19; 20) 19 SEMI@[18; 19)
20 R_CURLY@[20; 21) 20 WHITESPACE@[19; 20)
21 R_CURLY@[20; 21)
21 WHITESPACE@[21; 22) 22 WHITESPACE@[21; 22)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0092_literal_pattern.txt b/crates/libsyntax2/tests/data/parser/inline/0092_literal_pattern.txt
index 5d49c31fe..e472f1d8f 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0092_literal_pattern.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0092_literal_pattern.txt
@@ -8,7 +8,7 @@ FILE@[0; 95)
8 L_PAREN@[7; 8) 8 L_PAREN@[7; 8)
9 R_PAREN@[8; 9) 9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10) 10 WHITESPACE@[9; 10)
11 BLOCK_EXPR@[10; 94) 11 BLOCK@[10; 94)
12 L_CURLY@[10; 11) 12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16) 13 WHITESPACE@[11; 16)
14 MATCH_EXPR@[16; 92) 14 MATCH_EXPR@[16; 92)
@@ -18,42 +18,43 @@ FILE@[0; 95)
18 L_PAREN@[22; 23) 18 L_PAREN@[22; 23)
19 R_PAREN@[23; 24) 19 R_PAREN@[23; 24)
20 WHITESPACE@[24; 25) 20 WHITESPACE@[24; 25)
21 L_CURLY@[25; 26) 21 MATCH_ARM_LIST@[25; 92)
22 WHITESPACE@[26; 35) 22 L_CURLY@[25; 26)
23 MATCH_ARM@[35; 43) 23 WHITESPACE@[26; 35)
24 LITERAL@[35; 37) 24 MATCH_ARM@[35; 43)
25 INT_NUMBER@[35; 37) "92" 25 LITERAL@[35; 37)
26 WHITESPACE@[37; 38) 26 INT_NUMBER@[35; 37) "92"
27 FAT_ARROW@[38; 40) 27 WHITESPACE@[37; 38)
28 WHITESPACE@[40; 41) 28 FAT_ARROW@[38; 40)
29 TUPLE_EXPR@[41; 43) 29 WHITESPACE@[40; 41)
30 L_PAREN@[41; 42) 30 TUPLE_EXPR@[41; 43)
31 R_PAREN@[42; 43) 31 L_PAREN@[41; 42)
32 COMMA@[43; 44) 32 R_PAREN@[42; 43)
33 WHITESPACE@[44; 53) 33 COMMA@[43; 44)
34 MATCH_ARM@[53; 62) 34 WHITESPACE@[44; 53)
35 LITERAL@[53; 56) 35 MATCH_ARM@[53; 62)
36 CHAR@[53; 56) 36 LITERAL@[53; 56)
37 WHITESPACE@[56; 57) 37 CHAR@[53; 56)
38 FAT_ARROW@[57; 59) 38 WHITESPACE@[56; 57)
39 WHITESPACE@[59; 60) 39 FAT_ARROW@[57; 59)
40 TUPLE_EXPR@[60; 62) 40 WHITESPACE@[59; 60)
41 L_PAREN@[60; 61) 41 TUPLE_EXPR@[60; 62)
42 R_PAREN@[61; 62) 42 L_PAREN@[60; 61)
43 COMMA@[62; 63) 43 R_PAREN@[61; 62)
44 WHITESPACE@[63; 72) 44 COMMA@[62; 63)
45 MATCH_ARM@[72; 85) 45 WHITESPACE@[63; 72)
46 LITERAL@[72; 79) 46 MATCH_ARM@[72; 85)
47 STRING@[72; 79) 47 LITERAL@[72; 79)
48 WHITESPACE@[79; 80) 48 STRING@[72; 79)
49 FAT_ARROW@[80; 82) 49 WHITESPACE@[79; 80)
50 WHITESPACE@[82; 83) 50 FAT_ARROW@[80; 82)
51 TUPLE_EXPR@[83; 85) 51 WHITESPACE@[82; 83)
52 L_PAREN@[83; 84) 52 TUPLE_EXPR@[83; 85)
53 R_PAREN@[84; 85) 53 L_PAREN@[83; 84)
54 COMMA@[85; 86) 54 R_PAREN@[84; 85)
55 WHITESPACE@[86; 91) 55 COMMA@[85; 86)
56 R_CURLY@[91; 92) 56 WHITESPACE@[86; 91)
57 R_CURLY@[91; 92)
57 WHITESPACE@[92; 93) 58 WHITESPACE@[92; 93)
58 R_CURLY@[93; 94) 59 R_CURLY@[93; 94)
59 WHITESPACE@[94; 95) 60 WHITESPACE@[94; 95)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0094_range_pat.txt b/crates/libsyntax2/tests/data/parser/inline/0094_range_pat.txt
index 8b174b908..4a008e2f7 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0094_range_pat.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0094_range_pat.txt
@@ -8,7 +8,7 @@ FILE@[0; 47)
8 L_PAREN@[7; 8) 8 L_PAREN@[7; 8)
9 R_PAREN@[8; 9) 9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10) 10 WHITESPACE@[9; 10)
11 BLOCK_EXPR@[10; 46) 11 BLOCK@[10; 46)
12 L_CURLY@[10; 11) 12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16) 13 WHITESPACE@[11; 16)
14 MATCH_EXPR@[16; 44) 14 MATCH_EXPR@[16; 44)
@@ -17,25 +17,26 @@ FILE@[0; 47)
17 LITERAL@[22; 24) 17 LITERAL@[22; 24)
18 INT_NUMBER@[22; 24) "92" 18 INT_NUMBER@[22; 24) "92"
19 WHITESPACE@[24; 25) 19 WHITESPACE@[24; 25)
20 L_CURLY@[25; 26) 20 MATCH_ARM_LIST@[25; 44)
21 WHITESPACE@[26; 27) 21 L_CURLY@[25; 26)
22 MATCH_ARM@[27; 42) 22 WHITESPACE@[26; 27)
23 RANGE_PAT@[27; 36) 23 MATCH_ARM@[27; 42)
24 LITERAL@[27; 28) 24 RANGE_PAT@[27; 36)
25 INT_NUMBER@[27; 28) "0" 25 LITERAL@[27; 28)
26 WHITESPACE@[28; 29) 26 INT_NUMBER@[27; 28) "0"
27 DOTDOTDOT@[29; 32) 27 WHITESPACE@[28; 29)
28 WHITESPACE@[32; 33) 28 DOTDOTDOT@[29; 32)
29 LITERAL@[33; 36) 29 WHITESPACE@[32; 33)
30 INT_NUMBER@[33; 36) "100" 30 LITERAL@[33; 36)
31 WHITESPACE@[36; 37) 31 INT_NUMBER@[33; 36) "100"
32 FAT_ARROW@[37; 39) 32 WHITESPACE@[36; 37)
33 WHITESPACE@[39; 40) 33 FAT_ARROW@[37; 39)
34 TUPLE_EXPR@[40; 42) 34 WHITESPACE@[39; 40)
35 L_PAREN@[40; 41) 35 TUPLE_EXPR@[40; 42)
36 R_PAREN@[41; 42) 36 L_PAREN@[40; 41)
37 WHITESPACE@[42; 43) 37 R_PAREN@[41; 42)
38 R_CURLY@[43; 44) 38 WHITESPACE@[42; 43)
39 R_CURLY@[43; 44)
39 WHITESPACE@[44; 45) 40 WHITESPACE@[44; 45)
40 R_CURLY@[45; 46) 41 R_CURLY@[45; 46)
41 WHITESPACE@[46; 47) 42 WHITESPACE@[46; 47)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0095_path_type_with_bounds.txt b/crates/libsyntax2/tests/data/parser/inline/0095_path_type_with_bounds.txt
index 5b6252d0e..0e3041e38 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0095_path_type_with_bounds.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0095_path_type_with_bounds.txt
@@ -29,7 +29,7 @@ FILE@[0; 27)
29 LIFETIME@[20; 22) "'f" 29 LIFETIME@[20; 22) "'f"
30 R_ANGLE@[22; 23) 30 R_ANGLE@[22; 23)
31 WHITESPACE@[23; 24) 31 WHITESPACE@[23; 24)
32 BLOCK_EXPR@[24; 26) 32 BLOCK@[24; 26)
33 L_CURLY@[24; 25) 33 L_CURLY@[24; 25)
34 R_CURLY@[25; 26) 34 R_CURLY@[25; 26)
35 WHITESPACE@[26; 27) 35 WHITESPACE@[26; 27)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0097_param_list_opt_patterns.txt b/crates/libsyntax2/tests/data/parser/inline/0097_param_list_opt_patterns.txt
index bed6e9881..5f296504d 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0097_param_list_opt_patterns.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0097_param_list_opt_patterns.txt
@@ -37,7 +37,7 @@ FILE@[0; 35)
37 PARAM_LIST@[30; 32) 37 PARAM_LIST@[30; 32)
38 L_PAREN@[30; 31) 38 L_PAREN@[30; 31)
39 R_PAREN@[31; 32) 39 R_PAREN@[31; 32)
40 BLOCK_EXPR@[32; 34) 40 BLOCK@[32; 34)
41 L_CURLY@[32; 33) 41 L_CURLY@[32; 33)
42 R_CURLY@[33; 34) 42 R_CURLY@[33; 34)
43 WHITESPACE@[34; 35) 43 WHITESPACE@[34; 35)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0098_where_clause.txt b/crates/libsyntax2/tests/data/parser/inline/0098_where_clause.txt
index 21c5ea958..983545ca2 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0098_where_clause.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0098_where_clause.txt
@@ -63,7 +63,7 @@ FILE@[0; 87)
63 LIFETIME@[80; 82) "'a" 63 LIFETIME@[80; 82) "'a"
64 COMMA@[82; 83) 64 COMMA@[82; 83)
65 WHITESPACE@[83; 84) 65 WHITESPACE@[83; 84)
66 BLOCK_EXPR@[84; 86) 66 BLOCK@[84; 86)
67 L_CURLY@[84; 85) 67 L_CURLY@[84; 85)
68 R_CURLY@[85; 86) 68 R_CURLY@[85; 86)
69 WHITESPACE@[86; 87) 69 WHITESPACE@[86; 87)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0099_crate_keyword_vis.txt b/crates/libsyntax2/tests/data/parser/inline/0099_crate_keyword_vis.txt
index 7916bf834..39b9409fe 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0099_crate_keyword_vis.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0099_crate_keyword_vis.txt
@@ -11,7 +11,7 @@ FILE@[0; 20)
11 L_PAREN@[13; 14) 11 L_PAREN@[13; 14)
12 R_PAREN@[14; 15) 12 R_PAREN@[14; 15)
13 WHITESPACE@[15; 16) 13 WHITESPACE@[15; 16)
14 BLOCK_EXPR@[16; 19) 14 BLOCK@[16; 19)
15 L_CURLY@[16; 17) 15 L_CURLY@[16; 17)
16 WHITESPACE@[17; 18) 16 WHITESPACE@[17; 18)
17 R_CURLY@[18; 19) 17 R_CURLY@[18; 19)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0101_qual_paths.txt b/crates/libsyntax2/tests/data/parser/inline/0101_qual_paths.txt
index 58b545bdd..3be8ce9de 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0101_qual_paths.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0101_qual_paths.txt
@@ -41,7 +41,7 @@ FILE@[0; 71)
41 L_PAREN@[33; 34) 41 L_PAREN@[33; 34)
42 R_PAREN@[34; 35) 42 R_PAREN@[34; 35)
43 WHITESPACE@[35; 36) 43 WHITESPACE@[35; 36)
44 BLOCK_EXPR@[36; 70) 44 BLOCK@[36; 70)
45 L_CURLY@[36; 37) 45 L_CURLY@[36; 37)
46 WHITESPACE@[37; 38) 46 WHITESPACE@[37; 38)
47 EXPR_STMT@[38; 68) 47 EXPR_STMT@[38; 68)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0102_full_range_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0102_full_range_expr.txt
index 8e7b403c5..7ffa0e0f7 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0102_full_range_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0102_full_range_expr.txt
@@ -8,7 +8,7 @@ FILE@[0; 21)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 20) 11 BLOCK@[9; 20)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 11) 13 WHITESPACE@[10; 11)
14 EXPR_STMT@[11; 18) 14 EXPR_STMT@[11; 18)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0103_field_attrs.txt b/crates/libsyntax2/tests/data/parser/inline/0103_field_attrs.txt
index f4e2d9716..0834a408f 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0103_field_attrs.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0103_field_attrs.txt
@@ -5,37 +5,38 @@ FILE@[0; 64)
5 NAME@[7; 8) 5 NAME@[7; 8)
6 IDENT@[7; 8) "S" 6 IDENT@[7; 8) "S"
7 WHITESPACE@[8; 9) 7 WHITESPACE@[8; 9)
8 L_CURLY@[9; 10) 8 NAMED_FIELD_DEF_LIST@[9; 63)
9 WHITESPACE@[10; 15) 9 L_CURLY@[9; 10)
10 NAMED_FIELD@[15; 60) 10 WHITESPACE@[10; 15)
11 ATTR@[15; 43) 11 NAMED_FIELD_DEF@[15; 60)
12 POUND@[15; 16) 12 ATTR@[15; 43)
13 TOKEN_TREE@[16; 43) 13 POUND@[15; 16)
14 L_BRACK@[16; 17) 14 TOKEN_TREE@[16; 43)
15 IDENT@[17; 22) "serde" 15 L_BRACK@[16; 17)
16 TOKEN_TREE@[22; 42) 16 IDENT@[17; 22) "serde"
17 L_PAREN@[22; 23) 17 TOKEN_TREE@[22; 42)
18 IDENT@[23; 27) "with" 18 L_PAREN@[22; 23)
19 WHITESPACE@[27; 28) 19 IDENT@[23; 27) "with"
20 EQ@[28; 29) 20 WHITESPACE@[27; 28)
21 WHITESPACE@[29; 30) 21 EQ@[28; 29)
22 STRING@[30; 41) 22 WHITESPACE@[29; 30)
23 R_PAREN@[41; 42) 23 STRING@[30; 41)
24 R_BRACK@[42; 43) 24 R_PAREN@[41; 42)
25 WHITESPACE@[43; 48) 25 R_BRACK@[42; 43)
26 VISIBILITY@[48; 51) 26 WHITESPACE@[43; 48)
27 PUB_KW@[48; 51) 27 VISIBILITY@[48; 51)
28 WHITESPACE@[51; 52) 28 PUB_KW@[48; 51)
29 NAME@[52; 55) 29 WHITESPACE@[51; 52)
30 IDENT@[52; 55) "uri" 30 NAME@[52; 55)
31 COLON@[55; 56) 31 IDENT@[52; 55) "uri"
32 WHITESPACE@[56; 57) 32 COLON@[55; 56)
33 PATH_TYPE@[57; 60) 33 WHITESPACE@[56; 57)
34 PATH@[57; 60) 34 PATH_TYPE@[57; 60)
35 PATH_SEGMENT@[57; 60) 35 PATH@[57; 60)
36 NAME_REF@[57; 60) 36 PATH_SEGMENT@[57; 60)
37 IDENT@[57; 60) "Uri" 37 NAME_REF@[57; 60)
38 COMMA@[60; 61) 38 IDENT@[57; 60) "Uri"
39 WHITESPACE@[61; 62) 39 COMMA@[60; 61)
40 R_CURLY@[62; 63) 40 WHITESPACE@[61; 62)
41 R_CURLY@[62; 63)
41 WHITESPACE@[63; 64) 42 WHITESPACE@[63; 64)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0104_arb_self_types.txt b/crates/libsyntax2/tests/data/parser/inline/0104_arb_self_types.txt
index de94b4c63..da5c0100b 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0104_arb_self_types.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0104_arb_self_types.txt
@@ -8,64 +8,65 @@ FILE@[0; 69)
8 NAME_REF@[5; 6) 8 NAME_REF@[5; 6)
9 IDENT@[5; 6) "S" 9 IDENT@[5; 6) "S"
10 WHITESPACE@[6; 7) 10 WHITESPACE@[6; 7)
11 L_CURLY@[7; 8) 11 ITEM_LIST@[7; 68)
12 WHITESPACE@[8; 13) 12 L_CURLY@[7; 8)
13 FN_DEF@[13; 33) 13 WHITESPACE@[8; 13)
14 FN_KW@[13; 15) 14 FN_DEF@[13; 33)
15 WHITESPACE@[15; 16) 15 FN_KW@[13; 15)
16 NAME@[16; 17) 16 WHITESPACE@[15; 16)
17 IDENT@[16; 17) "a" 17 NAME@[16; 17)
18 PARAM_LIST@[17; 30) 18 IDENT@[16; 17) "a"
19 L_PAREN@[17; 18) 19 PARAM_LIST@[17; 30)
20 SELF_PARAM@[18; 29) 20 L_PAREN@[17; 18)
21 SELF_KW@[18; 22) 21 SELF_PARAM@[18; 29)
22 COLON@[22; 23) 22 SELF_KW@[18; 22)
23 WHITESPACE@[23; 24) 23 COLON@[22; 23)
24 REFERENCE_TYPE@[24; 29) 24 WHITESPACE@[23; 24)
25 AMP@[24; 25) 25 REFERENCE_TYPE@[24; 29)
26 PATH_TYPE@[25; 29) 26 AMP@[24; 25)
27 PATH@[25; 29) 27 PATH_TYPE@[25; 29)
28 PATH_SEGMENT@[25; 29) 28 PATH@[25; 29)
29 NAME_REF@[25; 29) 29 PATH_SEGMENT@[25; 29)
30 IDENT@[25; 29) "Self" 30 NAME_REF@[25; 29)
31 R_PAREN@[29; 30) 31 IDENT@[25; 29) "Self"
32 WHITESPACE@[30; 31) 32 R_PAREN@[29; 30)
33 BLOCK_EXPR@[31; 33) 33 WHITESPACE@[30; 31)
34 L_CURLY@[31; 32) 34 BLOCK@[31; 33)
35 R_CURLY@[32; 33) 35 L_CURLY@[31; 32)
36 WHITESPACE@[33; 38) 36 R_CURLY@[32; 33)
37 FN_DEF@[38; 66) 37 WHITESPACE@[33; 38)
38 FN_KW@[38; 40) 38 FN_DEF@[38; 66)
39 WHITESPACE@[40; 41) 39 FN_KW@[38; 40)
40 NAME@[41; 42) 40 WHITESPACE@[40; 41)
41 IDENT@[41; 42) "b" 41 NAME@[41; 42)
42 PARAM_LIST@[42; 63) 42 IDENT@[41; 42) "b"
43 L_PAREN@[42; 43) 43 PARAM_LIST@[42; 63)
44 SELF_PARAM@[43; 62) 44 L_PAREN@[42; 43)
45 MUT_KW@[43; 46) 45 SELF_PARAM@[43; 62)
46 WHITESPACE@[46; 47) 46 MUT_KW@[43; 46)
47 SELF_KW@[47; 51) 47 WHITESPACE@[46; 47)
48 COLON@[51; 52) 48 SELF_KW@[47; 51)
49 WHITESPACE@[52; 53) 49 COLON@[51; 52)
50 PATH_TYPE@[53; 62) 50 WHITESPACE@[52; 53)
51 PATH@[53; 62) 51 PATH_TYPE@[53; 62)
52 PATH_SEGMENT@[53; 62) 52 PATH@[53; 62)
53 NAME_REF@[53; 56) 53 PATH_SEGMENT@[53; 62)
54 IDENT@[53; 56) "Box" 54 NAME_REF@[53; 56)
55 TYPE_ARG_LIST@[56; 62) 55 IDENT@[53; 56) "Box"
56 L_ANGLE@[56; 57) 56 TYPE_ARG_LIST@[56; 62)
57 TYPE_ARG@[57; 61) 57 L_ANGLE@[56; 57)
58 PATH_TYPE@[57; 61) 58 TYPE_ARG@[57; 61)
59 PATH@[57; 61) 59 PATH_TYPE@[57; 61)
60 PATH_SEGMENT@[57; 61) 60 PATH@[57; 61)
61 NAME_REF@[57; 61) 61 PATH_SEGMENT@[57; 61)
62 IDENT@[57; 61) "Self" 62 NAME_REF@[57; 61)
63 R_ANGLE@[61; 62) 63 IDENT@[57; 61) "Self"
64 R_PAREN@[62; 63) 64 R_ANGLE@[61; 62)
65 WHITESPACE@[63; 64) 65 R_PAREN@[62; 63)
66 BLOCK_EXPR@[64; 66) 66 WHITESPACE@[63; 64)
67 L_CURLY@[64; 65) 67 BLOCK@[64; 66)
68 R_CURLY@[65; 66) 68 L_CURLY@[64; 65)
69 WHITESPACE@[66; 67) 69 R_CURLY@[65; 66)
70 R_CURLY@[67; 68) 70 WHITESPACE@[66; 67)
71 R_CURLY@[67; 68)
71 WHITESPACE@[68; 69) 72 WHITESPACE@[68; 69)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0105_continue_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0105_continue_expr.txt
index 05526fda6..7185ee1b4 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0105_continue_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0105_continue_expr.txt
@@ -8,13 +8,13 @@ FILE@[0; 69)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 68) 11 BLOCK@[9; 68)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 LOOP_EXPR@[15; 66) 14 LOOP_EXPR@[15; 66)
15 LOOP_KW@[15; 19) 15 LOOP_KW@[15; 19)
16 WHITESPACE@[19; 20) 16 WHITESPACE@[19; 20)
17 BLOCK_EXPR@[20; 66) 17 BLOCK@[20; 66)
18 L_CURLY@[20; 21) 18 L_CURLY@[20; 21)
19 WHITESPACE@[21; 30) 19 WHITESPACE@[21; 30)
20 EXPR_STMT@[30; 39) 20 EXPR_STMT@[30; 39)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0106_break_expr.txt b/crates/libsyntax2/tests/data/parser/inline/0106_break_expr.txt
index bb490e441..0b82c468f 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0106_break_expr.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0106_break_expr.txt
@@ -8,13 +8,13 @@ FILE@[0; 102)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 101) 11 BLOCK@[9; 101)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 LOOP_EXPR@[15; 99) 14 LOOP_EXPR@[15; 99)
15 LOOP_KW@[15; 19) 15 LOOP_KW@[15; 19)
16 WHITESPACE@[19; 20) 16 WHITESPACE@[19; 20)
17 BLOCK_EXPR@[20; 99) 17 BLOCK@[20; 99)
18 L_CURLY@[20; 21) 18 L_CURLY@[20; 21)
19 WHITESPACE@[21; 30) 19 WHITESPACE@[21; 30)
20 EXPR_STMT@[30; 36) 20 EXPR_STMT@[30; 36)
diff --git a/crates/libsyntax2/tests/data/parser/inline/0107_label.txt b/crates/libsyntax2/tests/data/parser/inline/0107_label.txt
index 66ba792b8..5761e80ea 100644
--- a/crates/libsyntax2/tests/data/parser/inline/0107_label.txt
+++ b/crates/libsyntax2/tests/data/parser/inline/0107_label.txt
@@ -8,7 +8,7 @@ FILE@[0; 74)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 73) 11 BLOCK@[9; 73)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 26) 14 EXPR_STMT@[15; 26)
@@ -19,7 +19,7 @@ FILE@[0; 74)
19 WHITESPACE@[18; 19) 19 WHITESPACE@[18; 19)
20 LOOP_KW@[19; 23) 20 LOOP_KW@[19; 23)
21 WHITESPACE@[23; 24) 21 WHITESPACE@[23; 24)
22 BLOCK_EXPR@[24; 26) 22 BLOCK@[24; 26)
23 L_CURLY@[24; 25) 23 L_CURLY@[24; 25)
24 R_CURLY@[25; 26) 24 R_CURLY@[25; 26)
25 WHITESPACE@[26; 31) 25 WHITESPACE@[26; 31)
@@ -34,7 +34,7 @@ FILE@[0; 74)
34 LITERAL@[41; 45) 34 LITERAL@[41; 45)
35 TRUE_KW@[41; 45) 35 TRUE_KW@[41; 45)
36 WHITESPACE@[45; 46) 36 WHITESPACE@[45; 46)
37 BLOCK_EXPR@[46; 48) 37 BLOCK@[46; 48)
38 L_CURLY@[46; 47) 38 L_CURLY@[46; 47)
39 R_CURLY@[47; 48) 39 R_CURLY@[47; 48)
40 WHITESPACE@[48; 53) 40 WHITESPACE@[48; 53)
@@ -55,7 +55,7 @@ FILE@[0; 74)
55 L_PAREN@[66; 67) 55 L_PAREN@[66; 67)
56 R_PAREN@[67; 68) 56 R_PAREN@[67; 68)
57 WHITESPACE@[68; 69) 57 WHITESPACE@[68; 69)
58 BLOCK_EXPR@[69; 71) 58 BLOCK@[69; 71)
59 L_CURLY@[69; 70) 59 L_CURLY@[69; 70)
60 R_CURLY@[70; 71) 60 R_CURLY@[70; 71)
61 WHITESPACE@[71; 72) 61 WHITESPACE@[71; 72)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0001_struct_item.txt b/crates/libsyntax2/tests/data/parser/ok/0001_struct_item.txt
index cfe128971..bc74d52b2 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0001_struct_item.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0001_struct_item.txt
@@ -17,19 +17,20 @@ FILE@[0; 32)
17 IDENT@[12; 16) "Copy" 17 IDENT@[12; 16) "Copy"
18 R_ANGLE@[16; 17) 18 R_ANGLE@[16; 17)
19 WHITESPACE@[17; 18) 19 WHITESPACE@[17; 18)
20 L_CURLY@[18; 19) 20 NAMED_FIELD_DEF_LIST@[18; 31)
21 WHITESPACE@[19; 24) 21 L_CURLY@[18; 19)
22 NAMED_FIELD@[24; 28) 22 WHITESPACE@[19; 24)
23 NAME@[24; 25) 23 NAMED_FIELD_DEF@[24; 28)
24 IDENT@[24; 25) "f" 24 NAME@[24; 25)
25 COLON@[25; 26) 25 IDENT@[24; 25) "f"
26 WHITESPACE@[26; 27) 26 COLON@[25; 26)
27 PATH_TYPE@[27; 28) 27 WHITESPACE@[26; 27)
28 PATH@[27; 28) 28 PATH_TYPE@[27; 28)
29 PATH_SEGMENT@[27; 28) 29 PATH@[27; 28)
30 NAME_REF@[27; 28) 30 PATH_SEGMENT@[27; 28)
31 IDENT@[27; 28) "T" 31 NAME_REF@[27; 28)
32 COMMA@[28; 29) 32 IDENT@[27; 28) "T"
33 WHITESPACE@[29; 30) 33 COMMA@[28; 29)
34 R_CURLY@[30; 31) 34 WHITESPACE@[29; 30)
35 R_CURLY@[30; 31)
35 WHITESPACE@[31; 32) 36 WHITESPACE@[31; 32)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0002_struct_item_field.txt b/crates/libsyntax2/tests/data/parser/ok/0002_struct_item_field.txt
index d8c68e89b..69da10900 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0002_struct_item_field.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0002_struct_item_field.txt
@@ -5,17 +5,18 @@ FILE@[0; 25)
5 NAME@[7; 8) 5 NAME@[7; 8)
6 IDENT@[7; 8) "S" 6 IDENT@[7; 8) "S"
7 WHITESPACE@[8; 9) 7 WHITESPACE@[8; 9)
8 L_CURLY@[9; 10) 8 NAMED_FIELD_DEF_LIST@[9; 25)
9 WHITESPACE@[10; 15) 9 L_CURLY@[9; 10)
10 NAMED_FIELD@[15; 23) 10 WHITESPACE@[10; 15)
11 NAME@[15; 18) 11 NAMED_FIELD_DEF@[15; 23)
12 IDENT@[15; 18) "foo" 12 NAME@[15; 18)
13 COLON@[18; 19) 13 IDENT@[15; 18) "foo"
14 WHITESPACE@[19; 20) 14 COLON@[18; 19)
15 PATH_TYPE@[20; 23) 15 WHITESPACE@[19; 20)
16 PATH@[20; 23) 16 PATH_TYPE@[20; 23)
17 PATH_SEGMENT@[20; 23) 17 PATH@[20; 23)
18 NAME_REF@[20; 23) 18 PATH_SEGMENT@[20; 23)
19 IDENT@[20; 23) "u32" 19 NAME_REF@[20; 23)
20 WHITESPACE@[23; 24) 20 IDENT@[20; 23) "u32"
21 R_CURLY@[24; 25) 21 WHITESPACE@[23; 24)
22 R_CURLY@[24; 25)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0005_fn_item.txt b/crates/libsyntax2/tests/data/parser/ok/0005_fn_item.txt
index e5bdf4852..2dc8c85d6 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0005_fn_item.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0005_fn_item.txt
@@ -8,7 +8,7 @@ FILE@[0; 13)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 12) 11 BLOCK@[9; 12)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 11) 13 WHITESPACE@[10; 11)
14 R_CURLY@[11; 12) 14 R_CURLY@[11; 12)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0008_mod_item.txt b/crates/libsyntax2/tests/data/parser/ok/0008_mod_item.txt
index 54fe69baf..a2b4f6495 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0008_mod_item.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0008_mod_item.txt
@@ -12,9 +12,10 @@ FILE@[0; 118)
12 NAME@[12; 13) 12 NAME@[12; 13)
13 IDENT@[12; 13) "b" 13 IDENT@[12; 13) "b"
14 WHITESPACE@[13; 14) 14 WHITESPACE@[13; 14)
15 L_CURLY@[14; 15) 15 ITEM_LIST@[14; 17)
16 WHITESPACE@[15; 16) 16 L_CURLY@[14; 15)
17 R_CURLY@[16; 17) 17 WHITESPACE@[15; 16)
18 R_CURLY@[16; 17)
18 WHITESPACE@[17; 19) 19 WHITESPACE@[17; 19)
19 MODULE@[19; 65) 20 MODULE@[19; 65)
20 MOD_KW@[19; 22) 21 MOD_KW@[19; 22)
@@ -22,32 +23,34 @@ FILE@[0; 118)
22 NAME@[23; 24) 23 NAME@[23; 24)
23 IDENT@[23; 24) "c" 24 IDENT@[23; 24) "c"
24 WHITESPACE@[24; 25) 25 WHITESPACE@[24; 25)
25 L_CURLY@[25; 26) 26 ITEM_LIST@[25; 65)
26 WHITESPACE@[26; 31) 27 L_CURLY@[25; 26)
27 FN_DEF@[31; 47) 28 WHITESPACE@[26; 31)
28 FN_KW@[31; 33) 29 FN_DEF@[31; 47)
29 WHITESPACE@[33; 34) 30 FN_KW@[31; 33)
30 NAME@[34; 37) 31 WHITESPACE@[33; 34)
31 IDENT@[34; 37) "foo" 32 NAME@[34; 37)
32 PARAM_LIST@[37; 39) 33 IDENT@[34; 37) "foo"
33 L_PAREN@[37; 38) 34 PARAM_LIST@[37; 39)
34 R_PAREN@[38; 39) 35 L_PAREN@[37; 38)
35 WHITESPACE@[39; 40) 36 R_PAREN@[38; 39)
36 BLOCK_EXPR@[40; 47) 37 WHITESPACE@[39; 40)
37 L_CURLY@[40; 41) 38 BLOCK@[40; 47)
38 WHITESPACE@[41; 46) 39 L_CURLY@[40; 41)
39 R_CURLY@[46; 47) 40 WHITESPACE@[41; 46)
40 WHITESPACE@[47; 52) 41 R_CURLY@[46; 47)
41 STRUCT_DEF@[52; 63) 42 WHITESPACE@[47; 52)
42 STRUCT_KW@[52; 58) 43 STRUCT_DEF@[52; 63)
43 WHITESPACE@[58; 59) 44 STRUCT_KW@[52; 58)
44 NAME@[59; 60) 45 WHITESPACE@[58; 59)
45 IDENT@[59; 60) "S" 46 NAME@[59; 60)
46 WHITESPACE@[60; 61) 47 IDENT@[59; 60) "S"
47 L_CURLY@[61; 62) 48 WHITESPACE@[60; 61)
48 R_CURLY@[62; 63) 49 NAMED_FIELD_DEF_LIST@[61; 63)
49 WHITESPACE@[63; 64) 50 L_CURLY@[61; 62)
50 R_CURLY@[64; 65) 51 R_CURLY@[62; 63)
52 WHITESPACE@[63; 64)
53 R_CURLY@[64; 65)
51 WHITESPACE@[65; 67) 54 WHITESPACE@[65; 67)
52 MODULE@[67; 118) 55 MODULE@[67; 118)
53 MOD_KW@[67; 70) 56 MOD_KW@[67; 70)
@@ -55,31 +58,33 @@ FILE@[0; 118)
55 NAME@[71; 72) 58 NAME@[71; 72)
56 IDENT@[71; 72) "d" 59 IDENT@[71; 72) "d"
57 WHITESPACE@[72; 73) 60 WHITESPACE@[72; 73)
58 L_CURLY@[73; 74) 61 ITEM_LIST@[73; 118)
59 WHITESPACE@[74; 79) 62 L_CURLY@[73; 74)
60 ATTR@[79; 87) 63 WHITESPACE@[74; 79)
61 POUND@[79; 80) 64 ATTR@[79; 87)
62 EXCL@[80; 81) 65 POUND@[79; 80)
63 TOKEN_TREE@[81; 87) 66 EXCL@[80; 81)
64 L_BRACK@[81; 82) 67 TOKEN_TREE@[81; 87)
65 IDENT@[82; 86) "attr" 68 L_BRACK@[81; 82)
66 R_BRACK@[86; 87) 69 IDENT@[82; 86) "attr"
67 WHITESPACE@[87; 92) 70 R_BRACK@[86; 87)
68 MODULE@[92; 98) 71 WHITESPACE@[87; 92)
69 MOD_KW@[92; 95) 72 MODULE@[92; 98)
70 WHITESPACE@[95; 96) 73 MOD_KW@[92; 95)
71 NAME@[96; 97) 74 WHITESPACE@[95; 96)
72 IDENT@[96; 97) "e" 75 NAME@[96; 97)
73 SEMI@[97; 98) 76 IDENT@[96; 97) "e"
74 WHITESPACE@[98; 103) 77 SEMI@[97; 98)
75 MODULE@[103; 116) 78 WHITESPACE@[98; 103)
76 MOD_KW@[103; 106) 79 MODULE@[103; 116)
77 WHITESPACE@[106; 107) 80 MOD_KW@[103; 106)
78 NAME@[107; 108) 81 WHITESPACE@[106; 107)
79 IDENT@[107; 108) "f" 82 NAME@[107; 108)
80 WHITESPACE@[108; 109) 83 IDENT@[107; 108) "f"
81 L_CURLY@[109; 110) 84 WHITESPACE@[108; 109)
82 WHITESPACE@[110; 115) 85 ITEM_LIST@[109; 116)
83 R_CURLY@[115; 116) 86 L_CURLY@[109; 110)
84 WHITESPACE@[116; 117) 87 WHITESPACE@[110; 115)
85 R_CURLY@[117; 118) 88 R_CURLY@[115; 116)
89 WHITESPACE@[116; 117)
90 R_CURLY@[117; 118)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0011_outer_attribute.txt b/crates/libsyntax2/tests/data/parser/ok/0011_outer_attribute.txt
index 24647fb06..af4b55aed 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0011_outer_attribute.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0011_outer_attribute.txt
@@ -26,7 +26,7 @@ FILE@[0; 35)
26 L_PAREN@[29; 30) 26 L_PAREN@[29; 30)
27 R_PAREN@[30; 31) 27 R_PAREN@[30; 31)
28 WHITESPACE@[31; 32) 28 WHITESPACE@[31; 32)
29 BLOCK_EXPR@[32; 34) 29 BLOCK@[32; 34)
30 L_CURLY@[32; 33) 30 L_CURLY@[32; 33)
31 R_CURLY@[33; 34) 31 R_CURLY@[33; 34)
32 WHITESPACE@[34; 35) 32 WHITESPACE@[34; 35)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0012_visibility.txt b/crates/libsyntax2/tests/data/parser/ok/0012_visibility.txt
index 0fa76480a..940721f8b 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0012_visibility.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0012_visibility.txt
@@ -8,7 +8,7 @@ FILE@[0; 98)
8 L_PAREN@[4; 5) 8 L_PAREN@[4; 5)
9 R_PAREN@[5; 6) 9 R_PAREN@[5; 6)
10 WHITESPACE@[6; 7) 10 WHITESPACE@[6; 7)
11 BLOCK_EXPR@[7; 9) 11 BLOCK@[7; 9)
12 L_CURLY@[7; 8) 12 L_CURLY@[7; 8)
13 R_CURLY@[8; 9) 13 R_CURLY@[8; 9)
14 WHITESPACE@[9; 10) 14 WHITESPACE@[9; 10)
@@ -24,7 +24,7 @@ FILE@[0; 98)
24 L_PAREN@[18; 19) 24 L_PAREN@[18; 19)
25 R_PAREN@[19; 20) 25 R_PAREN@[19; 20)
26 WHITESPACE@[20; 21) 26 WHITESPACE@[20; 21)
27 BLOCK_EXPR@[21; 23) 27 BLOCK@[21; 23)
28 L_CURLY@[21; 22) 28 L_CURLY@[21; 22)
29 R_CURLY@[22; 23) 29 R_CURLY@[22; 23)
30 WHITESPACE@[23; 24) 30 WHITESPACE@[23; 24)
@@ -43,7 +43,7 @@ FILE@[0; 98)
43 L_PAREN@[39; 40) 43 L_PAREN@[39; 40)
44 R_PAREN@[40; 41) 44 R_PAREN@[40; 41)
45 WHITESPACE@[41; 42) 45 WHITESPACE@[41; 42)
46 BLOCK_EXPR@[42; 44) 46 BLOCK@[42; 44)
47 L_CURLY@[42; 43) 47 L_CURLY@[42; 43)
48 R_CURLY@[43; 44) 48 R_CURLY@[43; 44)
49 WHITESPACE@[44; 45) 49 WHITESPACE@[44; 45)
@@ -62,7 +62,7 @@ FILE@[0; 98)
62 L_PAREN@[60; 61) 62 L_PAREN@[60; 61)
63 R_PAREN@[61; 62) 63 R_PAREN@[61; 62)
64 WHITESPACE@[62; 63) 64 WHITESPACE@[62; 63)
65 BLOCK_EXPR@[63; 65) 65 BLOCK@[63; 65)
66 L_CURLY@[63; 64) 66 L_CURLY@[63; 64)
67 R_CURLY@[64; 65) 67 R_CURLY@[64; 65)
68 WHITESPACE@[65; 66) 68 WHITESPACE@[65; 66)
@@ -96,7 +96,7 @@ FILE@[0; 98)
96 L_PAREN@[92; 93) 96 L_PAREN@[92; 93)
97 R_PAREN@[93; 94) 97 R_PAREN@[93; 94)
98 WHITESPACE@[94; 95) 98 WHITESPACE@[94; 95)
99 BLOCK_EXPR@[95; 97) 99 BLOCK@[95; 97)
100 L_CURLY@[95; 96) 100 L_CURLY@[95; 96)
101 R_CURLY@[96; 97) 101 R_CURLY@[96; 97)
102 WHITESPACE@[97; 98) 102 WHITESPACE@[97; 98)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0014_use_tree.txt b/crates/libsyntax2/tests/data/parser/ok/0014_use_tree.txt
index 730d5539b..86bafc853 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0014_use_tree.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0014_use_tree.txt
@@ -19,16 +19,18 @@ FILE@[0; 81)
19 WHITESPACE@[19; 20) 19 WHITESPACE@[19; 20)
20 USE_TREE@[20; 24) 20 USE_TREE@[20; 24)
21 COLONCOLON@[20; 22) 21 COLONCOLON@[20; 22)
22 L_CURLY@[22; 23) 22 USE_TREE_LIST@[22; 24)
23 R_CURLY@[23; 24) 23 L_CURLY@[22; 23)
24 R_CURLY@[23; 24)
24 SEMI@[24; 25) 25 SEMI@[24; 25)
25 WHITESPACE@[25; 26) 26 WHITESPACE@[25; 26)
26 USE_ITEM@[26; 33) 27 USE_ITEM@[26; 33)
27 USE_KW@[26; 29) 28 USE_KW@[26; 29)
28 WHITESPACE@[29; 30) 29 WHITESPACE@[29; 30)
29 USE_TREE@[30; 32) 30 USE_TREE@[30; 32)
30 L_CURLY@[30; 31) 31 USE_TREE_LIST@[30; 32)
31 R_CURLY@[31; 32) 32 L_CURLY@[30; 31)
33 R_CURLY@[31; 32)
32 SEMI@[32; 33) 34 SEMI@[32; 33)
33 WHITESPACE@[33; 34) 35 WHITESPACE@[33; 34)
34 USE_ITEM@[34; 45) 36 USE_ITEM@[34; 45)
@@ -52,8 +54,9 @@ FILE@[0; 81)
52 NAME_REF@[50; 53) 54 NAME_REF@[50; 53)
53 IDENT@[50; 53) "foo" 55 IDENT@[50; 53) "foo"
54 COLONCOLON@[53; 55) 56 COLONCOLON@[53; 55)
55 L_CURLY@[55; 56) 57 USE_TREE_LIST@[55; 57)
56 R_CURLY@[56; 57) 58 L_CURLY@[55; 56)
59 R_CURLY@[56; 57)
57 SEMI@[57; 58) 60 SEMI@[57; 58)
58 WHITESPACE@[58; 59) 61 WHITESPACE@[58; 59)
59 USE_ITEM@[59; 80) 62 USE_ITEM@[59; 80)
@@ -66,26 +69,27 @@ FILE@[0; 81)
66 NAME_REF@[65; 68) 69 NAME_REF@[65; 68)
67 IDENT@[65; 68) "foo" 70 IDENT@[65; 68) "foo"
68 COLONCOLON@[68; 70) 71 COLONCOLON@[68; 70)
69 L_CURLY@[70; 71) 72 USE_TREE_LIST@[70; 79)
70 USE_TREE@[71; 72) 73 L_CURLY@[70; 71)
71 PATH@[71; 72) 74 USE_TREE@[71; 72)
72 PATH_SEGMENT@[71; 72) 75 PATH@[71; 72)
73 NAME_REF@[71; 72) 76 PATH_SEGMENT@[71; 72)
74 IDENT@[71; 72) "a" 77 NAME_REF@[71; 72)
75 COMMA@[72; 73) 78 IDENT@[71; 72) "a"
76 WHITESPACE@[73; 74) 79 COMMA@[72; 73)
77 USE_TREE@[74; 75) 80 WHITESPACE@[73; 74)
78 PATH@[74; 75) 81 USE_TREE@[74; 75)
79 PATH_SEGMENT@[74; 75) 82 PATH@[74; 75)
80 NAME_REF@[74; 75) 83 PATH_SEGMENT@[74; 75)
81 IDENT@[74; 75) "b" 84 NAME_REF@[74; 75)
82 COMMA@[75; 76) 85 IDENT@[74; 75) "b"
83 WHITESPACE@[76; 77) 86 COMMA@[75; 76)
84 USE_TREE@[77; 78) 87 WHITESPACE@[76; 77)
85 PATH@[77; 78) 88 USE_TREE@[77; 78)
86 PATH_SEGMENT@[77; 78) 89 PATH@[77; 78)
87 NAME_REF@[77; 78) 90 PATH_SEGMENT@[77; 78)
88 IDENT@[77; 78) "c" 91 NAME_REF@[77; 78)
89 R_CURLY@[78; 79) 92 IDENT@[77; 78) "c"
93 R_CURLY@[78; 79)
90 SEMI@[79; 80) 94 SEMI@[79; 80)
91 WHITESPACE@[80; 81) 95 WHITESPACE@[80; 81)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0015_use_tree.txt b/crates/libsyntax2/tests/data/parser/ok/0015_use_tree.txt
index 4438e417b..2e39766cf 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0015_use_tree.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0015_use_tree.txt
@@ -24,41 +24,42 @@ FILE@[0; 55)
24 NAME_REF@[20; 23) 24 NAME_REF@[20; 23)
25 IDENT@[20; 23) "foo" 25 IDENT@[20; 23) "foo"
26 COLONCOLON@[23; 25) 26 COLONCOLON@[23; 25)
27 L_CURLY@[25; 26) 27 USE_TREE_LIST@[25; 53)
28 USE_TREE@[26; 32) 28 L_CURLY@[25; 26)
29 PATH@[26; 27) 29 USE_TREE@[26; 32)
30 PATH_SEGMENT@[26; 27) 30 PATH@[26; 27)
31 NAME_REF@[26; 27) 31 PATH_SEGMENT@[26; 27)
32 IDENT@[26; 27) "a" 32 NAME_REF@[26; 27)
33 WHITESPACE@[27; 28) 33 IDENT@[26; 27) "a"
34 ALIAS@[28; 32) 34 WHITESPACE@[27; 28)
35 AS_KW@[28; 30) 35 ALIAS@[28; 32)
36 WHITESPACE@[30; 31) 36 AS_KW@[28; 30)
37 NAME@[31; 32) 37 WHITESPACE@[30; 31)
38 IDENT@[31; 32) "b" 38 NAME@[31; 32)
39 COMMA@[32; 33) 39 IDENT@[31; 32) "b"
40 WHITESPACE@[33; 34) 40 COMMA@[32; 33)
41 USE_TREE@[34; 35) 41 WHITESPACE@[33; 34)
42 STAR@[34; 35) 42 USE_TREE@[34; 35)
43 COMMA@[35; 36) 43 STAR@[34; 35)
44 WHITESPACE@[36; 37) 44 COMMA@[35; 36)
45 USE_TREE@[37; 40) 45 WHITESPACE@[36; 37)
46 COLONCOLON@[37; 39) 46 USE_TREE@[37; 40)
47 STAR@[39; 40) 47 COLONCOLON@[37; 39)
48 COMMA@[40; 41) 48 STAR@[39; 40)
49 WHITESPACE@[41; 42) 49 COMMA@[40; 41)
50 USE_TREE@[42; 52) 50 WHITESPACE@[41; 42)
51 PATH@[42; 47) 51 USE_TREE@[42; 52)
52 PATH_SEGMENT@[42; 47) 52 PATH@[42; 47)
53 COLONCOLON@[42; 44) 53 PATH_SEGMENT@[42; 47)
54 NAME_REF@[44; 47) 54 COLONCOLON@[42; 44)
55 IDENT@[44; 47) "foo" 55 NAME_REF@[44; 47)
56 WHITESPACE@[47; 48) 56 IDENT@[44; 47) "foo"
57 ALIAS@[48; 52) 57 WHITESPACE@[47; 48)
58 AS_KW@[48; 50) 58 ALIAS@[48; 52)
59 WHITESPACE@[50; 51) 59 AS_KW@[48; 50)
60 NAME@[51; 52) 60 WHITESPACE@[50; 51)
61 IDENT@[51; 52) "x" 61 NAME@[51; 52)
62 R_CURLY@[52; 53) 62 IDENT@[51; 52) "x"
63 R_CURLY@[52; 53)
63 SEMI@[53; 54) 64 SEMI@[53; 54)
64 WHITESPACE@[54; 55) 65 WHITESPACE@[54; 55)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0016_struct_flavors.txt b/crates/libsyntax2/tests/data/parser/ok/0016_struct_flavors.txt
index fd777673d..5bf3a1794 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0016_struct_flavors.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0016_struct_flavors.txt
@@ -12,16 +12,18 @@ FILE@[0; 97)
12 NAME@[17; 18) 12 NAME@[17; 18)
13 IDENT@[17; 18) "B" 13 IDENT@[17; 18) "B"
14 WHITESPACE@[18; 19) 14 WHITESPACE@[18; 19)
15 L_CURLY@[19; 20) 15 NAMED_FIELD_DEF_LIST@[19; 21)
16 R_CURLY@[20; 21) 16 L_CURLY@[19; 20)
17 R_CURLY@[20; 21)
17 WHITESPACE@[21; 22) 18 WHITESPACE@[21; 22)
18 STRUCT_DEF@[22; 33) 19 STRUCT_DEF@[22; 33)
19 STRUCT_KW@[22; 28) 20 STRUCT_KW@[22; 28)
20 WHITESPACE@[28; 29) 21 WHITESPACE@[28; 29)
21 NAME@[29; 30) 22 NAME@[29; 30)
22 IDENT@[29; 30) "C" 23 IDENT@[29; 30) "C"
23 L_PAREN@[30; 31) 24 POS_FIELD_LIST@[30; 32)
24 R_PAREN@[31; 32) 25 L_PAREN@[30; 31)
26 R_PAREN@[31; 32)
25 SEMI@[32; 33) 27 SEMI@[32; 33)
26 WHITESPACE@[33; 35) 28 WHITESPACE@[33; 35)
27 STRUCT_DEF@[35; 74) 29 STRUCT_DEF@[35; 74)
@@ -30,60 +32,62 @@ FILE@[0; 97)
30 NAME@[42; 43) 32 NAME@[42; 43)
31 IDENT@[42; 43) "D" 33 IDENT@[42; 43) "D"
32 WHITESPACE@[43; 44) 34 WHITESPACE@[43; 44)
33 L_CURLY@[44; 45) 35 NAMED_FIELD_DEF_LIST@[44; 74)
34 WHITESPACE@[45; 50) 36 L_CURLY@[44; 45)
35 NAMED_FIELD@[50; 56) 37 WHITESPACE@[45; 50)
36 NAME@[50; 51) 38 NAMED_FIELD_DEF@[50; 56)
37 IDENT@[50; 51) "a" 39 NAME@[50; 51)
38 COLON@[51; 52) 40 IDENT@[50; 51) "a"
39 WHITESPACE@[52; 53) 41 COLON@[51; 52)
40 PATH_TYPE@[53; 56) 42 WHITESPACE@[52; 53)
41 PATH@[53; 56) 43 PATH_TYPE@[53; 56)
42 PATH_SEGMENT@[53; 56) 44 PATH@[53; 56)
43 NAME_REF@[53; 56) 45 PATH_SEGMENT@[53; 56)
44 IDENT@[53; 56) "u32" 46 NAME_REF@[53; 56)
45 COMMA@[56; 57) 47 IDENT@[53; 56) "u32"
46 WHITESPACE@[57; 62) 48 COMMA@[56; 57)
47 NAMED_FIELD@[62; 72) 49 WHITESPACE@[57; 62)
48 VISIBILITY@[62; 65) 50 NAMED_FIELD_DEF@[62; 72)
49 PUB_KW@[62; 65) 51 VISIBILITY@[62; 65)
50 WHITESPACE@[65; 66) 52 PUB_KW@[62; 65)
51 NAME@[66; 67) 53 WHITESPACE@[65; 66)
52 IDENT@[66; 67) "b" 54 NAME@[66; 67)
53 COLON@[67; 68) 55 IDENT@[66; 67) "b"
54 WHITESPACE@[68; 69) 56 COLON@[67; 68)
55 PATH_TYPE@[69; 72) 57 WHITESPACE@[68; 69)
56 PATH@[69; 72) 58 PATH_TYPE@[69; 72)
57 PATH_SEGMENT@[69; 72) 59 PATH@[69; 72)
58 NAME_REF@[69; 72) 60 PATH_SEGMENT@[69; 72)
59 IDENT@[69; 72) "u32" 61 NAME_REF@[69; 72)
60 WHITESPACE@[72; 73) 62 IDENT@[69; 72) "u32"
61 R_CURLY@[73; 74) 63 WHITESPACE@[72; 73)
64 R_CURLY@[73; 74)
62 WHITESPACE@[74; 76) 65 WHITESPACE@[74; 76)
63 STRUCT_DEF@[76; 96) 66 STRUCT_DEF@[76; 96)
64 STRUCT_KW@[76; 82) 67 STRUCT_KW@[76; 82)
65 WHITESPACE@[82; 83) 68 WHITESPACE@[82; 83)
66 NAME@[83; 84) 69 NAME@[83; 84)
67 IDENT@[83; 84) "E" 70 IDENT@[83; 84) "E"
68 L_PAREN@[84; 85) 71 POS_FIELD_LIST@[84; 95)
69 POS_FIELD@[85; 90) 72 L_PAREN@[84; 85)
70 VISIBILITY@[85; 88) 73 POS_FIELD@[85; 90)
71 PUB_KW@[85; 88) 74 VISIBILITY@[85; 88)
72 WHITESPACE@[88; 89) 75 PUB_KW@[85; 88)
73 PATH_TYPE@[89; 90) 76 WHITESPACE@[88; 89)
74 PATH@[89; 90) 77 PATH_TYPE@[89; 90)
75 PATH_SEGMENT@[89; 90) 78 PATH@[89; 90)
76 NAME_REF@[89; 90) 79 PATH_SEGMENT@[89; 90)
77 IDENT@[89; 90) "x" 80 NAME_REF@[89; 90)
78 COMMA@[90; 91) 81 IDENT@[89; 90) "x"
79 WHITESPACE@[91; 92) 82 COMMA@[90; 91)
80 POS_FIELD@[92; 93) 83 WHITESPACE@[91; 92)
81 PATH_TYPE@[92; 93) 84 POS_FIELD@[92; 93)
82 PATH@[92; 93) 85 PATH_TYPE@[92; 93)
83 PATH_SEGMENT@[92; 93) 86 PATH@[92; 93)
84 NAME_REF@[92; 93) 87 PATH_SEGMENT@[92; 93)
85 IDENT@[92; 93) "y" 88 NAME_REF@[92; 93)
86 COMMA@[93; 94) 89 IDENT@[92; 93) "y"
87 R_PAREN@[94; 95) 90 COMMA@[93; 94)
91 R_PAREN@[94; 95)
88 SEMI@[95; 96) 92 SEMI@[95; 96)
89 WHITESPACE@[96; 97) 93 WHITESPACE@[96; 97)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0017_attr_trailing_comma.txt b/crates/libsyntax2/tests/data/parser/ok/0017_attr_trailing_comma.txt
index 6acd842c6..02e64c0d5 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0017_attr_trailing_comma.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0017_attr_trailing_comma.txt
@@ -20,7 +20,7 @@ FILE@[0; 23)
20 L_PAREN@[17; 18) 20 L_PAREN@[17; 18)
21 R_PAREN@[18; 19) 21 R_PAREN@[18; 19)
22 WHITESPACE@[19; 20) 22 WHITESPACE@[19; 20)
23 BLOCK_EXPR@[20; 22) 23 BLOCK@[20; 22)
24 L_CURLY@[20; 21) 24 L_CURLY@[20; 21)
25 R_CURLY@[21; 22) 25 R_CURLY@[21; 22)
26 WHITESPACE@[22; 23) 26 WHITESPACE@[22; 23)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0018_struct_type_params.txt b/crates/libsyntax2/tests/data/parser/ok/0018_struct_type_params.txt
index 64aaa7599..fb61096f6 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0018_struct_type_params.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0018_struct_type_params.txt
@@ -23,14 +23,15 @@ FILE@[0; 290)
23 NAME@[24; 25) 23 NAME@[24; 25)
24 IDENT@[24; 25) "T" 24 IDENT@[24; 25) "T"
25 R_ANGLE@[25; 26) 25 R_ANGLE@[25; 26)
26 L_PAREN@[26; 27) 26 POS_FIELD_LIST@[26; 31)
27 POS_FIELD@[27; 30) 27 L_PAREN@[26; 27)
28 PATH_TYPE@[27; 30) 28 POS_FIELD@[27; 30)
29 PATH@[27; 30) 29 PATH_TYPE@[27; 30)
30 PATH_SEGMENT@[27; 30) 30 PATH@[27; 30)
31 NAME_REF@[27; 30) 31 PATH_SEGMENT@[27; 30)
32 IDENT@[27; 30) "u32" 32 NAME_REF@[27; 30)
33 R_PAREN@[30; 31) 33 IDENT@[27; 30) "u32"
34 R_PAREN@[30; 31)
34 SEMI@[31; 32) 35 SEMI@[31; 32)
35 WHITESPACE@[32; 33) 36 WHITESPACE@[32; 33)
36 STRUCT_DEF@[33; 56) 37 STRUCT_DEF@[33; 56)
@@ -45,20 +46,21 @@ FILE@[0; 290)
45 IDENT@[43; 44) "T" 46 IDENT@[43; 44) "T"
46 R_ANGLE@[44; 45) 47 R_ANGLE@[44; 45)
47 WHITESPACE@[45; 46) 48 WHITESPACE@[45; 46)
48 L_CURLY@[46; 47) 49 NAMED_FIELD_DEF_LIST@[46; 56)
49 WHITESPACE@[47; 48) 50 L_CURLY@[46; 47)
50 NAMED_FIELD@[48; 54) 51 WHITESPACE@[47; 48)
51 NAME@[48; 49) 52 NAMED_FIELD_DEF@[48; 54)
52 IDENT@[48; 49) "u" 53 NAME@[48; 49)
53 COLON@[49; 50) 54 IDENT@[48; 49) "u"
54 WHITESPACE@[50; 51) 55 COLON@[49; 50)
55 PATH_TYPE@[51; 54) 56 WHITESPACE@[50; 51)
56 PATH@[51; 54) 57 PATH_TYPE@[51; 54)
57 PATH_SEGMENT@[51; 54) 58 PATH@[51; 54)
58 NAME_REF@[51; 54) 59 PATH_SEGMENT@[51; 54)
59 IDENT@[51; 54) "u32" 60 NAME_REF@[51; 54)
60 WHITESPACE@[54; 55) 61 IDENT@[51; 54) "u32"
61 R_CURLY@[55; 56) 62 WHITESPACE@[54; 55)
63 R_CURLY@[55; 56)
62 WHITESPACE@[56; 58) 64 WHITESPACE@[56; 58)
63 STRUCT_DEF@[58; 70) 65 STRUCT_DEF@[58; 70)
64 STRUCT_KW@[58; 64) 66 STRUCT_KW@[58; 64)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0019_enums.txt b/crates/libsyntax2/tests/data/parser/ok/0019_enums.txt
index f6f653615..0eca75cd8 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0019_enums.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0019_enums.txt
@@ -5,9 +5,10 @@ FILE@[0; 182)
5 NAME@[5; 7) 5 NAME@[5; 7)
6 IDENT@[5; 7) "E1" 6 IDENT@[5; 7) "E1"
7 WHITESPACE@[7; 8) 7 WHITESPACE@[7; 8)
8 L_CURLY@[8; 9) 8 ENUM_VARIANT_LIST@[8; 11)
9 WHITESPACE@[9; 10) 9 L_CURLY@[8; 9)
10 R_CURLY@[10; 11) 10 WHITESPACE@[9; 10)
11 R_CURLY@[10; 11)
11 WHITESPACE@[11; 13) 12 WHITESPACE@[11; 13)
12 ENUM_DEF@[13; 27) 13 ENUM_DEF@[13; 27)
13 ENUM_KW@[13; 17) 14 ENUM_KW@[13; 17)
@@ -21,9 +22,10 @@ FILE@[0; 182)
21 IDENT@[21; 22) "T" 22 IDENT@[21; 22) "T"
22 R_ANGLE@[22; 23) 23 R_ANGLE@[22; 23)
23 WHITESPACE@[23; 24) 24 WHITESPACE@[23; 24)
24 L_CURLY@[24; 25) 25 ENUM_VARIANT_LIST@[24; 27)
25 WHITESPACE@[25; 26) 26 L_CURLY@[24; 25)
26 R_CURLY@[26; 27) 27 WHITESPACE@[25; 26)
28 R_CURLY@[26; 27)
27 WHITESPACE@[27; 29) 29 WHITESPACE@[27; 29)
28 ENUM_DEF@[29; 46) 30 ENUM_DEF@[29; 46)
29 ENUM_KW@[29; 33) 31 ENUM_KW@[29; 33)
@@ -31,13 +33,14 @@ FILE@[0; 182)
31 NAME@[34; 36) 33 NAME@[34; 36)
32 IDENT@[34; 36) "E3" 34 IDENT@[34; 36) "E3"
33 WHITESPACE@[36; 37) 35 WHITESPACE@[36; 37)
34 L_CURLY@[37; 38) 36 ENUM_VARIANT_LIST@[37; 46)
35 WHITESPACE@[38; 43) 37 L_CURLY@[37; 38)
36 ENUM_VARIANT@[43; 44) 38 WHITESPACE@[38; 43)
37 NAME@[43; 44) 39 ENUM_VARIANT@[43; 44)
38 IDENT@[43; 44) "X" 40 NAME@[43; 44)
39 WHITESPACE@[44; 45) 41 IDENT@[43; 44) "X"
40 R_CURLY@[45; 46) 42 WHITESPACE@[44; 45)
43 R_CURLY@[45; 46)
41 WHITESPACE@[46; 48) 44 WHITESPACE@[46; 48)
42 ENUM_DEF@[48; 66) 45 ENUM_DEF@[48; 66)
43 ENUM_KW@[48; 52) 46 ENUM_KW@[48; 52)
@@ -45,14 +48,15 @@ FILE@[0; 182)
45 NAME@[53; 55) 48 NAME@[53; 55)
46 IDENT@[53; 55) "E4" 49 IDENT@[53; 55) "E4"
47 WHITESPACE@[55; 56) 50 WHITESPACE@[55; 56)
48 L_CURLY@[56; 57) 51 ENUM_VARIANT_LIST@[56; 66)
49 WHITESPACE@[57; 62) 52 L_CURLY@[56; 57)
50 ENUM_VARIANT@[62; 63) 53 WHITESPACE@[57; 62)
51 NAME@[62; 63) 54 ENUM_VARIANT@[62; 63)
52 IDENT@[62; 63) "X" 55 NAME@[62; 63)
53 COMMA@[63; 64) 56 IDENT@[62; 63) "X"
54 WHITESPACE@[64; 65) 57 COMMA@[63; 64)
55 R_CURLY@[65; 66) 58 WHITESPACE@[64; 65)
59 R_CURLY@[65; 66)
56 WHITESPACE@[66; 68) 60 WHITESPACE@[66; 68)
57 ENUM_DEF@[68; 181) 61 ENUM_DEF@[68; 181)
58 ENUM_KW@[68; 72) 62 ENUM_KW@[68; 72)
@@ -60,87 +64,92 @@ FILE@[0; 182)
60 NAME@[73; 75) 64 NAME@[73; 75)
61 IDENT@[73; 75) "E5" 65 IDENT@[73; 75) "E5"
62 WHITESPACE@[75; 76) 66 WHITESPACE@[75; 76)
63 L_CURLY@[76; 77) 67 ENUM_VARIANT_LIST@[76; 181)
64 WHITESPACE@[77; 82) 68 L_CURLY@[76; 77)
65 ENUM_VARIANT@[82; 83) 69 WHITESPACE@[77; 82)
66 NAME@[82; 83) 70 ENUM_VARIANT@[82; 83)
67 IDENT@[82; 83) "A" 71 NAME@[82; 83)
68 COMMA@[83; 84) 72 IDENT@[82; 83) "A"
69 WHITESPACE@[84; 89) 73 COMMA@[83; 84)
70 ENUM_VARIANT@[89; 95) 74 WHITESPACE@[84; 89)
71 NAME@[89; 90) 75 ENUM_VARIANT@[89; 95)
72 IDENT@[89; 90) "B" 76 NAME@[89; 90)
73 WHITESPACE@[90; 91) 77 IDENT@[89; 90) "B"
74 EQ@[91; 92) 78 WHITESPACE@[90; 91)
75 WHITESPACE@[92; 93) 79 EQ@[91; 92)
76 LITERAL@[93; 95) 80 WHITESPACE@[92; 93)
77 INT_NUMBER@[93; 95) "92" 81 LITERAL@[93; 95)
78 COMMA@[95; 96) 82 INT_NUMBER@[93; 95) "92"
79 WHITESPACE@[96; 101) 83 COMMA@[95; 96)
80 ENUM_VARIANT@[101; 146) 84 WHITESPACE@[96; 101)
81 NAME@[101; 102) 85 ENUM_VARIANT@[101; 146)
82 IDENT@[101; 102) "C" 86 NAME@[101; 102)
83 WHITESPACE@[102; 103) 87 IDENT@[101; 102) "C"
84 L_CURLY@[103; 104) 88 WHITESPACE@[102; 103)
85 WHITESPACE@[104; 113) 89 NAMED_FIELD_DEF_LIST@[103; 146)
86 NAMED_FIELD@[113; 119) 90 L_CURLY@[103; 104)
87 NAME@[113; 114) 91 WHITESPACE@[104; 113)
88 IDENT@[113; 114) "a" 92 NAMED_FIELD_DEF@[113; 119)
89 COLON@[114; 115) 93 NAME@[113; 114)
90 WHITESPACE@[115; 116) 94 IDENT@[113; 114) "a"
91 PATH_TYPE@[116; 119) 95 COLON@[114; 115)
92 PATH@[116; 119) 96 WHITESPACE@[115; 116)
93 PATH_SEGMENT@[116; 119) 97 PATH_TYPE@[116; 119)
94 NAME_REF@[116; 119) 98 PATH@[116; 119)
95 IDENT@[116; 119) "u32" 99 PATH_SEGMENT@[116; 119)
96 COMMA@[119; 120) 100 NAME_REF@[116; 119)
97 WHITESPACE@[120; 129) 101 IDENT@[116; 119) "u32"
98 NAMED_FIELD@[129; 139) 102 COMMA@[119; 120)
99 VISIBILITY@[129; 132) 103 WHITESPACE@[120; 129)
100 PUB_KW@[129; 132) 104 NAMED_FIELD_DEF@[129; 139)
101 WHITESPACE@[132; 133) 105 VISIBILITY@[129; 132)
102 NAME@[133; 134) 106 PUB_KW@[129; 132)
103 IDENT@[133; 134) "b" 107 WHITESPACE@[132; 133)
104 COLON@[134; 135) 108 NAME@[133; 134)
105 WHITESPACE@[135; 136) 109 IDENT@[133; 134) "b"
106 PATH_TYPE@[136; 139) 110 COLON@[134; 135)
107 PATH@[136; 139) 111 WHITESPACE@[135; 136)
108 PATH_SEGMENT@[136; 139) 112 PATH_TYPE@[136; 139)
109 NAME_REF@[136; 139) 113 PATH@[136; 139)
110 IDENT@[136; 139) "f64" 114 PATH_SEGMENT@[136; 139)
111 COMMA@[139; 140) 115 NAME_REF@[136; 139)
112 WHITESPACE@[140; 145) 116 IDENT@[136; 139) "f64"
113 R_CURLY@[145; 146) 117 COMMA@[139; 140)
114 COMMA@[146; 147) 118 WHITESPACE@[140; 145)
115 WHITESPACE@[147; 152) 119 R_CURLY@[145; 146)
116 ENUM_VARIANT@[152; 156) 120 COMMA@[146; 147)
117 NAME@[152; 153) 121 WHITESPACE@[147; 152)
118 IDENT@[152; 153) "F" 122 ENUM_VARIANT@[152; 156)
119 WHITESPACE@[153; 154) 123 NAME@[152; 153)
120 L_CURLY@[154; 155) 124 IDENT@[152; 153) "F"
121 R_CURLY@[155; 156) 125 WHITESPACE@[153; 154)
122 COMMA@[156; 157) 126 NAMED_FIELD_DEF_LIST@[154; 156)
123 WHITESPACE@[157; 162) 127 L_CURLY@[154; 155)
124 ENUM_VARIANT@[162; 169) 128 R_CURLY@[155; 156)
125 NAME@[162; 163) 129 COMMA@[156; 157)
126 IDENT@[162; 163) "D" 130 WHITESPACE@[157; 162)
127 L_PAREN@[163; 164) 131 ENUM_VARIANT@[162; 169)
128 POS_FIELD@[164; 167) 132 NAME@[162; 163)
129 PATH_TYPE@[164; 167) 133 IDENT@[162; 163) "D"
130 PATH@[164; 167) 134 POS_FIELD_LIST@[163; 169)
131 PATH_SEGMENT@[164; 167) 135 L_PAREN@[163; 164)
132 NAME_REF@[164; 167) 136 POS_FIELD@[164; 167)
133 IDENT@[164; 167) "u32" 137 PATH_TYPE@[164; 167)
134 COMMA@[167; 168) 138 PATH@[164; 167)
135 R_PAREN@[168; 169) 139 PATH_SEGMENT@[164; 167)
136 COMMA@[169; 170) 140 NAME_REF@[164; 167)
137 WHITESPACE@[170; 175) 141 IDENT@[164; 167) "u32"
138 ENUM_VARIANT@[175; 178) 142 COMMA@[167; 168)
139 NAME@[175; 176) 143 R_PAREN@[168; 169)
140 IDENT@[175; 176) "E" 144 COMMA@[169; 170)
141 L_PAREN@[176; 177) 145 WHITESPACE@[170; 175)
142 R_PAREN@[177; 178) 146 ENUM_VARIANT@[175; 178)
143 COMMA@[178; 179) 147 NAME@[175; 176)
144 WHITESPACE@[179; 180) 148 IDENT@[175; 176) "E"
145 R_CURLY@[180; 181) 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)
146 WHITESPACE@[181; 182) 155 WHITESPACE@[181; 182)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0021_extern_fn.txt b/crates/libsyntax2/tests/data/parser/ok/0021_extern_fn.txt
index 3a153c358..c3f377857 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0021_extern_fn.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0021_extern_fn.txt
@@ -11,7 +11,7 @@ FILE@[0; 71)
11 L_PAREN@[13; 14) 11 L_PAREN@[13; 14)
12 R_PAREN@[14; 15) 12 R_PAREN@[14; 15)
13 WHITESPACE@[15; 16) 13 WHITESPACE@[15; 16)
14 BLOCK_EXPR@[16; 19) 14 BLOCK@[16; 19)
15 L_CURLY@[16; 17) 15 L_CURLY@[16; 17)
16 WHITESPACE@[17; 18) 16 WHITESPACE@[17; 18)
17 R_CURLY@[18; 19) 17 R_CURLY@[18; 19)
@@ -30,7 +30,7 @@ FILE@[0; 71)
30 L_PAREN@[38; 39) 30 L_PAREN@[38; 39)
31 R_PAREN@[39; 40) 31 R_PAREN@[39; 40)
32 WHITESPACE@[40; 41) 32 WHITESPACE@[40; 41)
33 BLOCK_EXPR@[41; 44) 33 BLOCK@[41; 44)
34 L_CURLY@[41; 42) 34 L_CURLY@[41; 42)
35 WHITESPACE@[42; 43) 35 WHITESPACE@[42; 43)
36 R_CURLY@[43; 44) 36 R_CURLY@[43; 44)
@@ -49,7 +49,7 @@ FILE@[0; 71)
49 L_PAREN@[64; 65) 49 L_PAREN@[64; 65)
50 R_PAREN@[65; 66) 50 R_PAREN@[65; 66)
51 WHITESPACE@[66; 67) 51 WHITESPACE@[66; 67)
52 BLOCK_EXPR@[67; 70) 52 BLOCK@[67; 70)
53 L_CURLY@[67; 68) 53 L_CURLY@[67; 68)
54 WHITESPACE@[68; 69) 54 WHITESPACE@[68; 69)
55 R_CURLY@[69; 70) 55 R_CURLY@[69; 70)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0022_empty_extern_block.txt b/crates/libsyntax2/tests/data/parser/ok/0022_empty_extern_block.txt
index 81b92d394..075055bfe 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0022_empty_extern_block.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0022_empty_extern_block.txt
@@ -1,19 +1,21 @@
1FILE@[0; 27) 1FILE@[0; 27)
2 EXTERN_BLOCK_EXPR@[0; 10) 2 EXTERN_BLOCK@[0; 10)
3 ABI@[0; 6) 3 ABI@[0; 6)
4 EXTERN_KW@[0; 6) 4 EXTERN_KW@[0; 6)
5 WHITESPACE@[6; 7) 5 WHITESPACE@[6; 7)
6 L_CURLY@[7; 8) 6 EXTERN_ITEM_LIST@[7; 10)
7 WHITESPACE@[8; 9) 7 L_CURLY@[7; 8)
8 R_CURLY@[9; 10) 8 WHITESPACE@[8; 9)
9 R_CURLY@[9; 10)
9 WHITESPACE@[10; 12) 10 WHITESPACE@[10; 12)
10 EXTERN_BLOCK_EXPR@[12; 26) 11 EXTERN_BLOCK@[12; 26)
11 ABI@[12; 22) 12 ABI@[12; 22)
12 EXTERN_KW@[12; 18) 13 EXTERN_KW@[12; 18)
13 WHITESPACE@[18; 19) 14 WHITESPACE@[18; 19)
14 STRING@[19; 22) 15 STRING@[19; 22)
15 WHITESPACE@[22; 23) 16 WHITESPACE@[22; 23)
16 L_CURLY@[23; 24) 17 EXTERN_ITEM_LIST@[23; 26)
17 WHITESPACE@[24; 25) 18 L_CURLY@[23; 24)
18 R_CURLY@[25; 26) 19 WHITESPACE@[24; 25)
20 R_CURLY@[25; 26)
19 WHITESPACE@[26; 27) 21 WHITESPACE@[26; 27)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0025_extern_fn_in_block.txt b/crates/libsyntax2/tests/data/parser/ok/0025_extern_fn_in_block.txt
index 82736af91..088c6b54c 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0025_extern_fn_in_block.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0025_extern_fn_in_block.txt
@@ -8,7 +8,7 @@ FILE@[0; 35)
8 L_PAREN@[7; 8) 8 L_PAREN@[7; 8)
9 R_PAREN@[8; 9) 9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10) 10 WHITESPACE@[9; 10)
11 BLOCK_EXPR@[10; 34) 11 BLOCK@[10; 34)
12 L_CURLY@[10; 11) 12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16) 13 WHITESPACE@[11; 16)
14 FN_DEF@[16; 32) 14 FN_DEF@[16; 32)
@@ -23,7 +23,7 @@ FILE@[0; 35)
23 L_PAREN@[27; 28) 23 L_PAREN@[27; 28)
24 R_PAREN@[28; 29) 24 R_PAREN@[28; 29)
25 WHITESPACE@[29; 30) 25 WHITESPACE@[29; 30)
26 BLOCK_EXPR@[30; 32) 26 BLOCK@[30; 32)
27 L_CURLY@[30; 31) 27 L_CURLY@[30; 31)
28 R_CURLY@[31; 32) 28 R_CURLY@[31; 32)
29 WHITESPACE@[32; 33) 29 WHITESPACE@[32; 33)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0026_const_fn_in_block.txt b/crates/libsyntax2/tests/data/parser/ok/0026_const_fn_in_block.txt
index 5e5430680..246ea583f 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0026_const_fn_in_block.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0026_const_fn_in_block.txt
@@ -8,7 +8,7 @@ FILE@[0; 34)
8 L_PAREN@[7; 8) 8 L_PAREN@[7; 8)
9 R_PAREN@[8; 9) 9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10) 10 WHITESPACE@[9; 10)
11 BLOCK_EXPR@[10; 33) 11 BLOCK@[10; 33)
12 L_CURLY@[10; 11) 12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16) 13 WHITESPACE@[11; 16)
14 FN_DEF@[16; 31) 14 FN_DEF@[16; 31)
@@ -22,7 +22,7 @@ FILE@[0; 34)
22 L_PAREN@[26; 27) 22 L_PAREN@[26; 27)
23 R_PAREN@[27; 28) 23 R_PAREN@[27; 28)
24 WHITESPACE@[28; 29) 24 WHITESPACE@[28; 29)
25 BLOCK_EXPR@[29; 31) 25 BLOCK@[29; 31)
26 L_CURLY@[29; 30) 26 L_CURLY@[29; 30)
27 R_CURLY@[30; 31) 27 R_CURLY@[30; 31)
28 WHITESPACE@[31; 32) 28 WHITESPACE@[31; 32)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0027_unsafe_fn_in_block.txt b/crates/libsyntax2/tests/data/parser/ok/0027_unsafe_fn_in_block.txt
index 848df9b9b..03acfd891 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0027_unsafe_fn_in_block.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0027_unsafe_fn_in_block.txt
@@ -8,7 +8,7 @@ FILE@[0; 53)
8 L_PAREN@[7; 8) 8 L_PAREN@[7; 8)
9 R_PAREN@[8; 9) 9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10) 10 WHITESPACE@[9; 10)
11 BLOCK_EXPR@[10; 52) 11 BLOCK@[10; 52)
12 L_CURLY@[10; 11) 12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16) 13 WHITESPACE@[11; 16)
14 FN_DEF@[16; 32) 14 FN_DEF@[16; 32)
@@ -22,19 +22,20 @@ FILE@[0; 53)
22 L_PAREN@[27; 28) 22 L_PAREN@[27; 28)
23 R_PAREN@[28; 29) 23 R_PAREN@[28; 29)
24 WHITESPACE@[29; 30) 24 WHITESPACE@[29; 30)
25 BLOCK_EXPR@[30; 32) 25 BLOCK@[30; 32)
26 L_CURLY@[30; 31) 26 L_CURLY@[30; 31)
27 R_CURLY@[31; 32) 27 R_CURLY@[31; 32)
28 WHITESPACE@[32; 37) 28 WHITESPACE@[32; 37)
29 BLOCK_EXPR@[37; 50) 29 BLOCK_EXPR@[37; 50)
30 UNSAFE_KW@[37; 43) 30 UNSAFE_KW@[37; 43)
31 WHITESPACE@[43; 44) 31 WHITESPACE@[43; 44)
32 L_CURLY@[44; 45) 32 BLOCK@[44; 50)
33 WHITESPACE@[45; 46) 33 L_CURLY@[44; 45)
34 LITERAL@[46; 48) 34 WHITESPACE@[45; 46)
35 INT_NUMBER@[46; 48) "92" 35 LITERAL@[46; 48)
36 WHITESPACE@[48; 49) 36 INT_NUMBER@[46; 48) "92"
37 R_CURLY@[49; 50) 37 WHITESPACE@[48; 49)
38 R_CURLY@[49; 50)
38 WHITESPACE@[50; 51) 39 WHITESPACE@[50; 51)
39 R_CURLY@[51; 52) 40 R_CURLY@[51; 52)
40 WHITESPACE@[52; 53) 41 WHITESPACE@[52; 53)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0028_operator_binding_power.txt b/crates/libsyntax2/tests/data/parser/ok/0028_operator_binding_power.txt
index a446066d3..aa1fa0a81 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0028_operator_binding_power.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0028_operator_binding_power.txt
@@ -8,7 +8,7 @@ FILE@[0; 248)
8 L_PAREN@[16; 17) 8 L_PAREN@[16; 17)
9 R_PAREN@[17; 18) 9 R_PAREN@[17; 18)
10 WHITESPACE@[18; 19) 10 WHITESPACE@[18; 19)
11 BLOCK_EXPR@[19; 247) 11 BLOCK@[19; 247)
12 L_CURLY@[19; 20) 12 L_CURLY@[19; 20)
13 WHITESPACE@[20; 25) 13 WHITESPACE@[20; 25)
14 LET_STMT@[25; 55) 14 LET_STMT@[25; 55)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0029_range_forms.txt b/crates/libsyntax2/tests/data/parser/ok/0029_range_forms.txt
index 619582dfc..28fd89ca4 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0029_range_forms.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0029_range_forms.txt
@@ -8,7 +8,7 @@ FILE@[0; 79)
8 L_PAREN@[6; 7) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK_EXPR@[9; 78) 11 BLOCK@[9; 78)
12 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15) 13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 23) 14 EXPR_STMT@[15; 23)
diff --git a/crates/libsyntax2/tests/data/parser/ok/0030_traits.txt b/crates/libsyntax2/tests/data/parser/ok/0030_traits.txt
index 88282ca1a..ab87864fc 100644
--- a/crates/libsyntax2/tests/data/parser/ok/0030_traits.txt
+++ b/crates/libsyntax2/tests/data/parser/ok/0030_traits.txt
@@ -8,27 +8,28 @@ FILE@[0; 164)
8 NAME@[10; 22) 8 NAME@[10; 22)
9 IDENT@[10; 22) "WriteMessage" 9 IDENT@[10; 22) "WriteMessage"
10 WHITESPACE@[22; 23) 10 WHITESPACE@[22; 23)
11 L_CURLY@[23; 24) 11 ITEM_LIST@[23; 66)
12 WHITESPACE@[24; 29) 12 L_CURLY@[23; 24)
13 FN_DEF@[29; 64) 13 WHITESPACE@[24; 29)
14 FN_KW@[29; 31) 14 FN_DEF@[29; 64)
15 WHITESPACE@[31; 32) 15 FN_KW@[29; 31)
16 NAME@[32; 45) 16 WHITESPACE@[31; 32)
17 IDENT@[32; 45) "write_message" 17 NAME@[32; 45)
18 PARAM_LIST@[45; 63) 18 IDENT@[32; 45) "write_message"
19 L_PAREN@[45; 46) 19 PARAM_LIST@[45; 63)
20 PARAM@[46; 62) 20 L_PAREN@[45; 46)
21 REFERENCE_TYPE@[46; 62) 21 PARAM@[46; 62)
22 AMP@[46; 47) 22 REFERENCE_TYPE@[46; 62)
23 PATH_TYPE@[47; 62) 23 AMP@[46; 47)
24 PATH@[47; 62) 24 PATH_TYPE@[47; 62)
25 PATH_SEGMENT@[47; 62) 25 PATH@[47; 62)
26 NAME_REF@[47; 62) 26 PATH_SEGMENT@[47; 62)
27 IDENT@[47; 62) "FrontendMessage" 27 NAME_REF@[47; 62)
28 R_PAREN@[62; 63) 28 IDENT@[47; 62) "FrontendMessage"
29 SEMI@[63; 64) 29 R_PAREN@[62; 63)
30 WHITESPACE@[64; 65) 30 SEMI@[63; 64)
31 R_CURLY@[65; 66) 31 WHITESPACE@[64; 65)
32 R_CURLY@[65; 66)
32 WHITESPACE@[66; 68) 33 WHITESPACE@[66; 68)
33 TRAIT_DEF@[68; 104) 34 TRAIT_DEF@[68; 104)
34 TRAIT_KW@[68; 73) 35 TRAIT_KW@[68; 73)
@@ -36,19 +37,20 @@ FILE@[0; 164)
36 NAME@[74; 82) 37 NAME@[74; 82)
37 IDENT@[74; 82) "Runnable" 38 IDENT@[74; 82) "Runnable"
38 WHITESPACE@[82; 83) 39 WHITESPACE@[82; 83)
39 L_CURLY@[83; 84) 40 ITEM_LIST@[83; 104)
40 WHITESPACE@[84; 89) 41 L_CURLY@[83; 84)
41 FN_DEF@[89; 102) 42 WHITESPACE@[84; 89)
42 FN_KW@[89; 91) 43 FN_DEF@[89; 102)
43 WHITESPACE@[91; 92) 44 FN_KW@[89; 91)
44 NAME@[92; 99) 45 WHITESPACE@[91; 92)
45 IDENT@[92; 99) "handler" 46 NAME@[92; 99)
46 PARAM_LIST@[99; 101) 47 IDENT@[92; 99) "handler"
47 L_PAREN@[99; 100) 48 PARAM_LIST@[99; 101)
48 R_PAREN@[100; 101) 49 L_PAREN@[99; 100)
49 SEMI@[101; 102) 50 R_PAREN@[100; 101)
50 WHITESPACE@[102; 103) 51 SEMI@[101; 102)
51 R_CURLY@[103; 104) 52 WHITESPACE@[102; 103)
53 R_CURLY@[103; 104)
52 WHITESPACE@[104; 106) 54 WHITESPACE@[104; 106)
53 TRAIT_DEF@[106; 163) 55 TRAIT_DEF@[106; 163)
54 TRAIT_KW@[106; 111) 56 TRAIT_KW@[106; 111)
@@ -56,35 +58,36 @@ FILE@[0; 164)
56 NAME@[112; 125) 58 NAME@[112; 125)
57 IDENT@[112; 125) "TraitWithExpr" 59 IDENT@[112; 125) "TraitWithExpr"
58 WHITESPACE@[125; 126) 60 WHITESPACE@[125; 126)
59 L_CURLY@[126; 127) 61 ITEM_LIST@[126; 163)
60 WHITESPACE@[127; 132) 62 L_CURLY@[126; 127)
61 FN_DEF@[132; 161) 63 WHITESPACE@[127; 132)
62 FN_KW@[132; 134) 64 FN_DEF@[132; 161)
63 WHITESPACE@[134; 135) 65 FN_KW@[132; 134)
64 NAME@[135; 147) 66 WHITESPACE@[134; 135)
65 IDENT@[135; 147) "fn_with_expr" 67 NAME@[135; 147)
66 PARAM_LIST@[147; 160) 68 IDENT@[135; 147) "fn_with_expr"
67 L_PAREN@[147; 148) 69 PARAM_LIST@[147; 160)
68 PARAM@[148; 159) 70 L_PAREN@[147; 148)
69 BIND_PAT@[148; 149) 71 PARAM@[148; 159)
70 NAME@[148; 149) 72 BIND_PAT@[148; 149)
71 IDENT@[148; 149) "x" 73 NAME@[148; 149)
72 COLON@[149; 150) 74 IDENT@[148; 149) "x"
73 WHITESPACE@[150; 151) 75 COLON@[149; 150)
74 ARRAY_TYPE@[151; 159) 76 WHITESPACE@[150; 151)
75 L_BRACK@[151; 152) 77 ARRAY_TYPE@[151; 159)
76 PATH_TYPE@[152; 155) 78 L_BRACK@[151; 152)
77 PATH@[152; 155) 79 PATH_TYPE@[152; 155)
78 PATH_SEGMENT@[152; 155) 80 PATH@[152; 155)
79 NAME_REF@[152; 155) 81 PATH_SEGMENT@[152; 155)
80 IDENT@[152; 155) "i32" 82 NAME_REF@[152; 155)
81 SEMI@[155; 156) 83 IDENT@[152; 155) "i32"
82 WHITESPACE@[156; 157) 84 SEMI@[155; 156)
83 LITERAL@[157; 158) 85 WHITESPACE@[156; 157)
84 INT_NUMBER@[157; 158) "1" 86 LITERAL@[157; 158)
85 R_BRACK@[158; 159) 87 INT_NUMBER@[157; 158) "1"
86 R_PAREN@[159; 160) 88 R_BRACK@[158; 159)
87 SEMI@[160; 161) 89 R_PAREN@[159; 160)
88 WHITESPACE@[161; 162) 90 SEMI@[160; 161)
89 R_CURLY@[162; 163) 91 WHITESPACE@[161; 162)
92 R_CURLY@[162; 163)
90 WHITESPACE@[163; 164) 93 WHITESPACE@[163; 164)