aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors[bot] <bors[bot]@users.noreply.github.com>2018-02-10 11:23:41 +0000
committerbors[bot] <bors[bot]@users.noreply.github.com>2018-02-10 11:23:41 +0000
commitb814d931514cdc250f9156dabd874edf685569d0 (patch)
tree6de85e5e662bc0c6eca78715496a02867da1eff9
parentc3b009b6d24225ad2add62fce8206918fceba3eb (diff)
parent199b3a1604095beee9eaeec541c8f158e85493ea (diff)
Merge #46
46: Names r=matklad a=matklad bors r+
-rw-r--r--grammar.ron2
-rw-r--r--src/parser/grammar/items/consts.rs2
-rw-r--r--src/parser/grammar/items/mod.rs12
-rw-r--r--src/parser/grammar/items/structs.rs9
-rw-r--r--src/parser/grammar/items/traits.rs2
-rw-r--r--src/parser/grammar/mod.rs22
-rw-r--r--src/parser/grammar/paths.rs3
-rw-r--r--src/syntax_kinds.rs4
-rw-r--r--tests/data/parser/err/0000_struct_field_missing_comma.txt15
-rw-r--r--tests/data/parser/err/0001_item_recovery_in_file.txt7
-rw-r--r--tests/data/parser/err/0003_C++_semicolon.txt17
-rw-r--r--tests/data/parser/err/0004_use_path_bad_segment.txt5
-rw-r--r--tests/data/parser/err/0005_attribute_recover.txt10
-rw-r--r--tests/data/parser/err/0006_named_field_recovery.txt22
-rw-r--r--tests/data/parser/err/0007_stray_curly_in_file.txt10
-rw-r--r--tests/data/parser/err/0008_item_block_recovery.txt10
-rw-r--r--tests/data/parser/err/0009_broken_struct_type_parameter.txt10
-rw-r--r--tests/data/parser/inline/0001_const_unsafe_fn.txt5
-rw-r--r--tests/data/parser/inline/0002_const_fn.txt5
-rw-r--r--tests/data/parser/inline/0004_extern_fn.txt5
-rw-r--r--tests/data/parser/inline/0005_extern_crate.txt5
-rw-r--r--tests/data/parser/inline/0006_extern_struct.txt5
-rw-r--r--tests/data/parser/inline/0007_unsafe_trait.txt7
-rw-r--r--tests/data/parser/inline/0009_unsafe_auto_trait.txt7
-rw-r--r--tests/data/parser/inline/0011_unsafe_fn.txt5
-rw-r--r--tests/data/parser/inline/0012_unsafe_extern_fn.txt5
-rw-r--r--tests/data/parser/inline/0013_unsafe_block_in_mod.txt10
-rw-r--r--tests/data/parser/inline/0014_type_item_type_params.txt5
-rw-r--r--tests/data/parser/inline/0015_type_item.txt7
-rw-r--r--tests/data/parser/inline/0016_type_item_where_clause.txt7
-rw-r--r--tests/data/parser/ok/0001_struct_item.txt7
-rw-r--r--tests/data/parser/ok/0002_struct_item_field.txt12
-rw-r--r--tests/data/parser/ok/0005_fn_item.txt5
-rw-r--r--tests/data/parser/ok/0007_extern_crate.txt17
-rw-r--r--tests/data/parser/ok/0008_mod_item.txt50
-rw-r--r--tests/data/parser/ok/0009_use_item.txt8
-rw-r--r--tests/data/parser/ok/0010_use_path_segments.txt20
-rw-r--r--tests/data/parser/ok/0011_outer_attribute.txt5
-rw-r--r--tests/data/parser/ok/0012_visibility.txt36
-rw-r--r--tests/data/parser/ok/0013_use_path_self_super.txt12
-rw-r--r--tests/data/parser/ok/0014_use_tree.txt26
-rw-r--r--tests/data/parser/ok/0015_use_tree.txt37
-rw-r--r--tests/data/parser/ok/0016_struct_flavors.txt37
-rw-r--r--tests/data/parser/ok/0017_attr_trailing_comma.txt5
-rw-r--r--tests/data/parser/ok/0018_struct_type_params.txt80
-rw-r--r--tests/data/parser/ok/0019_enums.txt41
-rw-r--r--tests/data/parser/ok/0020_type_param_bounds.txt72
-rw-r--r--tests/data/parser/ok/0021_extern_fn.txt15
-rw-r--r--tests/data/parser/ok/0023_static_items.txt10
-rw-r--r--tests/data/parser/ok/0024_const_item.txt10
-rw-r--r--tests/testutils/src/lib.rs14
51 files changed, 465 insertions, 294 deletions
diff --git a/grammar.ron b/grammar.ron
index c38bf654d..0130b7b37 100644
--- a/grammar.ron
+++ b/grammar.ron
@@ -118,5 +118,7 @@ Grammar(
118 "LIFETIME_PARAM", 118 "LIFETIME_PARAM",
119 "TYPE_PARAM", 119 "TYPE_PARAM",
120 "ABI", 120 "ABI",
121 "NAME",
122 "NAME_REF",
121 ] 123 ]
122) 124)
diff --git a/src/parser/grammar/items/consts.rs b/src/parser/grammar/items/consts.rs
index c9881d681..8117af706 100644
--- a/src/parser/grammar/items/consts.rs
+++ b/src/parser/grammar/items/consts.rs
@@ -12,7 +12,7 @@ fn const_or_static(p: &mut Parser, kw: SyntaxKind) {
12 assert!(p.at(kw)); 12 assert!(p.at(kw));
13 p.bump(); 13 p.bump();
14 p.eat(MUT_KW); // TODO: validator to forbid const mut 14 p.eat(MUT_KW); // TODO: validator to forbid const mut
15 p.expect(IDENT); 15 name(p);
16 p.expect(COLON); 16 p.expect(COLON);
17 types::type_ref(p); 17 types::type_ref(p);
18 p.expect(EQ); 18 p.expect(EQ);
diff --git a/src/parser/grammar/items/mod.rs b/src/parser/grammar/items/mod.rs
index ffe86fa97..8bb821fb6 100644
--- a/src/parser/grammar/items/mod.rs
+++ b/src/parser/grammar/items/mod.rs
@@ -196,8 +196,9 @@ fn extern_crate_item(p: &mut Parser) {
196 p.bump(); 196 p.bump();
197 assert!(p.at(CRATE_KW)); 197 assert!(p.at(CRATE_KW));
198 p.bump(); 198 p.bump();
199 199 name(p);
200 p.expect(IDENT) && alias(p) && p.expect(SEMI); 200 alias(p);
201 p.expect(SEMI);
201} 202}
202 203
203fn extern_block(p: &mut Parser) { 204fn extern_block(p: &mut Parser) {
@@ -210,7 +211,7 @@ fn fn_item(p: &mut Parser) {
210 assert!(p.at(FN_KW)); 211 assert!(p.at(FN_KW));
211 p.bump(); 212 p.bump();
212 213
213 p.expect(IDENT); 214 name(p);
214 if p.at(L_PAREN) { 215 if p.at(L_PAREN) {
215 fn_value_parameters(p); 216 fn_value_parameters(p);
216 } else { 217 } else {
@@ -235,7 +236,7 @@ fn type_item(p: &mut Parser) {
235 assert!(p.at(TYPE_KW)); 236 assert!(p.at(TYPE_KW));
236 p.bump(); 237 p.bump();
237 238
238 p.expect(IDENT); 239 name(p);
239 240
240 // test type_item_type_params 241 // test type_item_type_params
241 // type Result<T> = (); 242 // type Result<T> = ();
@@ -254,7 +255,8 @@ fn mod_item(p: &mut Parser) {
254 assert!(p.at(MOD_KW)); 255 assert!(p.at(MOD_KW));
255 p.bump(); 256 p.bump();
256 257
257 if p.expect(IDENT) && !p.eat(SEMI) { 258 name(p);
259 if !p.eat(SEMI) {
258 if p.expect(L_CURLY) { 260 if p.expect(L_CURLY) {
259 mod_contents(p, true); 261 mod_contents(p, true);
260 p.expect(R_CURLY); 262 p.expect(R_CURLY);
diff --git a/src/parser/grammar/items/structs.rs b/src/parser/grammar/items/structs.rs
index 640b940e4..eca0d2e64 100644
--- a/src/parser/grammar/items/structs.rs
+++ b/src/parser/grammar/items/structs.rs
@@ -4,9 +4,7 @@ pub(super) fn struct_item(p: &mut Parser) {
4 assert!(p.at(STRUCT_KW)); 4 assert!(p.at(STRUCT_KW));
5 p.bump(); 5 p.bump();
6 6
7 if !p.expect(IDENT) { 7 name(p);
8 return;
9 }
10 type_params::list(p); 8 type_params::list(p);
11 match p.current() { 9 match p.current() {
12 WHERE_KW => { 10 WHERE_KW => {
@@ -43,7 +41,7 @@ pub(super) fn struct_item(p: &mut Parser) {
43pub(super) fn enum_item(p: &mut Parser) { 41pub(super) fn enum_item(p: &mut Parser) {
44 assert!(p.at(ENUM_KW)); 42 assert!(p.at(ENUM_KW));
45 p.bump(); 43 p.bump();
46 p.expect(IDENT); 44 name(p);
47 type_params::list(p); 45 type_params::list(p);
48 type_params::where_clause(p); 46 type_params::where_clause(p);
49 if p.expect(L_CURLY) { 47 if p.expect(L_CURLY) {
@@ -88,7 +86,8 @@ fn named_fields(p: &mut Parser) {
88 fn named_field(p: &mut Parser) { 86 fn named_field(p: &mut Parser) {
89 let field = p.start(); 87 let field = p.start();
90 visibility(p); 88 visibility(p);
91 if p.expect(IDENT) { 89 if p.at(IDENT) {
90 name(p);
92 p.expect(COLON); 91 p.expect(COLON);
93 types::type_ref(p); 92 types::type_ref(p);
94 field.complete(p, NAMED_FIELD); 93 field.complete(p, NAMED_FIELD);
diff --git a/src/parser/grammar/items/traits.rs b/src/parser/grammar/items/traits.rs
index 3bef9639f..9961a88fe 100644
--- a/src/parser/grammar/items/traits.rs
+++ b/src/parser/grammar/items/traits.rs
@@ -3,7 +3,7 @@ use super::*;
3pub(super) fn trait_item(p: &mut Parser) { 3pub(super) fn trait_item(p: &mut Parser) {
4 assert!(p.at(TRAIT_KW)); 4 assert!(p.at(TRAIT_KW));
5 p.bump(); 5 p.bump();
6 p.expect(IDENT); 6 name(p);
7 p.expect(L_CURLY); 7 p.expect(L_CURLY);
8 p.expect(R_CURLY); 8 p.expect(R_CURLY);
9} 9}
diff --git a/src/parser/grammar/mod.rs b/src/parser/grammar/mod.rs
index b949583ff..abf9fe86c 100644
--- a/src/parser/grammar/mod.rs
+++ b/src/parser/grammar/mod.rs
@@ -44,12 +44,32 @@ fn alias(p: &mut Parser) -> bool {
44 if p.at(AS_KW) { 44 if p.at(AS_KW) {
45 let alias = p.start(); 45 let alias = p.start();
46 p.bump(); 46 p.bump();
47 p.expect(IDENT); 47 name(p);
48 alias.complete(p, ALIAS); 48 alias.complete(p, ALIAS);
49 } 49 }
50 true //FIXME: return false if three are errors 50 true //FIXME: return false if three are errors
51} 51}
52 52
53fn name(p: &mut Parser) {
54 if p.at(IDENT) {
55 let m = p.start();
56 p.bump();
57 m.complete(p, NAME);
58 } else {
59 p.error("expected a name");
60 }
61}
62
63fn name_ref(p: &mut Parser) {
64 if p.at(IDENT) {
65 let m = p.start();
66 p.bump();
67 m.complete(p, NAME_REF);
68 } else {
69 p.error("expected identifier");
70 }
71}
72
53fn error_block(p: &mut Parser, message: &str) { 73fn error_block(p: &mut Parser, message: &str) {
54 assert!(p.at(L_CURLY)); 74 assert!(p.at(L_CURLY));
55 let err = p.start(); 75 let err = p.start();
diff --git a/src/parser/grammar/paths.rs b/src/parser/grammar/paths.rs
index a7fc90774..6ed315c3d 100644
--- a/src/parser/grammar/paths.rs
+++ b/src/parser/grammar/paths.rs
@@ -42,7 +42,8 @@ fn path_segment(p: &mut Parser, first: bool) {
42 p.eat(COLONCOLON); 42 p.eat(COLONCOLON);
43 } 43 }
44 match p.current() { 44 match p.current() {
45 IDENT | SELF_KW | SUPER_KW => p.bump(), 45 IDENT => name_ref(p),
46 SELF_KW | SUPER_KW => p.bump(),
46 _ => { 47 _ => {
47 p.error("expected identifier"); 48 p.error("expected identifier");
48 } 49 }
diff --git a/src/syntax_kinds.rs b/src/syntax_kinds.rs
index dc287f0f4..7450f9d6f 100644
--- a/src/syntax_kinds.rs
+++ b/src/syntax_kinds.rs
@@ -116,6 +116,8 @@ pub enum SyntaxKind {
116 LIFETIME_PARAM, 116 LIFETIME_PARAM,
117 TYPE_PARAM, 117 TYPE_PARAM,
118 ABI, 118 ABI,
119 NAME,
120 NAME_REF,
119 121
120 // Technical SyntaxKinds: they appear temporally during parsing, 122 // Technical SyntaxKinds: they appear temporally during parsing,
121 // but never end up in the final tree 123 // but never end up in the final tree
@@ -239,6 +241,8 @@ impl SyntaxKind {
239 LIFETIME_PARAM => &SyntaxInfo { name: "LIFETIME_PARAM" }, 241 LIFETIME_PARAM => &SyntaxInfo { name: "LIFETIME_PARAM" },
240 TYPE_PARAM => &SyntaxInfo { name: "TYPE_PARAM" }, 242 TYPE_PARAM => &SyntaxInfo { name: "TYPE_PARAM" },
241 ABI => &SyntaxInfo { name: "ABI" }, 243 ABI => &SyntaxInfo { name: "ABI" },
244 NAME => &SyntaxInfo { name: "NAME" },
245 NAME_REF => &SyntaxInfo { name: "NAME_REF" },
242 246
243 TOMBSTONE => &SyntaxInfo { name: "TOMBSTONE" }, 247 TOMBSTONE => &SyntaxInfo { name: "TOMBSTONE" },
244 EOF => &SyntaxInfo { name: "EOF" }, 248 EOF => &SyntaxInfo { name: "EOF" },
diff --git a/tests/data/parser/err/0000_struct_field_missing_comma.txt b/tests/data/parser/err/0000_struct_field_missing_comma.txt
index d94b4fd9e..f1c772b8d 100644
--- a/tests/data/parser/err/0000_struct_field_missing_comma.txt
+++ b/tests/data/parser/err/0000_struct_field_missing_comma.txt
@@ -1,20 +1,23 @@
1FILE@[0; 34) 1FILE@[0; 34)
2 STRUCT_ITEM@[0; 34) 2 STRUCT_ITEM@[0; 34)
3 STRUCT_KW@[0; 6) 3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7) 4 NAME@[6; 9)
5 IDENT@[7; 8) "S" 5 WHITESPACE@[6; 7)
6 WHITESPACE@[8; 9) 6 IDENT@[7; 8) "S"
7 WHITESPACE@[8; 9)
7 L_CURLY@[9; 10) 8 L_CURLY@[9; 10)
8 NAMED_FIELD@[10; 26) 9 NAMED_FIELD@[10; 26)
9 WHITESPACE@[10; 15) 10 NAME@[10; 16)
10 IDENT@[15; 16) "a" 11 WHITESPACE@[10; 15)
12 IDENT@[15; 16) "a"
11 COLON@[16; 17) 13 COLON@[16; 17)
12 WHITESPACE@[17; 18) 14 WHITESPACE@[17; 18)
13 IDENT@[18; 21) "u32" 15 IDENT@[18; 21) "u32"
14 WHITESPACE@[21; 26) 16 WHITESPACE@[21; 26)
15 err: `expected COMMA` 17 err: `expected COMMA`
16 NAMED_FIELD@[26; 33) 18 NAMED_FIELD@[26; 33)
17 IDENT@[26; 27) "b" 19 NAME@[26; 27)
20 IDENT@[26; 27) "b"
18 COLON@[27; 28) 21 COLON@[27; 28)
19 WHITESPACE@[28; 29) 22 WHITESPACE@[28; 29)
20 IDENT@[29; 32) "u32" 23 IDENT@[29; 32) "u32"
diff --git a/tests/data/parser/err/0001_item_recovery_in_file.txt b/tests/data/parser/err/0001_item_recovery_in_file.txt
index c33113c6d..e41ddc009 100644
--- a/tests/data/parser/err/0001_item_recovery_in_file.txt
+++ b/tests/data/parser/err/0001_item_recovery_in_file.txt
@@ -9,8 +9,9 @@ FILE@[0; 21)
9 WHITESPACE@[8; 10) 9 WHITESPACE@[8; 10)
10 STRUCT_ITEM@[10; 21) 10 STRUCT_ITEM@[10; 21)
11 STRUCT_KW@[10; 16) 11 STRUCT_KW@[10; 16)
12 WHITESPACE@[16; 17) 12 NAME@[16; 19)
13 IDENT@[17; 18) "S" 13 WHITESPACE@[16; 17)
14 WHITESPACE@[18; 19) 14 IDENT@[17; 18) "S"
15 WHITESPACE@[18; 19)
15 L_CURLY@[19; 20) 16 L_CURLY@[19; 20)
16 R_CURLY@[20; 21) 17 R_CURLY@[20; 21)
diff --git a/tests/data/parser/err/0003_C++_semicolon.txt b/tests/data/parser/err/0003_C++_semicolon.txt
index d77c06378..c835a1474 100644
--- a/tests/data/parser/err/0003_C++_semicolon.txt
+++ b/tests/data/parser/err/0003_C++_semicolon.txt
@@ -1,20 +1,23 @@
1FILE@[0; 40) 1FILE@[0; 40)
2 STRUCT_ITEM@[0; 39) 2 STRUCT_ITEM@[0; 39)
3 STRUCT_KW@[0; 6) 3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7) 4 NAME@[6; 9)
5 IDENT@[7; 8) "S" 5 WHITESPACE@[6; 7)
6 WHITESPACE@[8; 9) 6 IDENT@[7; 8) "S"
7 WHITESPACE@[8; 9)
7 L_CURLY@[9; 10) 8 L_CURLY@[9; 10)
8 NAMED_FIELD@[10; 21) 9 NAMED_FIELD@[10; 21)
9 WHITESPACE@[10; 15) 10 NAME@[10; 16)
10 IDENT@[15; 16) "a" 11 WHITESPACE@[10; 15)
12 IDENT@[15; 16) "a"
11 COLON@[16; 17) 13 COLON@[16; 17)
12 WHITESPACE@[17; 18) 14 WHITESPACE@[17; 18)
13 IDENT@[18; 21) "i32" 15 IDENT@[18; 21) "i32"
14 COMMA@[21; 22) 16 COMMA@[21; 22)
15 NAMED_FIELD@[22; 36) 17 NAMED_FIELD@[22; 36)
16 WHITESPACE@[22; 27) 18 NAME@[22; 28)
17 IDENT@[27; 28) "b" 19 WHITESPACE@[22; 27)
20 IDENT@[27; 28) "b"
18 COLON@[28; 29) 21 COLON@[28; 29)
19 WHITESPACE@[29; 30) 22 WHITESPACE@[29; 30)
20 IDENT@[30; 36) "String" 23 IDENT@[30; 36) "String"
diff --git a/tests/data/parser/err/0004_use_path_bad_segment.txt b/tests/data/parser/err/0004_use_path_bad_segment.txt
index 7f43611eb..0a67002ac 100644
--- a/tests/data/parser/err/0004_use_path_bad_segment.txt
+++ b/tests/data/parser/err/0004_use_path_bad_segment.txt
@@ -5,8 +5,9 @@ FILE@[0; 12)
5 PATH@[3; 9) 5 PATH@[3; 9)
6 PATH@[3; 7) 6 PATH@[3; 7)
7 PATH_SEGMENT@[3; 7) 7 PATH_SEGMENT@[3; 7)
8 WHITESPACE@[3; 4) 8 NAME_REF@[3; 7)
9 IDENT@[4; 7) "foo" 9 WHITESPACE@[3; 4)
10 IDENT@[4; 7) "foo"
10 COLONCOLON@[7; 9) 11 COLONCOLON@[7; 9)
11 PATH_SEGMENT@[9; 9) 12 PATH_SEGMENT@[9; 9)
12 err: `expected identifier` 13 err: `expected identifier`
diff --git a/tests/data/parser/err/0005_attribute_recover.txt b/tests/data/parser/err/0005_attribute_recover.txt
index 00a534af1..15e77f63b 100644
--- a/tests/data/parser/err/0005_attribute_recover.txt
+++ b/tests/data/parser/err/0005_attribute_recover.txt
@@ -23,8 +23,9 @@ FILE@[0; 54)
23 R_BRACK@[17; 18) 23 R_BRACK@[17; 18)
24 WHITESPACE@[18; 19) 24 WHITESPACE@[18; 19)
25 FN_KW@[19; 21) 25 FN_KW@[19; 21)
26 WHITESPACE@[21; 22) 26 NAME@[21; 25)
27 IDENT@[22; 25) "foo" 27 WHITESPACE@[21; 22)
28 IDENT@[22; 25) "foo"
28 L_PAREN@[25; 26) 29 L_PAREN@[25; 26)
29 R_PAREN@[26; 27) 30 R_PAREN@[26; 27)
30 WHITESPACE@[27; 28) 31 WHITESPACE@[27; 28)
@@ -43,8 +44,9 @@ FILE@[0; 54)
43 WHITESPACE@[40; 41) 44 WHITESPACE@[40; 41)
44 err: `expected R_BRACK` 45 err: `expected R_BRACK`
45 FN_KW@[41; 43) 46 FN_KW@[41; 43)
46 WHITESPACE@[43; 44) 47 NAME@[43; 47)
47 IDENT@[44; 47) "foo" 48 WHITESPACE@[43; 44)
49 IDENT@[44; 47) "foo"
48 L_PAREN@[47; 48) 50 L_PAREN@[47; 48)
49 R_PAREN@[48; 49) 51 R_PAREN@[48; 49)
50 WHITESPACE@[49; 50) 52 WHITESPACE@[49; 50)
diff --git a/tests/data/parser/err/0006_named_field_recovery.txt b/tests/data/parser/err/0006_named_field_recovery.txt
index 0437bf2e7..b772671e9 100644
--- a/tests/data/parser/err/0006_named_field_recovery.txt
+++ b/tests/data/parser/err/0006_named_field_recovery.txt
@@ -1,13 +1,15 @@
1FILE@[0; 74) 1FILE@[0; 74)
2 STRUCT_ITEM@[0; 74) 2 STRUCT_ITEM@[0; 74)
3 STRUCT_KW@[0; 6) 3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7) 4 NAME@[6; 9)
5 IDENT@[7; 8) "S" 5 WHITESPACE@[6; 7)
6 WHITESPACE@[8; 9) 6 IDENT@[7; 8) "S"
7 WHITESPACE@[8; 9)
7 L_CURLY@[9; 10) 8 L_CURLY@[9; 10)
8 NAMED_FIELD@[10; 21) 9 NAMED_FIELD@[10; 21)
9 WHITESPACE@[10; 15) 10 NAME@[10; 16)
10 IDENT@[15; 16) "f" 11 WHITESPACE@[10; 15)
12 IDENT@[15; 16) "f"
11 COLON@[16; 17) 13 COLON@[16; 17)
12 WHITESPACE@[17; 18) 14 WHITESPACE@[17; 18)
13 IDENT@[18; 21) "u32" 15 IDENT@[18; 21) "u32"
@@ -16,11 +18,11 @@ FILE@[0; 74)
16 WHITESPACE@[22; 27) 18 WHITESPACE@[22; 27)
17 PUB_KW@[27; 30) 19 PUB_KW@[27; 30)
18 WHITESPACE@[30; 31) 20 WHITESPACE@[30; 31)
19 err: `expected IDENT`
20 ERROR@[31; 38) 21 ERROR@[31; 38)
21 err: `expected field declaration` 22 err: `expected field declaration`
22 INT_NUMBER@[31; 33) 23 INT_NUMBER@[31; 33)
23 WHITESPACE@[33; 38) 24 WHITESPACE@[33; 38)
25 err: `expected COMMA`
24 ERROR@[38; 40) 26 ERROR@[38; 40)
25 err: `expected field declaration` 27 err: `expected field declaration`
26 PLUS@[38; 39) 28 PLUS@[38; 39)
@@ -37,14 +39,16 @@ FILE@[0; 74)
37 VISIBILITY@[48; 52) 39 VISIBILITY@[48; 52)
38 PUB_KW@[48; 51) 40 PUB_KW@[48; 51)
39 WHITESPACE@[51; 52) 41 WHITESPACE@[51; 52)
40 IDENT@[52; 53) "x" 42 NAME@[52; 53)
43 IDENT@[52; 53) "x"
41 COLON@[53; 54) 44 COLON@[53; 54)
42 WHITESPACE@[54; 55) 45 WHITESPACE@[54; 55)
43 IDENT@[55; 58) "u32" 46 IDENT@[55; 58) "u32"
44 COMMA@[58; 59) 47 COMMA@[58; 59)
45 NAMED_FIELD@[59; 70) 48 NAMED_FIELD@[59; 70)
46 WHITESPACE@[59; 64) 49 NAME@[59; 65)
47 IDENT@[64; 65) "z" 50 WHITESPACE@[59; 64)
51 IDENT@[64; 65) "z"
48 COLON@[65; 66) 52 COLON@[65; 66)
49 WHITESPACE@[66; 67) 53 WHITESPACE@[66; 67)
50 IDENT@[67; 70) "f64" 54 IDENT@[67; 70) "f64"
diff --git a/tests/data/parser/err/0007_stray_curly_in_file.txt b/tests/data/parser/err/0007_stray_curly_in_file.txt
index b4da4464d..f20807bfe 100644
--- a/tests/data/parser/err/0007_stray_curly_in_file.txt
+++ b/tests/data/parser/err/0007_stray_curly_in_file.txt
@@ -5,8 +5,9 @@ FILE@[0; 31)
5 WHITESPACE@[1; 3) 5 WHITESPACE@[1; 3)
6 STRUCT_ITEM@[3; 14) 6 STRUCT_ITEM@[3; 14)
7 STRUCT_KW@[3; 9) 7 STRUCT_KW@[3; 9)
8 WHITESPACE@[9; 10) 8 NAME@[9; 11)
9 IDENT@[10; 11) "S" 9 WHITESPACE@[9; 10)
10 IDENT@[10; 11) "S"
10 SEMI@[11; 12) 11 SEMI@[11; 12)
11 WHITESPACE@[12; 14) 12 WHITESPACE@[12; 14)
12 ERROR@[14; 17) 13 ERROR@[14; 17)
@@ -15,8 +16,9 @@ FILE@[0; 31)
15 WHITESPACE@[15; 17) 16 WHITESPACE@[15; 17)
16 FN_ITEM@[17; 29) 17 FN_ITEM@[17; 29)
17 FN_KW@[17; 19) 18 FN_KW@[17; 19)
18 WHITESPACE@[19; 20) 19 NAME@[19; 23)
19 IDENT@[20; 23) "foo" 20 WHITESPACE@[19; 20)
21 IDENT@[20; 23) "foo"
20 L_PAREN@[23; 24) 22 L_PAREN@[23; 24)
21 R_PAREN@[24; 25) 23 R_PAREN@[24; 25)
22 L_CURLY@[25; 26) 24 L_CURLY@[25; 26)
diff --git a/tests/data/parser/err/0008_item_block_recovery.txt b/tests/data/parser/err/0008_item_block_recovery.txt
index c6386fd73..ddfb4b4dc 100644
--- a/tests/data/parser/err/0008_item_block_recovery.txt
+++ b/tests/data/parser/err/0008_item_block_recovery.txt
@@ -1,8 +1,9 @@
1FILE@[0; 95) 1FILE@[0; 95)
2 FN_ITEM@[0; 14) 2 FN_ITEM@[0; 14)
3 FN_KW@[0; 2) 3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3) 4 NAME@[2; 6)
5 IDENT@[3; 6) "foo" 5 WHITESPACE@[2; 3)
6 IDENT@[3; 6) "foo"
6 L_PAREN@[6; 7) 7 L_PAREN@[6; 7)
7 R_PAREN@[7; 8) 8 R_PAREN@[7; 8)
8 WHITESPACE@[8; 9) 9 WHITESPACE@[8; 9)
@@ -50,8 +51,9 @@ FILE@[0; 95)
50 WHITESPACE@[80; 82) 51 WHITESPACE@[80; 82)
51 FN_ITEM@[82; 95) 52 FN_ITEM@[82; 95)
52 FN_KW@[82; 84) 53 FN_KW@[82; 84)
53 WHITESPACE@[84; 85) 54 NAME@[84; 88)
54 IDENT@[85; 88) "baz" 55 WHITESPACE@[84; 85)
56 IDENT@[85; 88) "baz"
55 L_PAREN@[88; 89) 57 L_PAREN@[88; 89)
56 R_PAREN@[89; 90) 58 R_PAREN@[89; 90)
57 WHITESPACE@[90; 91) 59 WHITESPACE@[90; 91)
diff --git a/tests/data/parser/err/0009_broken_struct_type_parameter.txt b/tests/data/parser/err/0009_broken_struct_type_parameter.txt
index f329735b6..9434a764a 100644
--- a/tests/data/parser/err/0009_broken_struct_type_parameter.txt
+++ b/tests/data/parser/err/0009_broken_struct_type_parameter.txt
@@ -1,8 +1,9 @@
1FILE@[0; 43) 1FILE@[0; 43)
2 STRUCT_ITEM@[0; 12) 2 STRUCT_ITEM@[0; 12)
3 STRUCT_KW@[0; 6) 3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7) 4 NAME@[6; 8)
5 IDENT@[7; 8) "S" 5 WHITESPACE@[6; 7)
6 IDENT@[7; 8) "S"
6 TYPE_PARAM_LIST@[8; 12) 7 TYPE_PARAM_LIST@[8; 12)
7 L_ANGLE@[8; 9) 8 L_ANGLE@[8; 9)
8 ERROR@[9; 12) 9 ERROR@[9; 12)
@@ -36,7 +37,8 @@ FILE@[0; 43)
36 WHITESPACE@[31; 33) 37 WHITESPACE@[31; 33)
37 STRUCT_ITEM@[33; 43) 38 STRUCT_ITEM@[33; 43)
38 STRUCT_KW@[33; 39) 39 STRUCT_KW@[33; 39)
39 WHITESPACE@[39; 40) 40 NAME@[39; 41)
40 IDENT@[40; 41) "T" 41 WHITESPACE@[39; 40)
42 IDENT@[40; 41) "T"
41 SEMI@[41; 42) 43 SEMI@[41; 42)
42 WHITESPACE@[42; 43) 44 WHITESPACE@[42; 43)
diff --git a/tests/data/parser/inline/0001_const_unsafe_fn.txt b/tests/data/parser/inline/0001_const_unsafe_fn.txt
index 1f0865cb0..59bf89ddb 100644
--- a/tests/data/parser/inline/0001_const_unsafe_fn.txt
+++ b/tests/data/parser/inline/0001_const_unsafe_fn.txt
@@ -5,8 +5,9 @@ FILE@[0; 25)
5 UNSAFE_KW@[6; 12) 5 UNSAFE_KW@[6; 12)
6 WHITESPACE@[12; 13) 6 WHITESPACE@[12; 13)
7 FN_KW@[13; 15) 7 FN_KW@[13; 15)
8 WHITESPACE@[15; 16) 8 NAME@[15; 19)
9 IDENT@[16; 19) "foo" 9 WHITESPACE@[15; 16)
10 IDENT@[16; 19) "foo"
10 L_PAREN@[19; 20) 11 L_PAREN@[19; 20)
11 R_PAREN@[20; 21) 12 R_PAREN@[20; 21)
12 WHITESPACE@[21; 22) 13 WHITESPACE@[21; 22)
diff --git a/tests/data/parser/inline/0002_const_fn.txt b/tests/data/parser/inline/0002_const_fn.txt
index 2d360d78b..2e9d18f7f 100644
--- a/tests/data/parser/inline/0002_const_fn.txt
+++ b/tests/data/parser/inline/0002_const_fn.txt
@@ -3,8 +3,9 @@ FILE@[0; 18)
3 CONST_KW@[0; 5) 3 CONST_KW@[0; 5)
4 WHITESPACE@[5; 6) 4 WHITESPACE@[5; 6)
5 FN_KW@[6; 8) 5 FN_KW@[6; 8)
6 WHITESPACE@[8; 9) 6 NAME@[8; 12)
7 IDENT@[9; 12) "foo" 7 WHITESPACE@[8; 9)
8 IDENT@[9; 12) "foo"
8 L_PAREN@[12; 13) 9 L_PAREN@[12; 13)
9 R_PAREN@[13; 14) 10 R_PAREN@[13; 14)
10 WHITESPACE@[14; 15) 11 WHITESPACE@[14; 15)
diff --git a/tests/data/parser/inline/0004_extern_fn.txt b/tests/data/parser/inline/0004_extern_fn.txt
index 096c3bf4f..70a909ccf 100644
--- a/tests/data/parser/inline/0004_extern_fn.txt
+++ b/tests/data/parser/inline/0004_extern_fn.txt
@@ -4,8 +4,9 @@ FILE@[0; 19)
4 EXTERN_KW@[0; 6) 4 EXTERN_KW@[0; 6)
5 WHITESPACE@[6; 7) 5 WHITESPACE@[6; 7)
6 FN_KW@[7; 9) 6 FN_KW@[7; 9)
7 WHITESPACE@[9; 10) 7 NAME@[9; 13)
8 IDENT@[10; 13) "foo" 8 WHITESPACE@[9; 10)
9 IDENT@[10; 13) "foo"
9 L_PAREN@[13; 14) 10 L_PAREN@[13; 14)
10 R_PAREN@[14; 15) 11 R_PAREN@[14; 15)
11 WHITESPACE@[15; 16) 12 WHITESPACE@[15; 16)
diff --git a/tests/data/parser/inline/0005_extern_crate.txt b/tests/data/parser/inline/0005_extern_crate.txt
index 07cc47875..cbdf5aba1 100644
--- a/tests/data/parser/inline/0005_extern_crate.txt
+++ b/tests/data/parser/inline/0005_extern_crate.txt
@@ -3,7 +3,8 @@ FILE@[0; 18)
3 EXTERN_KW@[0; 6) 3 EXTERN_KW@[0; 6)
4 WHITESPACE@[6; 7) 4 WHITESPACE@[6; 7)
5 CRATE_KW@[7; 12) 5 CRATE_KW@[7; 12)
6 WHITESPACE@[12; 13) 6 NAME@[12; 16)
7 IDENT@[13; 16) "foo" 7 WHITESPACE@[12; 13)
8 IDENT@[13; 16) "foo"
8 SEMI@[16; 17) 9 SEMI@[16; 17)
9 WHITESPACE@[17; 18) 10 WHITESPACE@[17; 18)
diff --git a/tests/data/parser/inline/0006_extern_struct.txt b/tests/data/parser/inline/0006_extern_struct.txt
index 13917d7f3..93a5b0477 100644
--- a/tests/data/parser/inline/0006_extern_struct.txt
+++ b/tests/data/parser/inline/0006_extern_struct.txt
@@ -5,7 +5,8 @@ FILE@[0; 19)
5 err: `expected `fn` or `{`` 5 err: `expected `fn` or `{``
6 STRUCT_ITEM@[7; 19) 6 STRUCT_ITEM@[7; 19)
7 STRUCT_KW@[7; 13) 7 STRUCT_KW@[7; 13)
8 WHITESPACE@[13; 14) 8 NAME@[13; 17)
9 IDENT@[14; 17) "Foo" 9 WHITESPACE@[13; 14)
10 IDENT@[14; 17) "Foo"
10 SEMI@[17; 18) 11 SEMI@[17; 18)
11 WHITESPACE@[18; 19) 12 WHITESPACE@[18; 19)
diff --git a/tests/data/parser/inline/0007_unsafe_trait.txt b/tests/data/parser/inline/0007_unsafe_trait.txt
index d6f6a4cfa..9e2f82587 100644
--- a/tests/data/parser/inline/0007_unsafe_trait.txt
+++ b/tests/data/parser/inline/0007_unsafe_trait.txt
@@ -3,9 +3,10 @@ FILE@[0; 18)
3 UNSAFE_KW@[0; 6) 3 UNSAFE_KW@[0; 6)
4 WHITESPACE@[6; 7) 4 WHITESPACE@[6; 7)
5 TRAIT_KW@[7; 12) 5 TRAIT_KW@[7; 12)
6 WHITESPACE@[12; 13) 6 NAME@[12; 15)
7 IDENT@[13; 14) "T" 7 WHITESPACE@[12; 13)
8 WHITESPACE@[14; 15) 8 IDENT@[13; 14) "T"
9 WHITESPACE@[14; 15)
9 L_CURLY@[15; 16) 10 L_CURLY@[15; 16)
10 R_CURLY@[16; 17) 11 R_CURLY@[16; 17)
11 WHITESPACE@[17; 18) 12 WHITESPACE@[17; 18)
diff --git a/tests/data/parser/inline/0009_unsafe_auto_trait.txt b/tests/data/parser/inline/0009_unsafe_auto_trait.txt
index 0a9a1e117..aa1c99168 100644
--- a/tests/data/parser/inline/0009_unsafe_auto_trait.txt
+++ b/tests/data/parser/inline/0009_unsafe_auto_trait.txt
@@ -5,9 +5,10 @@ FILE@[0; 23)
5 AUTO_KW@[7; 11) 5 AUTO_KW@[7; 11)
6 WHITESPACE@[11; 12) 6 WHITESPACE@[11; 12)
7 TRAIT_KW@[12; 17) 7 TRAIT_KW@[12; 17)
8 WHITESPACE@[17; 18) 8 NAME@[17; 20)
9 IDENT@[18; 19) "T" 9 WHITESPACE@[17; 18)
10 WHITESPACE@[19; 20) 10 IDENT@[18; 19) "T"
11 WHITESPACE@[19; 20)
11 L_CURLY@[20; 21) 12 L_CURLY@[20; 21)
12 R_CURLY@[21; 22) 13 R_CURLY@[21; 22)
13 WHITESPACE@[22; 23) 14 WHITESPACE@[22; 23)
diff --git a/tests/data/parser/inline/0011_unsafe_fn.txt b/tests/data/parser/inline/0011_unsafe_fn.txt
index 23eca1d65..ed790fe22 100644
--- a/tests/data/parser/inline/0011_unsafe_fn.txt
+++ b/tests/data/parser/inline/0011_unsafe_fn.txt
@@ -3,8 +3,9 @@ FILE@[0; 19)
3 UNSAFE_KW@[0; 6) 3 UNSAFE_KW@[0; 6)
4 WHITESPACE@[6; 7) 4 WHITESPACE@[6; 7)
5 FN_KW@[7; 9) 5 FN_KW@[7; 9)
6 WHITESPACE@[9; 10) 6 NAME@[9; 13)
7 IDENT@[10; 13) "foo" 7 WHITESPACE@[9; 10)
8 IDENT@[10; 13) "foo"
8 L_PAREN@[13; 14) 9 L_PAREN@[13; 14)
9 R_PAREN@[14; 15) 10 R_PAREN@[14; 15)
10 WHITESPACE@[15; 16) 11 WHITESPACE@[15; 16)
diff --git a/tests/data/parser/inline/0012_unsafe_extern_fn.txt b/tests/data/parser/inline/0012_unsafe_extern_fn.txt
index 547cb499d..3c8a15d12 100644
--- a/tests/data/parser/inline/0012_unsafe_extern_fn.txt
+++ b/tests/data/parser/inline/0012_unsafe_extern_fn.txt
@@ -8,8 +8,9 @@ FILE@[0; 30)
8 STRING@[14; 17) 8 STRING@[14; 17)
9 WHITESPACE@[17; 18) 9 WHITESPACE@[17; 18)
10 FN_KW@[18; 20) 10 FN_KW@[18; 20)
11 WHITESPACE@[20; 21) 11 NAME@[20; 24)
12 IDENT@[21; 24) "foo" 12 WHITESPACE@[20; 21)
13 IDENT@[21; 24) "foo"
13 L_PAREN@[24; 25) 14 L_PAREN@[24; 25)
14 R_PAREN@[25; 26) 15 R_PAREN@[25; 26)
15 WHITESPACE@[26; 27) 16 WHITESPACE@[26; 27)
diff --git a/tests/data/parser/inline/0013_unsafe_block_in_mod.txt b/tests/data/parser/inline/0013_unsafe_block_in_mod.txt
index 2e319be73..305e3058d 100644
--- a/tests/data/parser/inline/0013_unsafe_block_in_mod.txt
+++ b/tests/data/parser/inline/0013_unsafe_block_in_mod.txt
@@ -1,8 +1,9 @@
1FILE@[0; 33) 1FILE@[0; 33)
2 FN_ITEM@[0; 11) 2 FN_ITEM@[0; 11)
3 FN_KW@[0; 2) 3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3) 4 NAME@[2; 6)
5 IDENT@[3; 6) "foo" 5 WHITESPACE@[2; 3)
6 IDENT@[3; 6) "foo"
6 L_PAREN@[6; 7) 7 L_PAREN@[6; 7)
7 R_PAREN@[7; 8) 8 R_PAREN@[7; 8)
8 L_CURLY@[8; 9) 9 L_CURLY@[8; 9)
@@ -18,8 +19,9 @@ FILE@[0; 33)
18 WHITESPACE@[21; 22) 19 WHITESPACE@[21; 22)
19 FN_ITEM@[22; 33) 20 FN_ITEM@[22; 33)
20 FN_KW@[22; 24) 21 FN_KW@[22; 24)
21 WHITESPACE@[24; 25) 22 NAME@[24; 28)
22 IDENT@[25; 28) "bar" 23 WHITESPACE@[24; 25)
24 IDENT@[25; 28) "bar"
23 L_PAREN@[28; 29) 25 L_PAREN@[28; 29)
24 R_PAREN@[29; 30) 26 R_PAREN@[29; 30)
25 L_CURLY@[30; 31) 27 L_CURLY@[30; 31)
diff --git a/tests/data/parser/inline/0014_type_item_type_params.txt b/tests/data/parser/inline/0014_type_item_type_params.txt
index b0f0f8337..ca32faa42 100644
--- a/tests/data/parser/inline/0014_type_item_type_params.txt
+++ b/tests/data/parser/inline/0014_type_item_type_params.txt
@@ -1,8 +1,9 @@
1FILE@[0; 21) 1FILE@[0; 21)
2 TYPE_ITEM@[0; 21) 2 TYPE_ITEM@[0; 21)
3 TYPE_KW@[0; 4) 3 TYPE_KW@[0; 4)
4 WHITESPACE@[4; 5) 4 NAME@[4; 11)
5 IDENT@[5; 11) "Result" 5 WHITESPACE@[4; 5)
6 IDENT@[5; 11) "Result"
6 TYPE_PARAM_LIST@[11; 15) 7 TYPE_PARAM_LIST@[11; 15)
7 L_ANGLE@[11; 12) 8 L_ANGLE@[11; 12)
8 TYPE_PARAM@[12; 13) 9 TYPE_PARAM@[12; 13)
diff --git a/tests/data/parser/inline/0015_type_item.txt b/tests/data/parser/inline/0015_type_item.txt
index 382d7ece0..3818fe25d 100644
--- a/tests/data/parser/inline/0015_type_item.txt
+++ b/tests/data/parser/inline/0015_type_item.txt
@@ -1,9 +1,10 @@
1FILE@[0; 16) 1FILE@[0; 16)
2 TYPE_ITEM@[0; 16) 2 TYPE_ITEM@[0; 16)
3 TYPE_KW@[0; 4) 3 TYPE_KW@[0; 4)
4 WHITESPACE@[4; 5) 4 NAME@[4; 9)
5 IDENT@[5; 8) "Foo" 5 WHITESPACE@[4; 5)
6 WHITESPACE@[8; 9) 6 IDENT@[5; 8) "Foo"
7 WHITESPACE@[8; 9)
7 EQ@[9; 10) 8 EQ@[9; 10)
8 WHITESPACE@[10; 11) 9 WHITESPACE@[10; 11)
9 IDENT@[11; 14) "Bar" 10 IDENT@[11; 14) "Bar"
diff --git a/tests/data/parser/inline/0016_type_item_where_clause.txt b/tests/data/parser/inline/0016_type_item_where_clause.txt
index ddd335870..12bbc752a 100644
--- a/tests/data/parser/inline/0016_type_item_where_clause.txt
+++ b/tests/data/parser/inline/0016_type_item_where_clause.txt
@@ -1,10 +1,11 @@
1FILE@[0; 31) 1FILE@[0; 31)
2 TYPE_ITEM@[0; 31) 2 TYPE_ITEM@[0; 31)
3 TYPE_KW@[0; 4) 3 TYPE_KW@[0; 4)
4 WHITESPACE@[4; 5) 4 NAME@[4; 9)
5 IDENT@[5; 8) "Foo" 5 WHITESPACE@[4; 5)
6 WHERE_CLAUSE@[8; 25) 6 IDENT@[5; 8) "Foo"
7 WHITESPACE@[8; 9) 7 WHITESPACE@[8; 9)
8 WHERE_CLAUSE@[9; 25)
8 WHERE_KW@[9; 14) 9 WHERE_KW@[9; 14)
9 WHITESPACE@[14; 15) 10 WHITESPACE@[14; 15)
10 IDENT@[15; 18) "Foo" 11 IDENT@[15; 18) "Foo"
diff --git a/tests/data/parser/ok/0001_struct_item.txt b/tests/data/parser/ok/0001_struct_item.txt
index c280a434f..b0195c316 100644
--- a/tests/data/parser/ok/0001_struct_item.txt
+++ b/tests/data/parser/ok/0001_struct_item.txt
@@ -1,9 +1,10 @@
1FILE@[0; 13) 1FILE@[0; 13)
2 STRUCT_ITEM@[0; 13) 2 STRUCT_ITEM@[0; 13)
3 STRUCT_KW@[0; 6) 3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7) 4 NAME@[6; 9)
5 IDENT@[7; 8) "S" 5 WHITESPACE@[6; 7)
6 WHITESPACE@[8; 9) 6 IDENT@[7; 8) "S"
7 WHITESPACE@[8; 9)
7 L_CURLY@[9; 10) 8 L_CURLY@[9; 10)
8 WHITESPACE@[10; 12) 9 WHITESPACE@[10; 12)
9 R_CURLY@[12; 13) 10 R_CURLY@[12; 13)
diff --git a/tests/data/parser/ok/0002_struct_item_field.txt b/tests/data/parser/ok/0002_struct_item_field.txt
index 5a7bfbaec..31d3508db 100644
--- a/tests/data/parser/ok/0002_struct_item_field.txt
+++ b/tests/data/parser/ok/0002_struct_item_field.txt
@@ -1,13 +1,15 @@
1FILE@[0; 25) 1FILE@[0; 25)
2 STRUCT_ITEM@[0; 25) 2 STRUCT_ITEM@[0; 25)
3 STRUCT_KW@[0; 6) 3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7) 4 NAME@[6; 9)
5 IDENT@[7; 8) "S" 5 WHITESPACE@[6; 7)
6 WHITESPACE@[8; 9) 6 IDENT@[7; 8) "S"
7 WHITESPACE@[8; 9)
7 L_CURLY@[9; 10) 8 L_CURLY@[9; 10)
8 NAMED_FIELD@[10; 24) 9 NAMED_FIELD@[10; 24)
9 WHITESPACE@[10; 15) 10 NAME@[10; 18)
10 IDENT@[15; 18) "foo" 11 WHITESPACE@[10; 15)
12 IDENT@[15; 18) "foo"
11 COLON@[18; 19) 13 COLON@[18; 19)
12 WHITESPACE@[19; 20) 14 WHITESPACE@[19; 20)
13 IDENT@[20; 23) "u32" 15 IDENT@[20; 23) "u32"
diff --git a/tests/data/parser/ok/0005_fn_item.txt b/tests/data/parser/ok/0005_fn_item.txt
index 113359351..0324ae3ee 100644
--- a/tests/data/parser/ok/0005_fn_item.txt
+++ b/tests/data/parser/ok/0005_fn_item.txt
@@ -1,8 +1,9 @@
1FILE@[0; 13) 1FILE@[0; 13)
2 FN_ITEM@[0; 13) 2 FN_ITEM@[0; 13)
3 FN_KW@[0; 2) 3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3) 4 NAME@[2; 6)
5 IDENT@[3; 6) "foo" 5 WHITESPACE@[2; 3)
6 IDENT@[3; 6) "foo"
6 L_PAREN@[6; 7) 7 L_PAREN@[6; 7)
7 R_PAREN@[7; 8) 8 R_PAREN@[7; 8)
8 WHITESPACE@[8; 9) 9 WHITESPACE@[8; 9)
diff --git a/tests/data/parser/ok/0007_extern_crate.txt b/tests/data/parser/ok/0007_extern_crate.txt
index aff70131b..33ce2ae65 100644
--- a/tests/data/parser/ok/0007_extern_crate.txt
+++ b/tests/data/parser/ok/0007_extern_crate.txt
@@ -3,20 +3,23 @@ FILE@[0; 43)
3 EXTERN_KW@[0; 6) 3 EXTERN_KW@[0; 6)
4 WHITESPACE@[6; 7) 4 WHITESPACE@[6; 7)
5 CRATE_KW@[7; 12) 5 CRATE_KW@[7; 12)
6 WHITESPACE@[12; 13) 6 NAME@[12; 16)
7 IDENT@[13; 16) "foo" 7 WHITESPACE@[12; 13)
8 IDENT@[13; 16) "foo"
8 SEMI@[16; 17) 9 SEMI@[16; 17)
9 WHITESPACE@[17; 18) 10 WHITESPACE@[17; 18)
10 EXTERN_CRATE_ITEM@[18; 43) 11 EXTERN_CRATE_ITEM@[18; 43)
11 EXTERN_KW@[18; 24) 12 EXTERN_KW@[18; 24)
12 WHITESPACE@[24; 25) 13 WHITESPACE@[24; 25)
13 CRATE_KW@[25; 30) 14 CRATE_KW@[25; 30)
14 WHITESPACE@[30; 31) 15 NAME@[30; 35)
15 IDENT@[31; 34) "foo" 16 WHITESPACE@[30; 31)
16 ALIAS@[34; 41) 17 IDENT@[31; 34) "foo"
17 WHITESPACE@[34; 35) 18 WHITESPACE@[34; 35)
19 ALIAS@[35; 41)
18 AS_KW@[35; 37) 20 AS_KW@[35; 37)
19 WHITESPACE@[37; 38) 21 NAME@[37; 41)
20 IDENT@[38; 41) "bar" 22 WHITESPACE@[37; 38)
23 IDENT@[38; 41) "bar"
21 SEMI@[41; 42) 24 SEMI@[41; 42)
22 WHITESPACE@[42; 43) 25 WHITESPACE@[42; 43)
diff --git a/tests/data/parser/ok/0008_mod_item.txt b/tests/data/parser/ok/0008_mod_item.txt
index 06e11807d..20321051c 100644
--- a/tests/data/parser/ok/0008_mod_item.txt
+++ b/tests/data/parser/ok/0008_mod_item.txt
@@ -1,30 +1,34 @@
1FILE@[0; 118) 1FILE@[0; 118)
2 MOD_ITEM@[0; 8) 2 MOD_ITEM@[0; 8)
3 MOD_KW@[0; 3) 3 MOD_KW@[0; 3)
4 WHITESPACE@[3; 4) 4 NAME@[3; 5)
5 IDENT@[4; 5) "a" 5 WHITESPACE@[3; 4)
6 IDENT@[4; 5) "a"
6 SEMI@[5; 6) 7 SEMI@[5; 6)
7 WHITESPACE@[6; 8) 8 WHITESPACE@[6; 8)
8 MOD_ITEM@[8; 19) 9 MOD_ITEM@[8; 19)
9 MOD_KW@[8; 11) 10 MOD_KW@[8; 11)
10 WHITESPACE@[11; 12) 11 NAME@[11; 14)
11 IDENT@[12; 13) "b" 12 WHITESPACE@[11; 12)
12 WHITESPACE@[13; 14) 13 IDENT@[12; 13) "b"
14 WHITESPACE@[13; 14)
13 L_CURLY@[14; 15) 15 L_CURLY@[14; 15)
14 WHITESPACE@[15; 16) 16 WHITESPACE@[15; 16)
15 R_CURLY@[16; 17) 17 R_CURLY@[16; 17)
16 WHITESPACE@[17; 19) 18 WHITESPACE@[17; 19)
17 MOD_ITEM@[19; 67) 19 MOD_ITEM@[19; 67)
18 MOD_KW@[19; 22) 20 MOD_KW@[19; 22)
19 WHITESPACE@[22; 23) 21 NAME@[22; 25)
20 IDENT@[23; 24) "c" 22 WHITESPACE@[22; 23)
21 WHITESPACE@[24; 25) 23 IDENT@[23; 24) "c"
24 WHITESPACE@[24; 25)
22 L_CURLY@[25; 26) 25 L_CURLY@[25; 26)
23 FN_ITEM@[26; 52) 26 FN_ITEM@[26; 52)
24 WHITESPACE@[26; 31) 27 WHITESPACE@[26; 31)
25 FN_KW@[31; 33) 28 FN_KW@[31; 33)
26 WHITESPACE@[33; 34) 29 NAME@[33; 37)
27 IDENT@[34; 37) "foo" 30 WHITESPACE@[33; 34)
31 IDENT@[34; 37) "foo"
28 L_PAREN@[37; 38) 32 L_PAREN@[37; 38)
29 R_PAREN@[38; 39) 33 R_PAREN@[38; 39)
30 WHITESPACE@[39; 40) 34 WHITESPACE@[39; 40)
@@ -34,9 +38,10 @@ FILE@[0; 118)
34 WHITESPACE@[47; 52) 38 WHITESPACE@[47; 52)
35 STRUCT_ITEM@[52; 64) 39 STRUCT_ITEM@[52; 64)
36 STRUCT_KW@[52; 58) 40 STRUCT_KW@[52; 58)
37 WHITESPACE@[58; 59) 41 NAME@[58; 61)
38 IDENT@[59; 60) "S" 42 WHITESPACE@[58; 59)
39 WHITESPACE@[60; 61) 43 IDENT@[59; 60) "S"
44 WHITESPACE@[60; 61)
40 L_CURLY@[61; 62) 45 L_CURLY@[61; 62)
41 R_CURLY@[62; 63) 46 R_CURLY@[62; 63)
42 WHITESPACE@[63; 64) 47 WHITESPACE@[63; 64)
@@ -44,9 +49,10 @@ FILE@[0; 118)
44 WHITESPACE@[65; 67) 49 WHITESPACE@[65; 67)
45 MOD_ITEM@[67; 118) 50 MOD_ITEM@[67; 118)
46 MOD_KW@[67; 70) 51 MOD_KW@[67; 70)
47 WHITESPACE@[70; 71) 52 NAME@[70; 73)
48 IDENT@[71; 72) "d" 53 WHITESPACE@[70; 71)
49 WHITESPACE@[72; 73) 54 IDENT@[71; 72) "d"
55 WHITESPACE@[72; 73)
50 L_CURLY@[73; 74) 56 L_CURLY@[73; 74)
51 ATTR@[74; 92) 57 ATTR@[74; 92)
52 WHITESPACE@[74; 79) 58 WHITESPACE@[74; 79)
@@ -59,15 +65,17 @@ FILE@[0; 118)
59 WHITESPACE@[87; 92) 65 WHITESPACE@[87; 92)
60 MOD_ITEM@[92; 103) 66 MOD_ITEM@[92; 103)
61 MOD_KW@[92; 95) 67 MOD_KW@[92; 95)
62 WHITESPACE@[95; 96) 68 NAME@[95; 97)
63 IDENT@[96; 97) "e" 69 WHITESPACE@[95; 96)
70 IDENT@[96; 97) "e"
64 SEMI@[97; 98) 71 SEMI@[97; 98)
65 WHITESPACE@[98; 103) 72 WHITESPACE@[98; 103)
66 MOD_ITEM@[103; 117) 73 MOD_ITEM@[103; 117)
67 MOD_KW@[103; 106) 74 MOD_KW@[103; 106)
68 WHITESPACE@[106; 107) 75 NAME@[106; 109)
69 IDENT@[107; 108) "f" 76 WHITESPACE@[106; 107)
70 WHITESPACE@[108; 109) 77 IDENT@[107; 108) "f"
78 WHITESPACE@[108; 109)
71 L_CURLY@[109; 110) 79 L_CURLY@[109; 110)
72 WHITESPACE@[110; 115) 80 WHITESPACE@[110; 115)
73 R_CURLY@[115; 116) 81 R_CURLY@[115; 116)
diff --git a/tests/data/parser/ok/0009_use_item.txt b/tests/data/parser/ok/0009_use_item.txt
index 08ae990d9..8daf4be0d 100644
--- a/tests/data/parser/ok/0009_use_item.txt
+++ b/tests/data/parser/ok/0009_use_item.txt
@@ -4,8 +4,9 @@ FILE@[0; 19)
4 USE_TREE@[3; 7) 4 USE_TREE@[3; 7)
5 PATH@[3; 7) 5 PATH@[3; 7)
6 PATH_SEGMENT@[3; 7) 6 PATH_SEGMENT@[3; 7)
7 WHITESPACE@[3; 4) 7 NAME_REF@[3; 7)
8 IDENT@[4; 7) "foo" 8 WHITESPACE@[3; 4)
9 IDENT@[4; 7) "foo"
9 SEMI@[7; 8) 10 SEMI@[7; 8)
10 WHITESPACE@[8; 9) 11 WHITESPACE@[8; 9)
11 USE_ITEM@[9; 19) 12 USE_ITEM@[9; 19)
@@ -15,5 +16,6 @@ FILE@[0; 19)
15 PATH_SEGMENT@[12; 18) 16 PATH_SEGMENT@[12; 18)
16 WHITESPACE@[12; 13) 17 WHITESPACE@[12; 13)
17 COLONCOLON@[13; 15) 18 COLONCOLON@[13; 15)
18 IDENT@[15; 18) "bar" 19 NAME_REF@[15; 18)
20 IDENT@[15; 18) "bar"
19 SEMI@[18; 19) 21 SEMI@[18; 19)
diff --git a/tests/data/parser/ok/0010_use_path_segments.txt b/tests/data/parser/ok/0010_use_path_segments.txt
index 37e3dfdbf..96d10d741 100644
--- a/tests/data/parser/ok/0010_use_path_segments.txt
+++ b/tests/data/parser/ok/0010_use_path_segments.txt
@@ -8,13 +8,16 @@ FILE@[0; 40)
8 PATH_SEGMENT@[3; 9) 8 PATH_SEGMENT@[3; 9)
9 WHITESPACE@[3; 4) 9 WHITESPACE@[3; 4)
10 COLONCOLON@[4; 6) 10 COLONCOLON@[4; 6)
11 IDENT@[6; 9) "foo" 11 NAME_REF@[6; 9)
12 IDENT@[6; 9) "foo"
12 COLONCOLON@[9; 11) 13 COLONCOLON@[9; 11)
13 PATH_SEGMENT@[11; 14) 14 PATH_SEGMENT@[11; 14)
14 IDENT@[11; 14) "bar" 15 NAME_REF@[11; 14)
16 IDENT@[11; 14) "bar"
15 COLONCOLON@[14; 16) 17 COLONCOLON@[14; 16)
16 PATH_SEGMENT@[16; 19) 18 PATH_SEGMENT@[16; 19)
17 IDENT@[16; 19) "baz" 19 NAME_REF@[16; 19)
20 IDENT@[16; 19) "baz"
18 SEMI@[19; 20) 21 SEMI@[19; 20)
19 WHITESPACE@[20; 21) 22 WHITESPACE@[20; 21)
20 USE_ITEM@[21; 40) 23 USE_ITEM@[21; 40)
@@ -24,13 +27,16 @@ FILE@[0; 40)
24 PATH@[24; 33) 27 PATH@[24; 33)
25 PATH@[24; 28) 28 PATH@[24; 28)
26 PATH_SEGMENT@[24; 28) 29 PATH_SEGMENT@[24; 28)
27 WHITESPACE@[24; 25) 30 NAME_REF@[24; 28)
28 IDENT@[25; 28) "foo" 31 WHITESPACE@[24; 25)
32 IDENT@[25; 28) "foo"
29 COLONCOLON@[28; 30) 33 COLONCOLON@[28; 30)
30 PATH_SEGMENT@[30; 33) 34 PATH_SEGMENT@[30; 33)
31 IDENT@[30; 33) "bar" 35 NAME_REF@[30; 33)
36 IDENT@[30; 33) "bar"
32 COLONCOLON@[33; 35) 37 COLONCOLON@[33; 35)
33 PATH_SEGMENT@[35; 38) 38 PATH_SEGMENT@[35; 38)
34 IDENT@[35; 38) "baz" 39 NAME_REF@[35; 38)
40 IDENT@[35; 38) "baz"
35 SEMI@[38; 39) 41 SEMI@[38; 39)
36 WHITESPACE@[39; 40) 42 WHITESPACE@[39; 40)
diff --git a/tests/data/parser/ok/0011_outer_attribute.txt b/tests/data/parser/ok/0011_outer_attribute.txt
index 4839d8e67..49023e7f3 100644
--- a/tests/data/parser/ok/0011_outer_attribute.txt
+++ b/tests/data/parser/ok/0011_outer_attribute.txt
@@ -19,8 +19,9 @@ FILE@[0; 35)
19 R_BRACK@[21; 22) 19 R_BRACK@[21; 22)
20 WHITESPACE@[22; 23) 20 WHITESPACE@[22; 23)
21 FN_KW@[23; 25) 21 FN_KW@[23; 25)
22 WHITESPACE@[25; 26) 22 NAME@[25; 29)
23 IDENT@[26; 29) "foo" 23 WHITESPACE@[25; 26)
24 IDENT@[26; 29) "foo"
24 L_PAREN@[29; 30) 25 L_PAREN@[29; 30)
25 R_PAREN@[30; 31) 26 R_PAREN@[30; 31)
26 WHITESPACE@[31; 32) 27 WHITESPACE@[31; 32)
diff --git a/tests/data/parser/ok/0012_visibility.txt b/tests/data/parser/ok/0012_visibility.txt
index ed22b265b..c138b73f3 100644
--- a/tests/data/parser/ok/0012_visibility.txt
+++ b/tests/data/parser/ok/0012_visibility.txt
@@ -1,8 +1,9 @@
1FILE@[0; 98) 1FILE@[0; 98)
2 FN_ITEM@[0; 10) 2 FN_ITEM@[0; 10)
3 FN_KW@[0; 2) 3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3) 4 NAME@[2; 4)
5 IDENT@[3; 4) "a" 5 WHITESPACE@[2; 3)
6 IDENT@[3; 4) "a"
6 L_PAREN@[4; 5) 7 L_PAREN@[4; 5)
7 R_PAREN@[5; 6) 8 R_PAREN@[5; 6)
8 WHITESPACE@[6; 7) 9 WHITESPACE@[6; 7)
@@ -14,8 +15,9 @@ FILE@[0; 98)
14 PUB_KW@[10; 13) 15 PUB_KW@[10; 13)
15 WHITESPACE@[13; 14) 16 WHITESPACE@[13; 14)
16 FN_KW@[14; 16) 17 FN_KW@[14; 16)
17 WHITESPACE@[16; 17) 18 NAME@[16; 18)
18 IDENT@[17; 18) "b" 19 WHITESPACE@[16; 17)
20 IDENT@[17; 18) "b"
19 L_PAREN@[18; 19) 21 L_PAREN@[18; 19)
20 R_PAREN@[19; 20) 22 R_PAREN@[19; 20)
21 WHITESPACE@[20; 21) 23 WHITESPACE@[20; 21)
@@ -30,8 +32,9 @@ FILE@[0; 98)
30 R_PAREN@[33; 34) 32 R_PAREN@[33; 34)
31 WHITESPACE@[34; 35) 33 WHITESPACE@[34; 35)
32 FN_KW@[35; 37) 34 FN_KW@[35; 37)
33 WHITESPACE@[37; 38) 35 NAME@[37; 39)
34 IDENT@[38; 39) "c" 36 WHITESPACE@[37; 38)
37 IDENT@[38; 39) "c"
35 L_PAREN@[39; 40) 38 L_PAREN@[39; 40)
36 R_PAREN@[40; 41) 39 R_PAREN@[40; 41)
37 WHITESPACE@[41; 42) 40 WHITESPACE@[41; 42)
@@ -46,8 +49,9 @@ FILE@[0; 98)
46 R_PAREN@[54; 55) 49 R_PAREN@[54; 55)
47 WHITESPACE@[55; 56) 50 WHITESPACE@[55; 56)
48 FN_KW@[56; 58) 51 FN_KW@[56; 58)
49 WHITESPACE@[58; 59) 52 NAME@[58; 60)
50 IDENT@[59; 60) "d" 53 WHITESPACE@[58; 59)
54 IDENT@[59; 60) "d"
51 L_PAREN@[60; 61) 55 L_PAREN@[60; 61)
52 R_PAREN@[61; 62) 56 R_PAREN@[61; 62)
53 WHITESPACE@[62; 63) 57 WHITESPACE@[62; 63)
@@ -63,19 +67,23 @@ FILE@[0; 98)
63 PATH@[72; 81) 67 PATH@[72; 81)
64 PATH@[72; 76) 68 PATH@[72; 76)
65 PATH_SEGMENT@[72; 76) 69 PATH_SEGMENT@[72; 76)
66 WHITESPACE@[72; 73) 70 NAME_REF@[72; 76)
67 IDENT@[73; 76) "foo" 71 WHITESPACE@[72; 73)
72 IDENT@[73; 76) "foo"
68 COLONCOLON@[76; 78) 73 COLONCOLON@[76; 78)
69 PATH_SEGMENT@[78; 81) 74 PATH_SEGMENT@[78; 81)
70 IDENT@[78; 81) "bar" 75 NAME_REF@[78; 81)
76 IDENT@[78; 81) "bar"
71 COLONCOLON@[81; 83) 77 COLONCOLON@[81; 83)
72 PATH_SEGMENT@[83; 86) 78 PATH_SEGMENT@[83; 86)
73 IDENT@[83; 86) "baz" 79 NAME_REF@[83; 86)
80 IDENT@[83; 86) "baz"
74 R_PAREN@[86; 87) 81 R_PAREN@[86; 87)
75 WHITESPACE@[87; 88) 82 WHITESPACE@[87; 88)
76 FN_KW@[88; 90) 83 FN_KW@[88; 90)
77 WHITESPACE@[90; 91) 84 NAME@[90; 92)
78 IDENT@[91; 92) "e" 85 WHITESPACE@[90; 91)
86 IDENT@[91; 92) "e"
79 L_PAREN@[92; 93) 87 L_PAREN@[92; 93)
80 R_PAREN@[93; 94) 88 R_PAREN@[93; 94)
81 WHITESPACE@[94; 95) 89 WHITESPACE@[94; 95)
diff --git a/tests/data/parser/ok/0013_use_path_self_super.txt b/tests/data/parser/ok/0013_use_path_self_super.txt
index f3dfaba4b..3542b2164 100644
--- a/tests/data/parser/ok/0013_use_path_self_super.txt
+++ b/tests/data/parser/ok/0013_use_path_self_super.txt
@@ -9,7 +9,8 @@ FILE@[0; 65)
9 SELF_KW@[4; 8) 9 SELF_KW@[4; 8)
10 COLONCOLON@[8; 10) 10 COLONCOLON@[8; 10)
11 PATH_SEGMENT@[10; 13) 11 PATH_SEGMENT@[10; 13)
12 IDENT@[10; 13) "foo" 12 NAME_REF@[10; 13)
13 IDENT@[10; 13) "foo"
13 SEMI@[13; 14) 14 SEMI@[13; 14)
14 WHITESPACE@[14; 15) 15 WHITESPACE@[14; 15)
15 USE_ITEM@[15; 38) 16 USE_ITEM@[15; 38)
@@ -26,7 +27,8 @@ FILE@[0; 65)
26 SUPER_KW@[26; 31) 27 SUPER_KW@[26; 31)
27 COLONCOLON@[31; 33) 28 COLONCOLON@[31; 33)
28 PATH_SEGMENT@[33; 36) 29 PATH_SEGMENT@[33; 36)
29 IDENT@[33; 36) "bar" 30 NAME_REF@[33; 36)
31 IDENT@[33; 36) "bar"
30 SEMI@[36; 37) 32 SEMI@[36; 37)
31 WHITESPACE@[37; 38) 33 WHITESPACE@[37; 38)
32 USE_ITEM@[38; 65) 34 USE_ITEM@[38; 65)
@@ -42,12 +44,14 @@ FILE@[0; 65)
42 SELF_KW@[44; 48) 44 SELF_KW@[44; 48)
43 COLONCOLON@[48; 50) 45 COLONCOLON@[48; 50)
44 PATH_SEGMENT@[50; 51) 46 PATH_SEGMENT@[50; 51)
45 IDENT@[50; 51) "a" 47 NAME_REF@[50; 51)
48 IDENT@[50; 51) "a"
46 COLONCOLON@[51; 53) 49 COLONCOLON@[51; 53)
47 PATH_SEGMENT@[53; 58) 50 PATH_SEGMENT@[53; 58)
48 SUPER_KW@[53; 58) 51 SUPER_KW@[53; 58)
49 COLONCOLON@[58; 60) 52 COLONCOLON@[58; 60)
50 PATH_SEGMENT@[60; 63) 53 PATH_SEGMENT@[60; 63)
51 IDENT@[60; 63) "bar" 54 NAME_REF@[60; 63)
55 IDENT@[60; 63) "bar"
52 SEMI@[63; 64) 56 SEMI@[63; 64)
53 WHITESPACE@[64; 65) 57 WHITESPACE@[64; 65)
diff --git a/tests/data/parser/ok/0014_use_tree.txt b/tests/data/parser/ok/0014_use_tree.txt
index cddaa5462..a7326214d 100644
--- a/tests/data/parser/ok/0014_use_tree.txt
+++ b/tests/data/parser/ok/0014_use_tree.txt
@@ -36,8 +36,9 @@ FILE@[0; 81)
36 USE_TREE@[37; 44) 36 USE_TREE@[37; 44)
37 PATH@[37; 41) 37 PATH@[37; 41)
38 PATH_SEGMENT@[37; 41) 38 PATH_SEGMENT@[37; 41)
39 WHITESPACE@[37; 38) 39 NAME_REF@[37; 41)
40 IDENT@[38; 41) "foo" 40 WHITESPACE@[37; 38)
41 IDENT@[38; 41) "foo"
41 COLONCOLON@[41; 43) 42 COLONCOLON@[41; 43)
42 STAR@[43; 44) 43 STAR@[43; 44)
43 SEMI@[44; 45) 44 SEMI@[44; 45)
@@ -47,8 +48,9 @@ FILE@[0; 81)
47 USE_TREE@[49; 57) 48 USE_TREE@[49; 57)
48 PATH@[49; 53) 49 PATH@[49; 53)
49 PATH_SEGMENT@[49; 53) 50 PATH_SEGMENT@[49; 53)
50 WHITESPACE@[49; 50) 51 NAME_REF@[49; 53)
51 IDENT@[50; 53) "foo" 52 WHITESPACE@[49; 50)
53 IDENT@[50; 53) "foo"
52 COLONCOLON@[53; 55) 54 COLONCOLON@[53; 55)
53 L_CURLY@[55; 56) 55 L_CURLY@[55; 56)
54 R_CURLY@[56; 57) 56 R_CURLY@[56; 57)
@@ -61,25 +63,29 @@ FILE@[0; 81)
61 PATH_SEGMENT@[62; 68) 63 PATH_SEGMENT@[62; 68)
62 WHITESPACE@[62; 63) 64 WHITESPACE@[62; 63)
63 COLONCOLON@[63; 65) 65 COLONCOLON@[63; 65)
64 IDENT@[65; 68) "foo" 66 NAME_REF@[65; 68)
67 IDENT@[65; 68) "foo"
65 COLONCOLON@[68; 70) 68 COLONCOLON@[68; 70)
66 L_CURLY@[70; 71) 69 L_CURLY@[70; 71)
67 USE_TREE@[71; 72) 70 USE_TREE@[71; 72)
68 PATH@[71; 72) 71 PATH@[71; 72)
69 PATH_SEGMENT@[71; 72) 72 PATH_SEGMENT@[71; 72)
70 IDENT@[71; 72) "a" 73 NAME_REF@[71; 72)
74 IDENT@[71; 72) "a"
71 COMMA@[72; 73) 75 COMMA@[72; 73)
72 USE_TREE@[73; 75) 76 USE_TREE@[73; 75)
73 PATH@[73; 75) 77 PATH@[73; 75)
74 PATH_SEGMENT@[73; 75) 78 PATH_SEGMENT@[73; 75)
75 WHITESPACE@[73; 74) 79 NAME_REF@[73; 75)
76 IDENT@[74; 75) "b" 80 WHITESPACE@[73; 74)
81 IDENT@[74; 75) "b"
77 COMMA@[75; 76) 82 COMMA@[75; 76)
78 USE_TREE@[76; 78) 83 USE_TREE@[76; 78)
79 PATH@[76; 78) 84 PATH@[76; 78)
80 PATH_SEGMENT@[76; 78) 85 PATH_SEGMENT@[76; 78)
81 WHITESPACE@[76; 77) 86 NAME_REF@[76; 78)
82 IDENT@[77; 78) "c" 87 WHITESPACE@[76; 77)
88 IDENT@[77; 78) "c"
83 R_CURLY@[78; 79) 89 R_CURLY@[78; 79)
84 SEMI@[79; 80) 90 SEMI@[79; 80)
85 WHITESPACE@[80; 81) 91 WHITESPACE@[80; 81)
diff --git a/tests/data/parser/ok/0015_use_tree.txt b/tests/data/parser/ok/0015_use_tree.txt
index 10bdef5fe..2ba15bbee 100644
--- a/tests/data/parser/ok/0015_use_tree.txt
+++ b/tests/data/parser/ok/0015_use_tree.txt
@@ -4,13 +4,15 @@ FILE@[0; 55)
4 USE_TREE@[3; 14) 4 USE_TREE@[3; 14)
5 PATH@[3; 8) 5 PATH@[3; 8)
6 PATH_SEGMENT@[3; 8) 6 PATH_SEGMENT@[3; 8)
7 WHITESPACE@[3; 4) 7 NAME_REF@[3; 8)
8 IDENT@[4; 7) "foo" 8 WHITESPACE@[3; 4)
9 WHITESPACE@[7; 8) 9 IDENT@[4; 7) "foo"
10 WHITESPACE@[7; 8)
10 ALIAS@[8; 14) 11 ALIAS@[8; 14)
11 AS_KW@[8; 10) 12 AS_KW@[8; 10)
12 WHITESPACE@[10; 11) 13 NAME@[10; 14)
13 IDENT@[11; 14) "bar" 14 WHITESPACE@[10; 11)
15 IDENT@[11; 14) "bar"
14 SEMI@[14; 15) 16 SEMI@[14; 15)
15 WHITESPACE@[15; 16) 17 WHITESPACE@[15; 16)
16 USE_ITEM@[16; 55) 18 USE_ITEM@[16; 55)
@@ -18,19 +20,22 @@ FILE@[0; 55)
18 USE_TREE@[19; 53) 20 USE_TREE@[19; 53)
19 PATH@[19; 23) 21 PATH@[19; 23)
20 PATH_SEGMENT@[19; 23) 22 PATH_SEGMENT@[19; 23)
21 WHITESPACE@[19; 20) 23 NAME_REF@[19; 23)
22 IDENT@[20; 23) "foo" 24 WHITESPACE@[19; 20)
25 IDENT@[20; 23) "foo"
23 COLONCOLON@[23; 25) 26 COLONCOLON@[23; 25)
24 L_CURLY@[25; 26) 27 L_CURLY@[25; 26)
25 USE_TREE@[26; 32) 28 USE_TREE@[26; 32)
26 PATH@[26; 28) 29 PATH@[26; 28)
27 PATH_SEGMENT@[26; 28) 30 PATH_SEGMENT@[26; 28)
28 IDENT@[26; 27) "a" 31 NAME_REF@[26; 28)
29 WHITESPACE@[27; 28) 32 IDENT@[26; 27) "a"
33 WHITESPACE@[27; 28)
30 ALIAS@[28; 32) 34 ALIAS@[28; 32)
31 AS_KW@[28; 30) 35 AS_KW@[28; 30)
32 WHITESPACE@[30; 31) 36 NAME@[30; 32)
33 IDENT@[31; 32) "b" 37 WHITESPACE@[30; 31)
38 IDENT@[31; 32) "b"
34 COMMA@[32; 33) 39 COMMA@[32; 33)
35 USE_TREE@[33; 35) 40 USE_TREE@[33; 35)
36 WHITESPACE@[33; 34) 41 WHITESPACE@[33; 34)
@@ -46,12 +51,14 @@ FILE@[0; 55)
46 PATH_SEGMENT@[41; 48) 51 PATH_SEGMENT@[41; 48)
47 WHITESPACE@[41; 42) 52 WHITESPACE@[41; 42)
48 COLONCOLON@[42; 44) 53 COLONCOLON@[42; 44)
49 IDENT@[44; 47) "foo" 54 NAME_REF@[44; 48)
50 WHITESPACE@[47; 48) 55 IDENT@[44; 47) "foo"
56 WHITESPACE@[47; 48)
51 ALIAS@[48; 52) 57 ALIAS@[48; 52)
52 AS_KW@[48; 50) 58 AS_KW@[48; 50)
53 WHITESPACE@[50; 51) 59 NAME@[50; 52)
54 IDENT@[51; 52) "x" 60 WHITESPACE@[50; 51)
61 IDENT@[51; 52) "x"
55 R_CURLY@[52; 53) 62 R_CURLY@[52; 53)
56 SEMI@[53; 54) 63 SEMI@[53; 54)
57 WHITESPACE@[54; 55) 64 WHITESPACE@[54; 55)
diff --git a/tests/data/parser/ok/0016_struct_flavors.txt b/tests/data/parser/ok/0016_struct_flavors.txt
index d5d3a0183..15462b9b9 100644
--- a/tests/data/parser/ok/0016_struct_flavors.txt
+++ b/tests/data/parser/ok/0016_struct_flavors.txt
@@ -1,35 +1,40 @@
1FILE@[0; 97) 1FILE@[0; 97)
2 STRUCT_ITEM@[0; 10) 2 STRUCT_ITEM@[0; 10)
3 STRUCT_KW@[0; 6) 3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7) 4 NAME@[6; 8)
5 IDENT@[7; 8) "A" 5 WHITESPACE@[6; 7)
6 IDENT@[7; 8) "A"
6 SEMI@[8; 9) 7 SEMI@[8; 9)
7 WHITESPACE@[9; 10) 8 WHITESPACE@[9; 10)
8 STRUCT_ITEM@[10; 22) 9 STRUCT_ITEM@[10; 22)
9 STRUCT_KW@[10; 16) 10 STRUCT_KW@[10; 16)
10 WHITESPACE@[16; 17) 11 NAME@[16; 19)
11 IDENT@[17; 18) "B" 12 WHITESPACE@[16; 17)
12 WHITESPACE@[18; 19) 13 IDENT@[17; 18) "B"
14 WHITESPACE@[18; 19)
13 L_CURLY@[19; 20) 15 L_CURLY@[19; 20)
14 R_CURLY@[20; 21) 16 R_CURLY@[20; 21)
15 WHITESPACE@[21; 22) 17 WHITESPACE@[21; 22)
16 STRUCT_ITEM@[22; 35) 18 STRUCT_ITEM@[22; 35)
17 STRUCT_KW@[22; 28) 19 STRUCT_KW@[22; 28)
18 WHITESPACE@[28; 29) 20 NAME@[28; 30)
19 IDENT@[29; 30) "C" 21 WHITESPACE@[28; 29)
22 IDENT@[29; 30) "C"
20 L_PAREN@[30; 31) 23 L_PAREN@[30; 31)
21 R_PAREN@[31; 32) 24 R_PAREN@[31; 32)
22 SEMI@[32; 33) 25 SEMI@[32; 33)
23 WHITESPACE@[33; 35) 26 WHITESPACE@[33; 35)
24 STRUCT_ITEM@[35; 76) 27 STRUCT_ITEM@[35; 76)
25 STRUCT_KW@[35; 41) 28 STRUCT_KW@[35; 41)
26 WHITESPACE@[41; 42) 29 NAME@[41; 44)
27 IDENT@[42; 43) "D" 30 WHITESPACE@[41; 42)
28 WHITESPACE@[43; 44) 31 IDENT@[42; 43) "D"
32 WHITESPACE@[43; 44)
29 L_CURLY@[44; 45) 33 L_CURLY@[44; 45)
30 NAMED_FIELD@[45; 56) 34 NAMED_FIELD@[45; 56)
31 WHITESPACE@[45; 50) 35 NAME@[45; 51)
32 IDENT@[50; 51) "a" 36 WHITESPACE@[45; 50)
37 IDENT@[50; 51) "a"
33 COLON@[51; 52) 38 COLON@[51; 52)
34 WHITESPACE@[52; 53) 39 WHITESPACE@[52; 53)
35 IDENT@[53; 56) "u32" 40 IDENT@[53; 56) "u32"
@@ -39,7 +44,8 @@ FILE@[0; 97)
39 WHITESPACE@[57; 62) 44 WHITESPACE@[57; 62)
40 PUB_KW@[62; 65) 45 PUB_KW@[62; 65)
41 WHITESPACE@[65; 66) 46 WHITESPACE@[65; 66)
42 IDENT@[66; 67) "b" 47 NAME@[66; 67)
48 IDENT@[66; 67) "b"
43 COLON@[67; 68) 49 COLON@[67; 68)
44 WHITESPACE@[68; 69) 50 WHITESPACE@[68; 69)
45 IDENT@[69; 72) "u32" 51 IDENT@[69; 72) "u32"
@@ -48,8 +54,9 @@ FILE@[0; 97)
48 WHITESPACE@[74; 76) 54 WHITESPACE@[74; 76)
49 STRUCT_ITEM@[76; 97) 55 STRUCT_ITEM@[76; 97)
50 STRUCT_KW@[76; 82) 56 STRUCT_KW@[76; 82)
51 WHITESPACE@[82; 83) 57 NAME@[82; 84)
52 IDENT@[83; 84) "E" 58 WHITESPACE@[82; 83)
59 IDENT@[83; 84) "E"
53 L_PAREN@[84; 85) 60 L_PAREN@[84; 85)
54 POS_FIELD@[85; 90) 61 POS_FIELD@[85; 90)
55 VISIBILITY@[85; 89) 62 VISIBILITY@[85; 89)
diff --git a/tests/data/parser/ok/0017_attr_trailing_comma.txt b/tests/data/parser/ok/0017_attr_trailing_comma.txt
index 304417ed9..a4a6b8807 100644
--- a/tests/data/parser/ok/0017_attr_trailing_comma.txt
+++ b/tests/data/parser/ok/0017_attr_trailing_comma.txt
@@ -13,8 +13,9 @@ FILE@[0; 23)
13 R_BRACK@[9; 10) 13 R_BRACK@[9; 10)
14 WHITESPACE@[10; 11) 14 WHITESPACE@[10; 11)
15 FN_KW@[11; 13) 15 FN_KW@[11; 13)
16 WHITESPACE@[13; 14) 16 NAME@[13; 17)
17 IDENT@[14; 17) "foo" 17 WHITESPACE@[13; 14)
18 IDENT@[14; 17) "foo"
18 L_PAREN@[17; 18) 19 L_PAREN@[17; 18)
19 R_PAREN@[18; 19) 20 R_PAREN@[18; 19)
20 WHITESPACE@[19; 20) 21 WHITESPACE@[19; 20)
diff --git a/tests/data/parser/ok/0018_struct_type_params.txt b/tests/data/parser/ok/0018_struct_type_params.txt
index 6df786f42..fe14effce 100644
--- a/tests/data/parser/ok/0018_struct_type_params.txt
+++ b/tests/data/parser/ok/0018_struct_type_params.txt
@@ -1,8 +1,9 @@
1FILE@[0; 290) 1FILE@[0; 290)
2 STRUCT_ITEM@[0; 14) 2 STRUCT_ITEM@[0; 14)
3 STRUCT_KW@[0; 6) 3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7) 4 NAME@[6; 9)
5 IDENT@[7; 9) "S1" 5 WHITESPACE@[6; 7)
6 IDENT@[7; 9) "S1"
6 TYPE_PARAM_LIST@[9; 12) 7 TYPE_PARAM_LIST@[9; 12)
7 L_ANGLE@[9; 10) 8 L_ANGLE@[9; 10)
8 TYPE_PARAM@[10; 11) 9 TYPE_PARAM@[10; 11)
@@ -12,8 +13,9 @@ FILE@[0; 290)
12 WHITESPACE@[13; 14) 13 WHITESPACE@[13; 14)
13 STRUCT_ITEM@[14; 33) 14 STRUCT_ITEM@[14; 33)
14 STRUCT_KW@[14; 20) 15 STRUCT_KW@[14; 20)
15 WHITESPACE@[20; 21) 16 NAME@[20; 23)
16 IDENT@[21; 23) "S2" 17 WHITESPACE@[20; 21)
18 IDENT@[21; 23) "S2"
17 TYPE_PARAM_LIST@[23; 26) 19 TYPE_PARAM_LIST@[23; 26)
18 L_ANGLE@[23; 24) 20 L_ANGLE@[23; 24)
19 TYPE_PARAM@[24; 25) 21 TYPE_PARAM@[24; 25)
@@ -27,8 +29,9 @@ FILE@[0; 290)
27 WHITESPACE@[32; 33) 29 WHITESPACE@[32; 33)
28 STRUCT_ITEM@[33; 58) 30 STRUCT_ITEM@[33; 58)
29 STRUCT_KW@[33; 39) 31 STRUCT_KW@[33; 39)
30 WHITESPACE@[39; 40) 32 NAME@[39; 42)
31 IDENT@[40; 42) "S3" 33 WHITESPACE@[39; 40)
34 IDENT@[40; 42) "S3"
32 TYPE_PARAM_LIST@[42; 46) 35 TYPE_PARAM_LIST@[42; 46)
33 L_ANGLE@[42; 43) 36 L_ANGLE@[42; 43)
34 TYPE_PARAM@[43; 44) 37 TYPE_PARAM@[43; 44)
@@ -37,8 +40,9 @@ FILE@[0; 290)
37 WHITESPACE@[45; 46) 40 WHITESPACE@[45; 46)
38 L_CURLY@[46; 47) 41 L_CURLY@[46; 47)
39 NAMED_FIELD@[47; 55) 42 NAMED_FIELD@[47; 55)
40 WHITESPACE@[47; 48) 43 NAME@[47; 49)
41 IDENT@[48; 49) "u" 44 WHITESPACE@[47; 48)
45 IDENT@[48; 49) "u"
42 COLON@[49; 50) 46 COLON@[49; 50)
43 WHITESPACE@[50; 51) 47 WHITESPACE@[50; 51)
44 IDENT@[51; 54) "u32" 48 IDENT@[51; 54) "u32"
@@ -47,8 +51,9 @@ FILE@[0; 290)
47 WHITESPACE@[56; 58) 51 WHITESPACE@[56; 58)
48 STRUCT_ITEM@[58; 71) 52 STRUCT_ITEM@[58; 71)
49 STRUCT_KW@[58; 64) 53 STRUCT_KW@[58; 64)
50 WHITESPACE@[64; 65) 54 NAME@[64; 67)
51 IDENT@[65; 67) "S4" 55 WHITESPACE@[64; 65)
56 IDENT@[65; 67) "S4"
52 TYPE_PARAM_LIST@[67; 69) 57 TYPE_PARAM_LIST@[67; 69)
53 L_ANGLE@[67; 68) 58 L_ANGLE@[67; 68)
54 R_ANGLE@[68; 69) 59 R_ANGLE@[68; 69)
@@ -56,8 +61,9 @@ FILE@[0; 290)
56 WHITESPACE@[70; 71) 61 WHITESPACE@[70; 71)
57 STRUCT_ITEM@[71; 86) 62 STRUCT_ITEM@[71; 86)
58 STRUCT_KW@[71; 77) 63 STRUCT_KW@[71; 77)
59 WHITESPACE@[77; 78) 64 NAME@[77; 80)
60 IDENT@[78; 80) "S5" 65 WHITESPACE@[77; 78)
66 IDENT@[78; 80) "S5"
61 TYPE_PARAM_LIST@[80; 84) 67 TYPE_PARAM_LIST@[80; 84)
62 L_ANGLE@[80; 81) 68 L_ANGLE@[80; 81)
63 LIFETIME_PARAM@[81; 83) 69 LIFETIME_PARAM@[81; 83)
@@ -67,8 +73,9 @@ FILE@[0; 290)
67 WHITESPACE@[85; 86) 73 WHITESPACE@[85; 86)
68 STRUCT_ITEM@[86; 102) 74 STRUCT_ITEM@[86; 102)
69 STRUCT_KW@[86; 92) 75 STRUCT_KW@[86; 92)
70 WHITESPACE@[92; 93) 76 NAME@[92; 95)
71 IDENT@[93; 95) "S6" 77 WHITESPACE@[92; 93)
78 IDENT@[93; 95) "S6"
72 TYPE_PARAM_LIST@[95; 100) 79 TYPE_PARAM_LIST@[95; 100)
73 L_ANGLE@[95; 96) 80 L_ANGLE@[95; 96)
74 LIFETIME_PARAM@[96; 99) 81 LIFETIME_PARAM@[96; 99)
@@ -79,8 +86,9 @@ FILE@[0; 290)
79 WHITESPACE@[101; 102) 86 WHITESPACE@[101; 102)
80 STRUCT_ITEM@[102; 121) 87 STRUCT_ITEM@[102; 121)
81 STRUCT_KW@[102; 108) 88 STRUCT_KW@[102; 108)
82 WHITESPACE@[108; 109) 89 NAME@[108; 111)
83 IDENT@[109; 111) "S7" 90 WHITESPACE@[108; 109)
91 IDENT@[109; 111) "S7"
84 TYPE_PARAM_LIST@[111; 119) 92 TYPE_PARAM_LIST@[111; 119)
85 L_ANGLE@[111; 112) 93 L_ANGLE@[111; 112)
86 LIFETIME_PARAM@[112; 118) 94 LIFETIME_PARAM@[112; 118)
@@ -93,8 +101,9 @@ FILE@[0; 290)
93 WHITESPACE@[120; 121) 101 WHITESPACE@[120; 121)
94 STRUCT_ITEM@[121; 143) 102 STRUCT_ITEM@[121; 143)
95 STRUCT_KW@[121; 127) 103 STRUCT_KW@[121; 127)
96 WHITESPACE@[127; 128) 104 NAME@[127; 130)
97 IDENT@[128; 130) "S8" 105 WHITESPACE@[127; 128)
106 IDENT@[128; 130) "S8"
98 TYPE_PARAM_LIST@[130; 141) 107 TYPE_PARAM_LIST@[130; 141)
99 L_ANGLE@[130; 131) 108 L_ANGLE@[130; 131)
100 LIFETIME_PARAM@[131; 140) 109 LIFETIME_PARAM@[131; 140)
@@ -110,8 +119,9 @@ FILE@[0; 290)
110 WHITESPACE@[142; 143) 119 WHITESPACE@[142; 143)
111 STRUCT_ITEM@[143; 167) 120 STRUCT_ITEM@[143; 167)
112 STRUCT_KW@[143; 149) 121 STRUCT_KW@[143; 149)
113 WHITESPACE@[149; 150) 122 NAME@[149; 152)
114 IDENT@[150; 152) "S9" 123 WHITESPACE@[149; 150)
124 IDENT@[150; 152) "S9"
115 TYPE_PARAM_LIST@[152; 165) 125 TYPE_PARAM_LIST@[152; 165)
116 L_ANGLE@[152; 153) 126 L_ANGLE@[152; 153)
117 LIFETIME_PARAM@[153; 164) 127 LIFETIME_PARAM@[153; 164)
@@ -128,8 +138,9 @@ FILE@[0; 290)
128 WHITESPACE@[166; 167) 138 WHITESPACE@[166; 167)
129 STRUCT_ITEM@[167; 184) 139 STRUCT_ITEM@[167; 184)
130 STRUCT_KW@[167; 173) 140 STRUCT_KW@[167; 173)
131 WHITESPACE@[173; 174) 141 NAME@[173; 177)
132 IDENT@[174; 177) "S10" 142 WHITESPACE@[173; 174)
143 IDENT@[174; 177) "S10"
133 TYPE_PARAM_LIST@[177; 182) 144 TYPE_PARAM_LIST@[177; 182)
134 L_ANGLE@[177; 178) 145 L_ANGLE@[177; 178)
135 LIFETIME_PARAM@[178; 180) 146 LIFETIME_PARAM@[178; 180)
@@ -140,8 +151,9 @@ FILE@[0; 290)
140 WHITESPACE@[183; 184) 151 WHITESPACE@[183; 184)
141 STRUCT_ITEM@[184; 204) 152 STRUCT_ITEM@[184; 204)
142 STRUCT_KW@[184; 190) 153 STRUCT_KW@[184; 190)
143 WHITESPACE@[190; 191) 154 NAME@[190; 194)
144 IDENT@[191; 194) "S11" 155 WHITESPACE@[190; 191)
156 IDENT@[191; 194) "S11"
145 TYPE_PARAM_LIST@[194; 202) 157 TYPE_PARAM_LIST@[194; 202)
146 L_ANGLE@[194; 195) 158 L_ANGLE@[194; 195)
147 LIFETIME_PARAM@[195; 197) 159 LIFETIME_PARAM@[195; 197)
@@ -155,8 +167,9 @@ FILE@[0; 290)
155 WHITESPACE@[203; 204) 167 WHITESPACE@[203; 204)
156 STRUCT_ITEM@[204; 235) 168 STRUCT_ITEM@[204; 235)
157 STRUCT_KW@[204; 210) 169 STRUCT_KW@[204; 210)
158 WHITESPACE@[210; 211) 170 NAME@[210; 214)
159 IDENT@[211; 214) "S12" 171 WHITESPACE@[210; 211)
172 IDENT@[211; 214) "S12"
160 TYPE_PARAM_LIST@[214; 232) 173 TYPE_PARAM_LIST@[214; 232)
161 L_ANGLE@[214; 215) 174 L_ANGLE@[214; 215)
162 LIFETIME_PARAM@[215; 222) 175 LIFETIME_PARAM@[215; 222)
@@ -178,8 +191,9 @@ FILE@[0; 290)
178 WHITESPACE@[233; 235) 191 WHITESPACE@[233; 235)
179 STRUCT_ITEM@[235; 250) 192 STRUCT_ITEM@[235; 250)
180 STRUCT_KW@[235; 241) 193 STRUCT_KW@[235; 241)
181 WHITESPACE@[241; 242) 194 NAME@[241; 245)
182 IDENT@[242; 245) "S13" 195 WHITESPACE@[241; 242)
196 IDENT@[242; 245) "S13"
183 TYPE_PARAM_LIST@[245; 248) 197 TYPE_PARAM_LIST@[245; 248)
184 L_ANGLE@[245; 246) 198 L_ANGLE@[245; 246)
185 TYPE_PARAM@[246; 247) 199 TYPE_PARAM@[246; 247)
@@ -189,8 +203,9 @@ FILE@[0; 290)
189 WHITESPACE@[249; 250) 203 WHITESPACE@[249; 250)
190 STRUCT_ITEM@[250; 268) 204 STRUCT_ITEM@[250; 268)
191 STRUCT_KW@[250; 256) 205 STRUCT_KW@[250; 256)
192 WHITESPACE@[256; 257) 206 NAME@[256; 260)
193 IDENT@[257; 260) "S14" 207 WHITESPACE@[256; 257)
208 IDENT@[257; 260) "S14"
194 TYPE_PARAM_LIST@[260; 266) 209 TYPE_PARAM_LIST@[260; 266)
195 L_ANGLE@[260; 261) 210 L_ANGLE@[260; 261)
196 TYPE_PARAM@[261; 262) 211 TYPE_PARAM@[261; 262)
@@ -204,8 +219,9 @@ FILE@[0; 290)
204 WHITESPACE@[267; 268) 219 WHITESPACE@[267; 268)
205 STRUCT_ITEM@[268; 290) 220 STRUCT_ITEM@[268; 290)
206 STRUCT_KW@[268; 274) 221 STRUCT_KW@[268; 274)
207 WHITESPACE@[274; 275) 222 NAME@[274; 278)
208 IDENT@[275; 278) "S15" 223 WHITESPACE@[274; 275)
224 IDENT@[275; 278) "S15"
209 TYPE_PARAM_LIST@[278; 288) 225 TYPE_PARAM_LIST@[278; 288)
210 L_ANGLE@[278; 279) 226 L_ANGLE@[278; 279)
211 LIFETIME_PARAM@[279; 281) 227 LIFETIME_PARAM@[279; 281)
diff --git a/tests/data/parser/ok/0019_enums.txt b/tests/data/parser/ok/0019_enums.txt
index dfb8e1f0c..bad12bee3 100644
--- a/tests/data/parser/ok/0019_enums.txt
+++ b/tests/data/parser/ok/0019_enums.txt
@@ -1,17 +1,19 @@
1FILE@[0; 182) 1FILE@[0; 182)
2 ENUM_ITEM@[0; 13) 2 ENUM_ITEM@[0; 13)
3 ENUM_KW@[0; 4) 3 ENUM_KW@[0; 4)
4 WHITESPACE@[4; 5) 4 NAME@[4; 8)
5 IDENT@[5; 7) "E1" 5 WHITESPACE@[4; 5)
6 WHITESPACE@[7; 8) 6 IDENT@[5; 7) "E1"
7 WHITESPACE@[7; 8)
7 L_CURLY@[8; 9) 8 L_CURLY@[8; 9)
8 WHITESPACE@[9; 10) 9 WHITESPACE@[9; 10)
9 R_CURLY@[10; 11) 10 R_CURLY@[10; 11)
10 WHITESPACE@[11; 13) 11 WHITESPACE@[11; 13)
11 ENUM_ITEM@[13; 29) 12 ENUM_ITEM@[13; 29)
12 ENUM_KW@[13; 17) 13 ENUM_KW@[13; 17)
13 WHITESPACE@[17; 18) 14 NAME@[17; 20)
14 IDENT@[18; 20) "E2" 15 WHITESPACE@[17; 18)
16 IDENT@[18; 20) "E2"
15 TYPE_PARAM_LIST@[20; 24) 17 TYPE_PARAM_LIST@[20; 24)
16 L_ANGLE@[20; 21) 18 L_ANGLE@[20; 21)
17 TYPE_PARAM@[21; 22) 19 TYPE_PARAM@[21; 22)
@@ -24,9 +26,10 @@ FILE@[0; 182)
24 WHITESPACE@[27; 29) 26 WHITESPACE@[27; 29)
25 ENUM_ITEM@[29; 48) 27 ENUM_ITEM@[29; 48)
26 ENUM_KW@[29; 33) 28 ENUM_KW@[29; 33)
27 WHITESPACE@[33; 34) 29 NAME@[33; 37)
28 IDENT@[34; 36) "E3" 30 WHITESPACE@[33; 34)
29 WHITESPACE@[36; 37) 31 IDENT@[34; 36) "E3"
32 WHITESPACE@[36; 37)
30 L_CURLY@[37; 38) 33 L_CURLY@[37; 38)
31 ENUM_VARIANT@[38; 45) 34 ENUM_VARIANT@[38; 45)
32 WHITESPACE@[38; 43) 35 WHITESPACE@[38; 43)
@@ -36,9 +39,10 @@ FILE@[0; 182)
36 WHITESPACE@[46; 48) 39 WHITESPACE@[46; 48)
37 ENUM_ITEM@[48; 68) 40 ENUM_ITEM@[48; 68)
38 ENUM_KW@[48; 52) 41 ENUM_KW@[48; 52)
39 WHITESPACE@[52; 53) 42 NAME@[52; 56)
40 IDENT@[53; 55) "E4" 43 WHITESPACE@[52; 53)
41 WHITESPACE@[55; 56) 44 IDENT@[53; 55) "E4"
45 WHITESPACE@[55; 56)
42 L_CURLY@[56; 57) 46 L_CURLY@[56; 57)
43 ENUM_VARIANT@[57; 63) 47 ENUM_VARIANT@[57; 63)
44 WHITESPACE@[57; 62) 48 WHITESPACE@[57; 62)
@@ -49,9 +53,10 @@ FILE@[0; 182)
49 WHITESPACE@[66; 68) 53 WHITESPACE@[66; 68)
50 ENUM_ITEM@[68; 182) 54 ENUM_ITEM@[68; 182)
51 ENUM_KW@[68; 72) 55 ENUM_KW@[68; 72)
52 WHITESPACE@[72; 73) 56 NAME@[72; 76)
53 IDENT@[73; 75) "E5" 57 WHITESPACE@[72; 73)
54 WHITESPACE@[75; 76) 58 IDENT@[73; 75) "E5"
59 WHITESPACE@[75; 76)
55 L_CURLY@[76; 77) 60 L_CURLY@[76; 77)
56 ENUM_VARIANT@[77; 83) 61 ENUM_VARIANT@[77; 83)
57 WHITESPACE@[77; 82) 62 WHITESPACE@[77; 82)
@@ -72,8 +77,9 @@ FILE@[0; 182)
72 WHITESPACE@[102; 103) 77 WHITESPACE@[102; 103)
73 L_CURLY@[103; 104) 78 L_CURLY@[103; 104)
74 NAMED_FIELD@[104; 119) 79 NAMED_FIELD@[104; 119)
75 WHITESPACE@[104; 113) 80 NAME@[104; 114)
76 IDENT@[113; 114) "a" 81 WHITESPACE@[104; 113)
82 IDENT@[113; 114) "a"
77 COLON@[114; 115) 83 COLON@[114; 115)
78 WHITESPACE@[115; 116) 84 WHITESPACE@[115; 116)
79 IDENT@[116; 119) "u32" 85 IDENT@[116; 119) "u32"
@@ -83,7 +89,8 @@ FILE@[0; 182)
83 WHITESPACE@[120; 129) 89 WHITESPACE@[120; 129)
84 PUB_KW@[129; 132) 90 PUB_KW@[129; 132)
85 WHITESPACE@[132; 133) 91 WHITESPACE@[132; 133)
86 IDENT@[133; 134) "b" 92 NAME@[133; 134)
93 IDENT@[133; 134) "b"
87 COLON@[134; 135) 94 COLON@[134; 135)
88 WHITESPACE@[135; 136) 95 WHITESPACE@[135; 136)
89 IDENT@[136; 139) "f64" 96 IDENT@[136; 139) "f64"
diff --git a/tests/data/parser/ok/0020_type_param_bounds.txt b/tests/data/parser/ok/0020_type_param_bounds.txt
index 6f65d150a..7132eec6e 100644
--- a/tests/data/parser/ok/0020_type_param_bounds.txt
+++ b/tests/data/parser/ok/0020_type_param_bounds.txt
@@ -1,8 +1,9 @@
1FILE@[0; 200) 1FILE@[0; 200)
2 STRUCT_ITEM@[0; 13) 2 STRUCT_ITEM@[0; 13)
3 STRUCT_KW@[0; 6) 3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7) 4 NAME@[6; 8)
5 IDENT@[7; 8) "A" 5 WHITESPACE@[6; 7)
6 IDENT@[7; 8) "A"
6 TYPE_PARAM_LIST@[8; 11) 7 TYPE_PARAM_LIST@[8; 11)
7 L_ANGLE@[8; 9) 8 L_ANGLE@[8; 9)
8 TYPE_PARAM@[9; 10) 9 TYPE_PARAM@[9; 10)
@@ -12,8 +13,9 @@ FILE@[0; 200)
12 WHITESPACE@[12; 13) 13 WHITESPACE@[12; 13)
13 STRUCT_ITEM@[13; 27) 14 STRUCT_ITEM@[13; 27)
14 STRUCT_KW@[13; 19) 15 STRUCT_KW@[13; 19)
15 WHITESPACE@[19; 20) 16 NAME@[19; 21)
16 IDENT@[20; 21) "B" 17 WHITESPACE@[19; 20)
18 IDENT@[20; 21) "B"
17 TYPE_PARAM_LIST@[21; 25) 19 TYPE_PARAM_LIST@[21; 25)
18 L_ANGLE@[21; 22) 20 L_ANGLE@[21; 22)
19 TYPE_PARAM@[22; 24) 21 TYPE_PARAM@[22; 24)
@@ -24,8 +26,9 @@ FILE@[0; 200)
24 WHITESPACE@[26; 27) 26 WHITESPACE@[26; 27)
25 STRUCT_ITEM@[27; 44) 27 STRUCT_ITEM@[27; 44)
26 STRUCT_KW@[27; 33) 28 STRUCT_KW@[27; 33)
27 WHITESPACE@[33; 34) 29 NAME@[33; 35)
28 IDENT@[34; 35) "C" 30 WHITESPACE@[33; 34)
31 IDENT@[34; 35) "C"
29 TYPE_PARAM_LIST@[35; 42) 32 TYPE_PARAM_LIST@[35; 42)
30 L_ANGLE@[35; 36) 33 L_ANGLE@[35; 36)
31 TYPE_PARAM@[36; 41) 34 TYPE_PARAM@[36; 41)
@@ -38,8 +41,9 @@ FILE@[0; 200)
38 WHITESPACE@[43; 44) 41 WHITESPACE@[43; 44)
39 STRUCT_ITEM@[44; 64) 42 STRUCT_ITEM@[44; 64)
40 STRUCT_KW@[44; 50) 43 STRUCT_KW@[44; 50)
41 WHITESPACE@[50; 51) 44 NAME@[50; 52)
42 IDENT@[51; 52) "D" 45 WHITESPACE@[50; 51)
46 IDENT@[51; 52) "D"
43 TYPE_PARAM_LIST@[52; 62) 47 TYPE_PARAM_LIST@[52; 62)
44 L_ANGLE@[52; 53) 48 L_ANGLE@[52; 53)
45 TYPE_PARAM@[53; 61) 49 TYPE_PARAM@[53; 61)
@@ -55,8 +59,9 @@ FILE@[0; 200)
55 WHITESPACE@[63; 64) 59 WHITESPACE@[63; 64)
56 STRUCT_ITEM@[64; 87) 60 STRUCT_ITEM@[64; 87)
57 STRUCT_KW@[64; 70) 61 STRUCT_KW@[64; 70)
58 WHITESPACE@[70; 71) 62 NAME@[70; 72)
59 IDENT@[71; 72) "E" 63 WHITESPACE@[70; 71)
64 IDENT@[71; 72) "E"
60 TYPE_PARAM_LIST@[72; 85) 65 TYPE_PARAM_LIST@[72; 85)
61 L_ANGLE@[72; 73) 66 L_ANGLE@[72; 73)
62 TYPE_PARAM@[73; 84) 67 TYPE_PARAM@[73; 84)
@@ -74,8 +79,9 @@ FILE@[0; 200)
74 WHITESPACE@[86; 87) 79 WHITESPACE@[86; 87)
75 STRUCT_ITEM@[87; 117) 80 STRUCT_ITEM@[87; 117)
76 STRUCT_KW@[87; 93) 81 STRUCT_KW@[87; 93)
77 WHITESPACE@[93; 94) 82 NAME@[93; 95)
78 IDENT@[94; 95) "F" 83 WHITESPACE@[93; 94)
84 IDENT@[94; 95) "F"
79 TYPE_PARAM_LIST@[95; 115) 85 TYPE_PARAM_LIST@[95; 115)
80 L_ANGLE@[95; 96) 86 L_ANGLE@[95; 96)
81 TYPE_PARAM@[96; 114) 87 TYPE_PARAM@[96; 114)
@@ -91,15 +97,17 @@ FILE@[0; 200)
91 PLUS@[107; 108) 97 PLUS@[107; 108)
92 PATH@[108; 114) 98 PATH@[108; 114)
93 PATH_SEGMENT@[108; 114) 99 PATH_SEGMENT@[108; 114)
94 WHITESPACE@[108; 109) 100 NAME_REF@[108; 114)
95 IDENT@[109; 114) "Clone" 101 WHITESPACE@[108; 109)
102 IDENT@[109; 114) "Clone"
96 R_ANGLE@[114; 115) 103 R_ANGLE@[114; 115)
97 SEMI@[115; 116) 104 SEMI@[115; 116)
98 WHITESPACE@[116; 117) 105 WHITESPACE@[116; 117)
99 STRUCT_ITEM@[117; 144) 106 STRUCT_ITEM@[117; 144)
100 STRUCT_KW@[117; 123) 107 STRUCT_KW@[117; 123)
101 WHITESPACE@[123; 124) 108 NAME@[123; 125)
102 IDENT@[124; 125) "G" 109 WHITESPACE@[123; 124)
110 IDENT@[124; 125) "G"
103 TYPE_PARAM_LIST@[125; 142) 111 TYPE_PARAM_LIST@[125; 142)
104 L_ANGLE@[125; 126) 112 L_ANGLE@[125; 126)
105 TYPE_PARAM@[126; 141) 113 TYPE_PARAM@[126; 141)
@@ -107,21 +115,24 @@ FILE@[0; 200)
107 COLON@[127; 128) 115 COLON@[127; 128)
108 PATH@[128; 135) 116 PATH@[128; 135)
109 PATH_SEGMENT@[128; 135) 117 PATH_SEGMENT@[128; 135)
110 WHITESPACE@[128; 129) 118 NAME_REF@[128; 135)
111 IDENT@[129; 134) "Clone" 119 WHITESPACE@[128; 129)
112 WHITESPACE@[134; 135) 120 IDENT@[129; 134) "Clone"
121 WHITESPACE@[134; 135)
113 PLUS@[135; 136) 122 PLUS@[135; 136)
114 PATH@[136; 141) 123 PATH@[136; 141)
115 PATH_SEGMENT@[136; 141) 124 PATH_SEGMENT@[136; 141)
116 WHITESPACE@[136; 137) 125 NAME_REF@[136; 141)
117 IDENT@[137; 141) "Copy" 126 WHITESPACE@[136; 137)
127 IDENT@[137; 141) "Copy"
118 R_ANGLE@[141; 142) 128 R_ANGLE@[141; 142)
119 SEMI@[142; 143) 129 SEMI@[142; 143)
120 WHITESPACE@[143; 144) 130 WHITESPACE@[143; 144)
121 STRUCT_ITEM@[144; 181) 131 STRUCT_ITEM@[144; 181)
122 STRUCT_KW@[144; 150) 132 STRUCT_KW@[144; 150)
123 WHITESPACE@[150; 151) 133 NAME@[150; 152)
124 IDENT@[151; 152) "H" 134 WHITESPACE@[150; 151)
135 IDENT@[151; 152) "H"
125 TYPE_PARAM_LIST@[152; 179) 136 TYPE_PARAM_LIST@[152; 179)
126 L_ANGLE@[152; 153) 137 L_ANGLE@[152; 153)
127 TYPE_PARAM@[153; 178) 138 TYPE_PARAM@[153; 178)
@@ -131,8 +142,9 @@ FILE@[0; 200)
131 PATH_SEGMENT@[155; 162) 142 PATH_SEGMENT@[155; 162)
132 WHITESPACE@[155; 156) 143 WHITESPACE@[155; 156)
133 COLONCOLON@[156; 158) 144 COLONCOLON@[156; 158)
134 IDENT@[158; 161) "Foo" 145 NAME_REF@[158; 162)
135 WHITESPACE@[161; 162) 146 IDENT@[158; 161) "Foo"
147 WHITESPACE@[161; 162)
136 PLUS@[162; 163) 148 PLUS@[162; 163)
137 PATH@[163; 174) 149 PATH@[163; 174)
138 PATH@[163; 168) 150 PATH@[163; 168)
@@ -141,8 +153,9 @@ FILE@[0; 200)
141 SELF_KW@[164; 168) 153 SELF_KW@[164; 168)
142 COLONCOLON@[168; 170) 154 COLONCOLON@[168; 170)
143 PATH_SEGMENT@[170; 174) 155 PATH_SEGMENT@[170; 174)
144 IDENT@[170; 173) "Bar" 156 NAME_REF@[170; 174)
145 WHITESPACE@[173; 174) 157 IDENT@[170; 173) "Bar"
158 WHITESPACE@[173; 174)
146 PLUS@[174; 175) 159 PLUS@[174; 175)
147 WHITESPACE@[175; 176) 160 WHITESPACE@[175; 176)
148 LIFETIME@[176; 178) "'a" 161 LIFETIME@[176; 178) "'a"
@@ -151,8 +164,9 @@ FILE@[0; 200)
151 WHITESPACE@[180; 181) 164 WHITESPACE@[180; 181)
152 STRUCT_ITEM@[181; 200) 165 STRUCT_ITEM@[181; 200)
153 STRUCT_KW@[181; 187) 166 STRUCT_KW@[181; 187)
154 WHITESPACE@[187; 188) 167 NAME@[187; 189)
155 IDENT@[188; 189) "I" 168 WHITESPACE@[187; 188)
169 IDENT@[188; 189) "I"
156 TYPE_PARAM_LIST@[189; 198) 170 TYPE_PARAM_LIST@[189; 198)
157 L_ANGLE@[189; 190) 171 L_ANGLE@[189; 190)
158 TYPE_PARAM@[190; 192) 172 TYPE_PARAM@[190; 192)
diff --git a/tests/data/parser/ok/0021_extern_fn.txt b/tests/data/parser/ok/0021_extern_fn.txt
index 43575bdf3..8ed7f2a25 100644
--- a/tests/data/parser/ok/0021_extern_fn.txt
+++ b/tests/data/parser/ok/0021_extern_fn.txt
@@ -4,8 +4,9 @@ FILE@[0; 71)
4 EXTERN_KW@[0; 6) 4 EXTERN_KW@[0; 6)
5 WHITESPACE@[6; 7) 5 WHITESPACE@[6; 7)
6 FN_KW@[7; 9) 6 FN_KW@[7; 9)
7 WHITESPACE@[9; 10) 7 NAME@[9; 13)
8 IDENT@[10; 13) "foo" 8 WHITESPACE@[9; 10)
9 IDENT@[10; 13) "foo"
9 L_PAREN@[13; 14) 10 L_PAREN@[13; 14)
10 R_PAREN@[14; 15) 11 R_PAREN@[14; 15)
11 WHITESPACE@[15; 16) 12 WHITESPACE@[15; 16)
@@ -20,8 +21,9 @@ FILE@[0; 71)
20 STRING@[28; 31) 21 STRING@[28; 31)
21 WHITESPACE@[31; 32) 22 WHITESPACE@[31; 32)
22 FN_KW@[32; 34) 23 FN_KW@[32; 34)
23 WHITESPACE@[34; 35) 24 NAME@[34; 38)
24 IDENT@[35; 38) "bar" 25 WHITESPACE@[34; 35)
26 IDENT@[35; 38) "bar"
25 L_PAREN@[38; 39) 27 L_PAREN@[38; 39)
26 R_PAREN@[39; 40) 28 R_PAREN@[39; 40)
27 WHITESPACE@[40; 41) 29 WHITESPACE@[40; 41)
@@ -36,8 +38,9 @@ FILE@[0; 71)
36 RAW_STRING@[53; 57) 38 RAW_STRING@[53; 57)
37 WHITESPACE@[57; 58) 39 WHITESPACE@[57; 58)
38 FN_KW@[58; 60) 40 FN_KW@[58; 60)
39 WHITESPACE@[60; 61) 41 NAME@[60; 64)
40 IDENT@[61; 64) "baz" 42 WHITESPACE@[60; 61)
43 IDENT@[61; 64) "baz"
41 L_PAREN@[64; 65) 44 L_PAREN@[64; 65)
42 R_PAREN@[65; 66) 45 R_PAREN@[65; 66)
43 WHITESPACE@[66; 67) 46 WHITESPACE@[66; 67)
diff --git a/tests/data/parser/ok/0023_static_items.txt b/tests/data/parser/ok/0023_static_items.txt
index 7cd2228fa..8872520c5 100644
--- a/tests/data/parser/ok/0023_static_items.txt
+++ b/tests/data/parser/ok/0023_static_items.txt
@@ -1,8 +1,9 @@
1FILE@[0; 47) 1FILE@[0; 47)
2 STATIC_ITEM@[0; 21) 2 STATIC_ITEM@[0; 21)
3 STATIC_KW@[0; 6) 3 STATIC_KW@[0; 6)
4 WHITESPACE@[6; 7) 4 NAME@[6; 10)
5 IDENT@[7; 10) "FOO" 5 WHITESPACE@[6; 7)
6 IDENT@[7; 10) "FOO"
6 COLON@[10; 11) 7 COLON@[10; 11)
7 WHITESPACE@[11; 12) 8 WHITESPACE@[11; 12)
8 IDENT@[12; 15) "u32" 9 IDENT@[12; 15) "u32"
@@ -17,8 +18,9 @@ FILE@[0; 47)
17 STATIC_KW@[21; 27) 18 STATIC_KW@[21; 27)
18 WHITESPACE@[27; 28) 19 WHITESPACE@[27; 28)
19 MUT_KW@[28; 31) 20 MUT_KW@[28; 31)
20 WHITESPACE@[31; 32) 21 NAME@[31; 35)
21 IDENT@[32; 35) "BAR" 22 WHITESPACE@[31; 32)
23 IDENT@[32; 35) "BAR"
22 COLON@[35; 36) 24 COLON@[35; 36)
23 WHITESPACE@[36; 37) 25 WHITESPACE@[36; 37)
24 IDENT@[37; 40) "i32" 26 IDENT@[37; 40) "i32"
diff --git a/tests/data/parser/ok/0024_const_item.txt b/tests/data/parser/ok/0024_const_item.txt
index 588e001f5..0f31d19d3 100644
--- a/tests/data/parser/ok/0024_const_item.txt
+++ b/tests/data/parser/ok/0024_const_item.txt
@@ -1,8 +1,9 @@
1FILE@[0; 46) 1FILE@[0; 46)
2 CONST_ITEM@[0; 21) 2 CONST_ITEM@[0; 21)
3 CONST_KW@[0; 5) 3 CONST_KW@[0; 5)
4 WHITESPACE@[5; 6) 4 NAME@[5; 9)
5 IDENT@[6; 9) "FOO" 5 WHITESPACE@[5; 6)
6 IDENT@[6; 9) "FOO"
6 COLON@[9; 10) 7 COLON@[9; 10)
7 WHITESPACE@[10; 11) 8 WHITESPACE@[10; 11)
8 IDENT@[11; 14) "u32" 9 IDENT@[11; 14) "u32"
@@ -17,8 +18,9 @@ FILE@[0; 46)
17 CONST_KW@[21; 26) 18 CONST_KW@[21; 26)
18 WHITESPACE@[26; 27) 19 WHITESPACE@[26; 27)
19 MUT_KW@[27; 30) 20 MUT_KW@[27; 30)
20 WHITESPACE@[30; 31) 21 NAME@[30; 34)
21 IDENT@[31; 34) "BAR" 22 WHITESPACE@[30; 31)
23 IDENT@[31; 34) "BAR"
22 COLON@[34; 35) 24 COLON@[34; 35)
23 WHITESPACE@[35; 36) 25 WHITESPACE@[35; 36)
24 IDENT@[36; 39) "u32" 26 IDENT@[36; 39) "u32"
diff --git a/tests/testutils/src/lib.rs b/tests/testutils/src/lib.rs
index d181e455b..b50e70849 100644
--- a/tests/testutils/src/lib.rs
+++ b/tests/testutils/src/lib.rs
@@ -73,16 +73,24 @@ fn test_from_dir(dir: &Path) -> Vec<PathBuf> {
73 acc 73 acc
74} 74}
75 75
76const REWRITE: bool = false;
77
76fn print_difference(expected: &str, actual: &str, path: &Path) { 78fn print_difference(expected: &str, actual: &str, path: &Path) {
77 let dir = project_dir(); 79 let dir = project_dir();
78 let path = path.strip_prefix(&dir).unwrap_or_else(|_| path); 80 let path = path.strip_prefix(&dir).unwrap_or_else(|_| path);
79 if expected.trim() == actual.trim() { 81 if expected.trim() == actual.trim() {
80 println!("whitespace difference, rewriting"); 82 println!("whitespace difference, rewriting");
83 println!("file: {}\n", path.display());
84 file::put_text(path, actual).unwrap();
85 return;
86 }
87 if REWRITE {
88 println!("rewriting {}", path.display());
81 file::put_text(path, actual).unwrap(); 89 file::put_text(path, actual).unwrap();
82 } else { 90 return;
83 let changeset = Changeset::new(actual, expected, "\n");
84 print!("{}", changeset);
85 } 91 }
92 let changeset = Changeset::new(actual, expected, "\n");
93 print!("{}", changeset);
86 println!("file: {}\n", path.display()); 94 println!("file: {}\n", path.display());
87 panic!("Comparison failed") 95 panic!("Comparison failed")
88} 96}