aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-07-31 10:32:53 +0100
committerAleksey Kladov <[email protected]>2018-07-31 10:32:53 +0100
commitff71cb1f6de07479610fb0f45e740b249e8a01c6 (patch)
tree29df6315075f7e0339e8687a78a5bfcef776f900
parentc244dd10343ff96a73879c593bd9253c4073cb90 (diff)
Introduce param & arg list
-rw-r--r--src/grammar.ron3
-rw-r--r--src/parser/grammar/expressions.rs9
-rw-r--r--src/parser/grammar/mod.rs2
-rw-r--r--src/syntax_kinds/generated.rs4
-rw-r--r--tests/data/parser/err/0005_attribute_recover.txt14
-rw-r--r--tests/data/parser/err/0007_stray_curly_in_file.txt5
-rw-r--r--tests/data/parser/err/0008_item_block_recovery.txt14
-rw-r--r--tests/data/parser/inline/0001_const_unsafe_fn.txt7
-rw-r--r--tests/data/parser/inline/0002_const_fn.txt7
-rw-r--r--tests/data/parser/inline/0004_extern_fn.txt7
-rw-r--r--tests/data/parser/inline/0011_unsafe_fn.txt7
-rw-r--r--tests/data/parser/inline/0012_unsafe_extern_fn.txt7
-rw-r--r--tests/data/parser/inline/0013_unsafe_block_in_mod.txt10
-rw-r--r--tests/data/parser/inline/0028_fn_pointer_type.txt15
-rw-r--r--tests/data/parser/inline/0030_fn_pointer_type_with_ret.txt7
-rw-r--r--tests/data/parser/inline/0031_for_type.txt7
-rw-r--r--tests/data/parser/inline/0033_fn_value_parameters.txt120
-rw-r--r--tests/data/parser/inline/0034_bind_pat.txt7
-rw-r--r--tests/data/parser/inline/0035_ref_pat.txt7
-rw-r--r--tests/data/parser/inline/0036_placeholder_pat.txt7
-rw-r--r--tests/data/parser/inline/0038_fn_item_ret_type.txt14
-rw-r--r--tests/data/parser/inline/0039_path_expr.txt7
-rw-r--r--tests/data/parser/inline/0040_expr_literals.txt7
-rw-r--r--tests/data/parser/inline/0043_call_expr.txt45
-rw-r--r--tests/data/parser/ok/0005_fn_item.txt7
-rw-r--r--tests/data/parser/ok/0008_mod_item.txt7
-rw-r--r--tests/data/parser/ok/0011_outer_attribute.txt7
-rw-r--r--tests/data/parser/ok/0012_visibility.txt35
-rw-r--r--tests/data/parser/ok/0017_attr_trailing_comma.txt7
-rw-r--r--tests/data/parser/ok/0021_extern_fn.txt21
30 files changed, 242 insertions, 181 deletions
diff --git a/src/grammar.ron b/src/grammar.ron
index 5b8a9219c..f640ccb7b 100644
--- a/src/grammar.ron
+++ b/src/grammar.ron
@@ -151,5 +151,8 @@ Grammar(
151 "LIFETIME_PARAM", 151 "LIFETIME_PARAM",
152 "TYPE_PARAM_LIST", 152 "TYPE_PARAM_LIST",
153 "TYPE_ARG_LIST", 153 "TYPE_ARG_LIST",
154
155 "PARAM_LIST",
156 "ARG_LIST",
154 ] 157 ]
155) 158)
diff --git a/src/parser/grammar/expressions.rs b/src/parser/grammar/expressions.rs
index 92aaafa3d..7991b1921 100644
--- a/src/parser/grammar/expressions.rs
+++ b/src/parser/grammar/expressions.rs
@@ -70,6 +70,13 @@ fn tuple_expr(p: &mut Parser) -> CompletedMarker {
70fn call_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { 70fn call_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker {
71 assert!(p.at(L_PAREN)); 71 assert!(p.at(L_PAREN));
72 let m = lhs.precede(p); 72 let m = lhs.precede(p);
73 arg_list(p);
74 m.complete(p, CALL_EXPR)
75}
76
77fn arg_list(p: &mut Parser) {
78 assert!(p.at(L_PAREN));
79 let m = p.start();
73 p.bump(); 80 p.bump();
74 while !p.at(R_PAREN) && !p.at(EOF) { 81 while !p.at(R_PAREN) && !p.at(EOF) {
75 expr(p); 82 expr(p);
@@ -78,7 +85,7 @@ fn call_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker {
78 } 85 }
79 } 86 }
80 p.eat(R_PAREN); 87 p.eat(R_PAREN);
81 m.complete(p, CALL_EXPR) 88 m.complete(p, ARG_LIST);
82} 89}
83 90
84// test path_expr 91// test path_expr
diff --git a/src/parser/grammar/mod.rs b/src/parser/grammar/mod.rs
index 63ad2782e..c2da775a2 100644
--- a/src/parser/grammar/mod.rs
+++ b/src/parser/grammar/mod.rs
@@ -99,6 +99,7 @@ fn abi(p: &mut Parser) {
99// fn d(x: i32, y: ()) {} 99// fn d(x: i32, y: ()) {}
100fn fn_value_parameters(p: &mut Parser) { 100fn fn_value_parameters(p: &mut Parser) {
101 assert!(p.at(L_PAREN)); 101 assert!(p.at(L_PAREN));
102 let m = p.start();
102 p.bump(); 103 p.bump();
103 while !p.at(EOF) && !p.at(R_PAREN) { 104 while !p.at(EOF) && !p.at(R_PAREN) {
104 value_parameter(p); 105 value_parameter(p);
@@ -107,6 +108,7 @@ fn fn_value_parameters(p: &mut Parser) {
107 } 108 }
108 } 109 }
109 p.expect(R_PAREN); 110 p.expect(R_PAREN);
111 m.complete(p, PARAM_LIST);
110 112
111 fn value_parameter(p: &mut Parser) { 113 fn value_parameter(p: &mut Parser) {
112 let m = p.start(); 114 let m = p.start();
diff --git a/src/syntax_kinds/generated.rs b/src/syntax_kinds/generated.rs
index 1d0f1b724..986df7814 100644
--- a/src/syntax_kinds/generated.rs
+++ b/src/syntax_kinds/generated.rs
@@ -140,6 +140,8 @@ pub enum SyntaxKind {
140 LIFETIME_PARAM, 140 LIFETIME_PARAM,
141 TYPE_PARAM_LIST, 141 TYPE_PARAM_LIST,
142 TYPE_ARG_LIST, 142 TYPE_ARG_LIST,
143 PARAM_LIST,
144 ARG_LIST,
143 // Technical SyntaxKinds: they appear temporally during parsing, 145 // Technical SyntaxKinds: they appear temporally during parsing,
144 // but never end up in the final tree 146 // but never end up in the final tree
145 #[doc(hidden)] 147 #[doc(hidden)]
@@ -287,6 +289,8 @@ impl SyntaxKind {
287 LIFETIME_PARAM => &SyntaxInfo { name: "LIFETIME_PARAM" }, 289 LIFETIME_PARAM => &SyntaxInfo { name: "LIFETIME_PARAM" },
288 TYPE_PARAM_LIST => &SyntaxInfo { name: "TYPE_PARAM_LIST" }, 290 TYPE_PARAM_LIST => &SyntaxInfo { name: "TYPE_PARAM_LIST" },
289 TYPE_ARG_LIST => &SyntaxInfo { name: "TYPE_ARG_LIST" }, 291 TYPE_ARG_LIST => &SyntaxInfo { name: "TYPE_ARG_LIST" },
292 PARAM_LIST => &SyntaxInfo { name: "PARAM_LIST" },
293 ARG_LIST => &SyntaxInfo { name: "ARG_LIST" },
290 TOMBSTONE => &SyntaxInfo { name: "TOMBSTONE" }, 294 TOMBSTONE => &SyntaxInfo { name: "TOMBSTONE" },
291 EOF => &SyntaxInfo { name: "EOF" }, 295 EOF => &SyntaxInfo { name: "EOF" },
292 } 296 }
diff --git a/tests/data/parser/err/0005_attribute_recover.txt b/tests/data/parser/err/0005_attribute_recover.txt
index 74dd38959..78e58e0df 100644
--- a/tests/data/parser/err/0005_attribute_recover.txt
+++ b/tests/data/parser/err/0005_attribute_recover.txt
@@ -26,10 +26,11 @@ FILE@[0; 54)
26 NAME@[21; 25) 26 NAME@[21; 25)
27 WHITESPACE@[21; 22) 27 WHITESPACE@[21; 22)
28 IDENT@[22; 25) "foo" 28 IDENT@[22; 25) "foo"
29 L_PAREN@[25; 26) 29 PARAM_LIST@[25; 28)
30 R_PAREN@[26; 27) 30 L_PAREN@[25; 26)
31 BLOCK@[27; 34) 31 R_PAREN@[26; 27)
32 WHITESPACE@[27; 28) 32 WHITESPACE@[27; 28)
33 BLOCK@[28; 34)
33 L_CURLY@[28; 29) 34 L_CURLY@[28; 29)
34 WHITESPACE@[29; 30) 35 WHITESPACE@[29; 30)
35 R_CURLY@[30; 31) 36 R_CURLY@[30; 31)
@@ -48,10 +49,11 @@ FILE@[0; 54)
48 NAME@[43; 47) 49 NAME@[43; 47)
49 WHITESPACE@[43; 44) 50 WHITESPACE@[43; 44)
50 IDENT@[44; 47) "foo" 51 IDENT@[44; 47) "foo"
51 L_PAREN@[47; 48) 52 PARAM_LIST@[47; 50)
52 R_PAREN@[48; 49) 53 L_PAREN@[47; 48)
53 BLOCK@[49; 54) 54 R_PAREN@[48; 49)
54 WHITESPACE@[49; 50) 55 WHITESPACE@[49; 50)
56 BLOCK@[50; 54)
55 L_CURLY@[50; 51) 57 L_CURLY@[50; 51)
56 WHITESPACE@[51; 52) 58 WHITESPACE@[51; 52)
57 R_CURLY@[52; 53) 59 R_CURLY@[52; 53)
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 cfc714cc6..6995ec6ff 100644
--- a/tests/data/parser/err/0007_stray_curly_in_file.txt
+++ b/tests/data/parser/err/0007_stray_curly_in_file.txt
@@ -19,8 +19,9 @@ err: `expected item`
19 NAME@[19; 23) 19 NAME@[19; 23)
20 WHITESPACE@[19; 20) 20 WHITESPACE@[19; 20)
21 IDENT@[20; 23) "foo" 21 IDENT@[20; 23) "foo"
22 L_PAREN@[23; 24) 22 PARAM_LIST@[23; 25)
23 R_PAREN@[24; 25) 23 L_PAREN@[23; 24)
24 R_PAREN@[24; 25)
24 BLOCK@[25; 29) 25 BLOCK@[25; 29)
25 L_CURLY@[25; 26) 26 L_CURLY@[25; 26)
26 R_CURLY@[26; 27) 27 R_CURLY@[26; 27)
diff --git a/tests/data/parser/err/0008_item_block_recovery.txt b/tests/data/parser/err/0008_item_block_recovery.txt
index ca332bcf0..05be13646 100644
--- a/tests/data/parser/err/0008_item_block_recovery.txt
+++ b/tests/data/parser/err/0008_item_block_recovery.txt
@@ -4,10 +4,11 @@ FILE@[0; 95)
4 NAME@[2; 6) 4 NAME@[2; 6)
5 WHITESPACE@[2; 3) 5 WHITESPACE@[2; 3)
6 IDENT@[3; 6) "foo" 6 IDENT@[3; 6) "foo"
7 L_PAREN@[6; 7) 7 PARAM_LIST@[6; 9)
8 R_PAREN@[7; 8) 8 L_PAREN@[6; 7)
9 BLOCK@[8; 14) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK@[9; 14)
11 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
12 WHITESPACE@[10; 11) 13 WHITESPACE@[10; 11)
13 R_CURLY@[11; 12) 14 R_CURLY@[11; 12)
@@ -55,10 +56,11 @@ FILE@[0; 95)
55 NAME@[84; 88) 56 NAME@[84; 88)
56 WHITESPACE@[84; 85) 57 WHITESPACE@[84; 85)
57 IDENT@[85; 88) "baz" 58 IDENT@[85; 88) "baz"
58 L_PAREN@[88; 89) 59 PARAM_LIST@[88; 91)
59 R_PAREN@[89; 90) 60 L_PAREN@[88; 89)
60 BLOCK@[90; 95) 61 R_PAREN@[89; 90)
61 WHITESPACE@[90; 91) 62 WHITESPACE@[90; 91)
63 BLOCK@[91; 95)
62 L_CURLY@[91; 92) 64 L_CURLY@[91; 92)
63 WHITESPACE@[92; 93) 65 WHITESPACE@[92; 93)
64 R_CURLY@[93; 94) 66 R_CURLY@[93; 94)
diff --git a/tests/data/parser/inline/0001_const_unsafe_fn.txt b/tests/data/parser/inline/0001_const_unsafe_fn.txt
index 48de02284..a06674e61 100644
--- a/tests/data/parser/inline/0001_const_unsafe_fn.txt
+++ b/tests/data/parser/inline/0001_const_unsafe_fn.txt
@@ -8,10 +8,11 @@ FILE@[0; 25)
8 NAME@[15; 19) 8 NAME@[15; 19)
9 WHITESPACE@[15; 16) 9 WHITESPACE@[15; 16)
10 IDENT@[16; 19) "foo" 10 IDENT@[16; 19) "foo"
11 L_PAREN@[19; 20) 11 PARAM_LIST@[19; 22)
12 R_PAREN@[20; 21) 12 L_PAREN@[19; 20)
13 BLOCK@[21; 25) 13 R_PAREN@[20; 21)
14 WHITESPACE@[21; 22) 14 WHITESPACE@[21; 22)
15 BLOCK@[22; 25)
15 L_CURLY@[22; 23) 16 L_CURLY@[22; 23)
16 R_CURLY@[23; 24) 17 R_CURLY@[23; 24)
17 WHITESPACE@[24; 25) 18 WHITESPACE@[24; 25)
diff --git a/tests/data/parser/inline/0002_const_fn.txt b/tests/data/parser/inline/0002_const_fn.txt
index 733e47656..8feacb191 100644
--- a/tests/data/parser/inline/0002_const_fn.txt
+++ b/tests/data/parser/inline/0002_const_fn.txt
@@ -6,10 +6,11 @@ FILE@[0; 18)
6 NAME@[8; 12) 6 NAME@[8; 12)
7 WHITESPACE@[8; 9) 7 WHITESPACE@[8; 9)
8 IDENT@[9; 12) "foo" 8 IDENT@[9; 12) "foo"
9 L_PAREN@[12; 13) 9 PARAM_LIST@[12; 15)
10 R_PAREN@[13; 14) 10 L_PAREN@[12; 13)
11 BLOCK@[14; 18) 11 R_PAREN@[13; 14)
12 WHITESPACE@[14; 15) 12 WHITESPACE@[14; 15)
13 BLOCK@[15; 18)
13 L_CURLY@[15; 16) 14 L_CURLY@[15; 16)
14 R_CURLY@[16; 17) 15 R_CURLY@[16; 17)
15 WHITESPACE@[17; 18) 16 WHITESPACE@[17; 18)
diff --git a/tests/data/parser/inline/0004_extern_fn.txt b/tests/data/parser/inline/0004_extern_fn.txt
index 1caeffe3b..ca79112b9 100644
--- a/tests/data/parser/inline/0004_extern_fn.txt
+++ b/tests/data/parser/inline/0004_extern_fn.txt
@@ -7,10 +7,11 @@ FILE@[0; 19)
7 NAME@[9; 13) 7 NAME@[9; 13)
8 WHITESPACE@[9; 10) 8 WHITESPACE@[9; 10)
9 IDENT@[10; 13) "foo" 9 IDENT@[10; 13) "foo"
10 L_PAREN@[13; 14) 10 PARAM_LIST@[13; 16)
11 R_PAREN@[14; 15) 11 L_PAREN@[13; 14)
12 BLOCK@[15; 19) 12 R_PAREN@[14; 15)
13 WHITESPACE@[15; 16) 13 WHITESPACE@[15; 16)
14 BLOCK@[16; 19)
14 L_CURLY@[16; 17) 15 L_CURLY@[16; 17)
15 R_CURLY@[17; 18) 16 R_CURLY@[17; 18)
16 WHITESPACE@[18; 19) 17 WHITESPACE@[18; 19)
diff --git a/tests/data/parser/inline/0011_unsafe_fn.txt b/tests/data/parser/inline/0011_unsafe_fn.txt
index d89ad451f..b0ef1e2cd 100644
--- a/tests/data/parser/inline/0011_unsafe_fn.txt
+++ b/tests/data/parser/inline/0011_unsafe_fn.txt
@@ -6,10 +6,11 @@ FILE@[0; 19)
6 NAME@[9; 13) 6 NAME@[9; 13)
7 WHITESPACE@[9; 10) 7 WHITESPACE@[9; 10)
8 IDENT@[10; 13) "foo" 8 IDENT@[10; 13) "foo"
9 L_PAREN@[13; 14) 9 PARAM_LIST@[13; 16)
10 R_PAREN@[14; 15) 10 L_PAREN@[13; 14)
11 BLOCK@[15; 19) 11 R_PAREN@[14; 15)
12 WHITESPACE@[15; 16) 12 WHITESPACE@[15; 16)
13 BLOCK@[16; 19)
13 L_CURLY@[16; 17) 14 L_CURLY@[16; 17)
14 R_CURLY@[17; 18) 15 R_CURLY@[17; 18)
15 WHITESPACE@[18; 19) 16 WHITESPACE@[18; 19)
diff --git a/tests/data/parser/inline/0012_unsafe_extern_fn.txt b/tests/data/parser/inline/0012_unsafe_extern_fn.txt
index b4c602380..3fef8ec22 100644
--- a/tests/data/parser/inline/0012_unsafe_extern_fn.txt
+++ b/tests/data/parser/inline/0012_unsafe_extern_fn.txt
@@ -11,10 +11,11 @@ FILE@[0; 30)
11 NAME@[20; 24) 11 NAME@[20; 24)
12 WHITESPACE@[20; 21) 12 WHITESPACE@[20; 21)
13 IDENT@[21; 24) "foo" 13 IDENT@[21; 24) "foo"
14 L_PAREN@[24; 25) 14 PARAM_LIST@[24; 27)
15 R_PAREN@[25; 26) 15 L_PAREN@[24; 25)
16 BLOCK@[26; 30) 16 R_PAREN@[25; 26)
17 WHITESPACE@[26; 27) 17 WHITESPACE@[26; 27)
18 BLOCK@[27; 30)
18 L_CURLY@[27; 28) 19 L_CURLY@[27; 28)
19 R_CURLY@[28; 29) 20 R_CURLY@[28; 29)
20 WHITESPACE@[29; 30) 21 WHITESPACE@[29; 30)
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 3b56378a3..77644d52c 100644
--- a/tests/data/parser/inline/0013_unsafe_block_in_mod.txt
+++ b/tests/data/parser/inline/0013_unsafe_block_in_mod.txt
@@ -4,8 +4,9 @@ FILE@[0; 33)
4 NAME@[2; 6) 4 NAME@[2; 6)
5 WHITESPACE@[2; 3) 5 WHITESPACE@[2; 3)
6 IDENT@[3; 6) "foo" 6 IDENT@[3; 6) "foo"
7 L_PAREN@[6; 7) 7 PARAM_LIST@[6; 8)
8 R_PAREN@[7; 8) 8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8)
9 BLOCK@[8; 11) 10 BLOCK@[8; 11)
10 L_CURLY@[8; 9) 11 L_CURLY@[8; 9)
11 R_CURLY@[9; 10) 12 R_CURLY@[9; 10)
@@ -23,8 +24,9 @@ FILE@[0; 33)
23 NAME@[24; 28) 24 NAME@[24; 28)
24 WHITESPACE@[24; 25) 25 WHITESPACE@[24; 25)
25 IDENT@[25; 28) "bar" 26 IDENT@[25; 28) "bar"
26 L_PAREN@[28; 29) 27 PARAM_LIST@[28; 30)
27 R_PAREN@[29; 30) 28 L_PAREN@[28; 29)
29 R_PAREN@[29; 30)
28 BLOCK@[30; 33) 30 BLOCK@[30; 33)
29 L_CURLY@[30; 31) 31 L_CURLY@[30; 31)
30 R_CURLY@[31; 32) 32 R_CURLY@[31; 32)
diff --git a/tests/data/parser/inline/0028_fn_pointer_type.txt b/tests/data/parser/inline/0028_fn_pointer_type.txt
index 6c62b0051..21bc066e3 100644
--- a/tests/data/parser/inline/0028_fn_pointer_type.txt
+++ b/tests/data/parser/inline/0028_fn_pointer_type.txt
@@ -9,8 +9,9 @@ FILE@[0; 70)
9 FN_POINTER_TYPE@[8; 13) 9 FN_POINTER_TYPE@[8; 13)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 FN_KW@[9; 11) 11 FN_KW@[9; 11)
12 L_PAREN@[11; 12) 12 PARAM_LIST@[11; 13)
13 R_PAREN@[12; 13) 13 L_PAREN@[11; 12)
14 R_PAREN@[12; 13)
14 SEMI@[13; 14) 15 SEMI@[13; 14)
15 WHITESPACE@[14; 15) 16 WHITESPACE@[14; 15)
16 TYPE_ITEM@[15; 37) 17 TYPE_ITEM@[15; 37)
@@ -25,8 +26,9 @@ FILE@[0; 70)
25 UNSAFE_KW@[24; 30) 26 UNSAFE_KW@[24; 30)
26 WHITESPACE@[30; 31) 27 WHITESPACE@[30; 31)
27 FN_KW@[31; 33) 28 FN_KW@[31; 33)
28 L_PAREN@[33; 34) 29 PARAM_LIST@[33; 35)
29 R_PAREN@[34; 35) 30 L_PAREN@[33; 34)
31 R_PAREN@[34; 35)
30 SEMI@[35; 36) 32 SEMI@[35; 36)
31 WHITESPACE@[36; 37) 33 WHITESPACE@[36; 37)
32 TYPE_ITEM@[37; 70) 34 TYPE_ITEM@[37; 70)
@@ -46,7 +48,8 @@ FILE@[0; 70)
46 STRING@[60; 63) 48 STRING@[60; 63)
47 WHITESPACE@[63; 64) 49 WHITESPACE@[63; 64)
48 FN_KW@[64; 66) 50 FN_KW@[64; 66)
49 L_PAREN@[66; 67) 51 PARAM_LIST@[66; 68)
50 R_PAREN@[67; 68) 52 L_PAREN@[66; 67)
53 R_PAREN@[67; 68)
51 SEMI@[68; 69) 54 SEMI@[68; 69)
52 WHITESPACE@[69; 70) 55 WHITESPACE@[69; 70)
diff --git a/tests/data/parser/inline/0030_fn_pointer_type_with_ret.txt b/tests/data/parser/inline/0030_fn_pointer_type_with_ret.txt
index b41efa368..a72af3f09 100644
--- a/tests/data/parser/inline/0030_fn_pointer_type_with_ret.txt
+++ b/tests/data/parser/inline/0030_fn_pointer_type_with_ret.txt
@@ -9,9 +9,10 @@ FILE@[0; 21)
9 FN_POINTER_TYPE@[8; 19) 9 FN_POINTER_TYPE@[8; 19)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 FN_KW@[9; 11) 11 FN_KW@[9; 11)
12 L_PAREN@[11; 12) 12 PARAM_LIST@[11; 14)
13 R_PAREN@[12; 13) 13 L_PAREN@[11; 12)
14 WHITESPACE@[13; 14) 14 R_PAREN@[12; 13)
15 WHITESPACE@[13; 14)
15 THIN_ARROW@[14; 16) 16 THIN_ARROW@[14; 16)
16 TUPLE_TYPE@[16; 19) 17 TUPLE_TYPE@[16; 19)
17 WHITESPACE@[16; 17) 18 WHITESPACE@[16; 17)
diff --git a/tests/data/parser/inline/0031_for_type.txt b/tests/data/parser/inline/0031_for_type.txt
index 0211950bc..94ce22f5d 100644
--- a/tests/data/parser/inline/0031_for_type.txt
+++ b/tests/data/parser/inline/0031_for_type.txt
@@ -17,9 +17,10 @@ FILE@[0; 29)
17 WHITESPACE@[16; 17) 17 WHITESPACE@[16; 17)
18 FN_POINTER_TYPE@[17; 27) 18 FN_POINTER_TYPE@[17; 27)
19 FN_KW@[17; 19) 19 FN_KW@[17; 19)
20 L_PAREN@[19; 20) 20 PARAM_LIST@[19; 22)
21 R_PAREN@[20; 21) 21 L_PAREN@[19; 20)
22 WHITESPACE@[21; 22) 22 R_PAREN@[20; 21)
23 WHITESPACE@[21; 22)
23 THIN_ARROW@[22; 24) 24 THIN_ARROW@[22; 24)
24 TUPLE_TYPE@[24; 27) 25 TUPLE_TYPE@[24; 27)
25 WHITESPACE@[24; 25) 26 WHITESPACE@[24; 25)
diff --git a/tests/data/parser/inline/0033_fn_value_parameters.txt b/tests/data/parser/inline/0033_fn_value_parameters.txt
index b0a5ff6b4..96e03d71a 100644
--- a/tests/data/parser/inline/0033_fn_value_parameters.txt
+++ b/tests/data/parser/inline/0033_fn_value_parameters.txt
@@ -4,10 +4,11 @@ FILE@[0; 67)
4 NAME@[2; 4) 4 NAME@[2; 4)
5 WHITESPACE@[2; 3) 5 WHITESPACE@[2; 3)
6 IDENT@[3; 4) "a" 6 IDENT@[3; 4) "a"
7 L_PAREN@[4; 5) 7 PARAM_LIST@[4; 7)
8 R_PAREN@[5; 6) 8 L_PAREN@[4; 5)
9 BLOCK@[6; 10) 9 R_PAREN@[5; 6)
10 WHITESPACE@[6; 7) 10 WHITESPACE@[6; 7)
11 BLOCK@[7; 10)
11 L_CURLY@[7; 8) 12 L_CURLY@[7; 8)
12 R_CURLY@[8; 9) 13 R_CURLY@[8; 9)
13 WHITESPACE@[9; 10) 14 WHITESPACE@[9; 10)
@@ -16,21 +17,22 @@ FILE@[0; 67)
16 NAME@[12; 14) 17 NAME@[12; 14)
17 WHITESPACE@[12; 13) 18 WHITESPACE@[12; 13)
18 IDENT@[13; 14) "b" 19 IDENT@[13; 14) "b"
19 L_PAREN@[14; 15) 20 PARAM_LIST@[14; 23)
20 VALUE_PARAMETER@[15; 21) 21 L_PAREN@[14; 15)
21 BIND_PAT@[15; 16) 22 VALUE_PARAMETER@[15; 21)
22 NAME@[15; 16) 23 BIND_PAT@[15; 16)
23 IDENT@[15; 16) "x" 24 NAME@[15; 16)
24 COLON@[16; 17) 25 IDENT@[15; 16) "x"
25 PATH_TYPE@[17; 21) 26 COLON@[16; 17)
26 PATH@[17; 21) 27 PATH_TYPE@[17; 21)
27 PATH_SEGMENT@[17; 21) 28 PATH@[17; 21)
28 NAME_REF@[17; 21) 29 PATH_SEGMENT@[17; 21)
29 WHITESPACE@[17; 18) 30 NAME_REF@[17; 21)
30 IDENT@[18; 21) "i32" 31 WHITESPACE@[17; 18)
31 R_PAREN@[21; 22) 32 IDENT@[18; 21) "i32"
32 BLOCK@[22; 26) 33 R_PAREN@[21; 22)
33 WHITESPACE@[22; 23) 34 WHITESPACE@[22; 23)
35 BLOCK@[23; 26)
34 L_CURLY@[23; 24) 36 L_CURLY@[23; 24)
35 R_CURLY@[24; 25) 37 R_CURLY@[24; 25)
36 WHITESPACE@[25; 26) 38 WHITESPACE@[25; 26)
@@ -39,23 +41,24 @@ FILE@[0; 67)
39 NAME@[28; 30) 41 NAME@[28; 30)
40 WHITESPACE@[28; 29) 42 WHITESPACE@[28; 29)
41 IDENT@[29; 30) "c" 43 IDENT@[29; 30) "c"
42 L_PAREN@[30; 31) 44 PARAM_LIST@[30; 41)
43 VALUE_PARAMETER@[31; 37) 45 L_PAREN@[30; 31)
44 BIND_PAT@[31; 32) 46 VALUE_PARAMETER@[31; 37)
45 NAME@[31; 32) 47 BIND_PAT@[31; 32)
46 IDENT@[31; 32) "x" 48 NAME@[31; 32)
47 COLON@[32; 33) 49 IDENT@[31; 32) "x"
48 PATH_TYPE@[33; 37) 50 COLON@[32; 33)
49 PATH@[33; 37) 51 PATH_TYPE@[33; 37)
50 PATH_SEGMENT@[33; 37) 52 PATH@[33; 37)
51 NAME_REF@[33; 37) 53 PATH_SEGMENT@[33; 37)
52 WHITESPACE@[33; 34) 54 NAME_REF@[33; 37)
53 IDENT@[34; 37) "i32" 55 WHITESPACE@[33; 34)
54 COMMA@[37; 38) 56 IDENT@[34; 37) "i32"
55 WHITESPACE@[38; 39) 57 COMMA@[37; 38)
56 R_PAREN@[39; 40) 58 WHITESPACE@[38; 39)
57 BLOCK@[40; 44) 59 R_PAREN@[39; 40)
58 WHITESPACE@[40; 41) 60 WHITESPACE@[40; 41)
61 BLOCK@[41; 44)
59 L_CURLY@[41; 42) 62 L_CURLY@[41; 42)
60 R_CURLY@[42; 43) 63 R_CURLY@[42; 43)
61 WHITESPACE@[43; 44) 64 WHITESPACE@[43; 44)
@@ -64,32 +67,33 @@ FILE@[0; 67)
64 NAME@[46; 48) 67 NAME@[46; 48)
65 WHITESPACE@[46; 47) 68 WHITESPACE@[46; 47)
66 IDENT@[47; 48) "d" 69 IDENT@[47; 48) "d"
67 L_PAREN@[48; 49) 70 PARAM_LIST@[48; 64)
68 VALUE_PARAMETER@[49; 55) 71 L_PAREN@[48; 49)
69 BIND_PAT@[49; 50) 72 VALUE_PARAMETER@[49; 55)
70 NAME@[49; 50) 73 BIND_PAT@[49; 50)
71 IDENT@[49; 50) "x" 74 NAME@[49; 50)
72 COLON@[50; 51) 75 IDENT@[49; 50) "x"
73 PATH_TYPE@[51; 55) 76 COLON@[50; 51)
74 PATH@[51; 55) 77 PATH_TYPE@[51; 55)
75 PATH_SEGMENT@[51; 55) 78 PATH@[51; 55)
76 NAME_REF@[51; 55) 79 PATH_SEGMENT@[51; 55)
77 WHITESPACE@[51; 52) 80 NAME_REF@[51; 55)
78 IDENT@[52; 55) "i32" 81 WHITESPACE@[51; 52)
79 COMMA@[55; 56) 82 IDENT@[52; 55) "i32"
80 VALUE_PARAMETER@[56; 62) 83 COMMA@[55; 56)
81 BIND_PAT@[56; 58) 84 VALUE_PARAMETER@[56; 62)
82 NAME@[56; 58) 85 BIND_PAT@[56; 58)
83 WHITESPACE@[56; 57) 86 NAME@[56; 58)
84 IDENT@[57; 58) "y" 87 WHITESPACE@[56; 57)
85 COLON@[58; 59) 88 IDENT@[57; 58) "y"
86 TUPLE_TYPE@[59; 62) 89 COLON@[58; 59)
87 WHITESPACE@[59; 60) 90 TUPLE_TYPE@[59; 62)
88 L_PAREN@[60; 61) 91 WHITESPACE@[59; 60)
89 R_PAREN@[61; 62) 92 L_PAREN@[60; 61)
90 R_PAREN@[62; 63) 93 R_PAREN@[61; 62)
91 BLOCK@[63; 67) 94 R_PAREN@[62; 63)
92 WHITESPACE@[63; 64) 95 WHITESPACE@[63; 64)
96 BLOCK@[64; 67)
93 L_CURLY@[64; 65) 97 L_CURLY@[64; 65)
94 R_CURLY@[65; 66) 98 R_CURLY@[65; 66)
95 WHITESPACE@[66; 67) 99 WHITESPACE@[66; 67)
diff --git a/tests/data/parser/inline/0034_bind_pat.txt b/tests/data/parser/inline/0034_bind_pat.txt
index 426e37e97..c799a560c 100644
--- a/tests/data/parser/inline/0034_bind_pat.txt
+++ b/tests/data/parser/inline/0034_bind_pat.txt
@@ -4,10 +4,11 @@ FILE@[0; 94)
4 NAME@[2; 7) 4 NAME@[2; 7)
5 WHITESPACE@[2; 3) 5 WHITESPACE@[2; 3)
6 IDENT@[3; 7) "main" 6 IDENT@[3; 7) "main"
7 L_PAREN@[7; 8) 7 PARAM_LIST@[7; 10)
8 R_PAREN@[8; 9) 8 L_PAREN@[7; 8)
9 BLOCK@[9; 94) 9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10) 10 WHITESPACE@[9; 10)
11 BLOCK@[10; 94)
11 L_CURLY@[10; 11) 12 L_CURLY@[10; 11)
12 LET_STMT@[11; 32) 13 LET_STMT@[11; 32)
13 WHITESPACE@[11; 16) 14 WHITESPACE@[11; 16)
diff --git a/tests/data/parser/inline/0035_ref_pat.txt b/tests/data/parser/inline/0035_ref_pat.txt
index 57623f31c..83700c1d8 100644
--- a/tests/data/parser/inline/0035_ref_pat.txt
+++ b/tests/data/parser/inline/0035_ref_pat.txt
@@ -4,10 +4,11 @@ FILE@[0; 52)
4 NAME@[2; 7) 4 NAME@[2; 7)
5 WHITESPACE@[2; 3) 5 WHITESPACE@[2; 3)
6 IDENT@[3; 7) "main" 6 IDENT@[3; 7) "main"
7 L_PAREN@[7; 8) 7 PARAM_LIST@[7; 10)
8 R_PAREN@[8; 9) 8 L_PAREN@[7; 8)
9 BLOCK@[9; 52) 9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10) 10 WHITESPACE@[9; 10)
11 BLOCK@[10; 52)
11 L_CURLY@[10; 11) 12 L_CURLY@[10; 11)
12 LET_STMT@[11; 33) 13 LET_STMT@[11; 33)
13 WHITESPACE@[11; 16) 14 WHITESPACE@[11; 16)
diff --git a/tests/data/parser/inline/0036_placeholder_pat.txt b/tests/data/parser/inline/0036_placeholder_pat.txt
index 06b84c2b5..8bc547510 100644
--- a/tests/data/parser/inline/0036_placeholder_pat.txt
+++ b/tests/data/parser/inline/0036_placeholder_pat.txt
@@ -4,10 +4,11 @@ FILE@[0; 26)
4 NAME@[2; 7) 4 NAME@[2; 7)
5 WHITESPACE@[2; 3) 5 WHITESPACE@[2; 3)
6 IDENT@[3; 7) "main" 6 IDENT@[3; 7) "main"
7 L_PAREN@[7; 8) 7 PARAM_LIST@[7; 10)
8 R_PAREN@[8; 9) 8 L_PAREN@[7; 8)
9 BLOCK@[9; 26) 9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10) 10 WHITESPACE@[9; 10)
11 BLOCK@[10; 26)
11 L_CURLY@[10; 11) 12 L_CURLY@[10; 11)
12 LET_STMT@[11; 24) 13 LET_STMT@[11; 24)
13 WHITESPACE@[11; 12) 14 WHITESPACE@[11; 12)
diff --git a/tests/data/parser/inline/0038_fn_item_ret_type.txt b/tests/data/parser/inline/0038_fn_item_ret_type.txt
index f7802c54e..5f77cf595 100644
--- a/tests/data/parser/inline/0038_fn_item_ret_type.txt
+++ b/tests/data/parser/inline/0038_fn_item_ret_type.txt
@@ -4,10 +4,11 @@ FILE@[0; 30)
4 NAME@[2; 6) 4 NAME@[2; 6)
5 WHITESPACE@[2; 3) 5 WHITESPACE@[2; 3)
6 IDENT@[3; 6) "foo" 6 IDENT@[3; 6) "foo"
7 L_PAREN@[6; 7) 7 PARAM_LIST@[6; 9)
8 R_PAREN@[7; 8) 8 L_PAREN@[6; 7)
9 BLOCK@[8; 12) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK@[9; 12)
11 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
12 R_CURLY@[10; 11) 13 R_CURLY@[10; 11)
13 WHITESPACE@[11; 12) 14 WHITESPACE@[11; 12)
@@ -16,9 +17,10 @@ FILE@[0; 30)
16 NAME@[14; 18) 17 NAME@[14; 18)
17 WHITESPACE@[14; 15) 18 WHITESPACE@[14; 15)
18 IDENT@[15; 18) "bar" 19 IDENT@[15; 18) "bar"
19 L_PAREN@[18; 19) 20 PARAM_LIST@[18; 21)
20 R_PAREN@[19; 20) 21 L_PAREN@[18; 19)
21 WHITESPACE@[20; 21) 22 R_PAREN@[19; 20)
23 WHITESPACE@[20; 21)
22 THIN_ARROW@[21; 23) 24 THIN_ARROW@[21; 23)
23 TUPLE_TYPE@[23; 27) 25 TUPLE_TYPE@[23; 27)
24 WHITESPACE@[23; 24) 26 WHITESPACE@[23; 24)
diff --git a/tests/data/parser/inline/0039_path_expr.txt b/tests/data/parser/inline/0039_path_expr.txt
index d149fbb75..36a4ace6a 100644
--- a/tests/data/parser/inline/0039_path_expr.txt
+++ b/tests/data/parser/inline/0039_path_expr.txt
@@ -4,10 +4,11 @@ FILE@[0; 68)
4 NAME@[2; 6) 4 NAME@[2; 6)
5 WHITESPACE@[2; 3) 5 WHITESPACE@[2; 3)
6 IDENT@[3; 6) "foo" 6 IDENT@[3; 6) "foo"
7 L_PAREN@[6; 7) 7 PARAM_LIST@[6; 9)
8 R_PAREN@[7; 8) 8 L_PAREN@[6; 7)
9 BLOCK@[8; 68) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK@[9; 68)
11 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
12 LET_STMT@[10; 30) 13 LET_STMT@[10; 30)
13 WHITESPACE@[10; 15) 14 WHITESPACE@[10; 15)
diff --git a/tests/data/parser/inline/0040_expr_literals.txt b/tests/data/parser/inline/0040_expr_literals.txt
index 83d72bf95..29b49c83b 100644
--- a/tests/data/parser/inline/0040_expr_literals.txt
+++ b/tests/data/parser/inline/0040_expr_literals.txt
@@ -4,10 +4,11 @@ FILE@[0; 189)
4 NAME@[2; 6) 4 NAME@[2; 6)
5 WHITESPACE@[2; 3) 5 WHITESPACE@[2; 3)
6 IDENT@[3; 6) "foo" 6 IDENT@[3; 6) "foo"
7 L_PAREN@[6; 7) 7 PARAM_LIST@[6; 9)
8 R_PAREN@[7; 8) 8 L_PAREN@[6; 7)
9 BLOCK@[8; 189) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK@[9; 189)
11 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
12 LET_STMT@[10; 33) 13 LET_STMT@[10; 33)
13 WHITESPACE@[10; 15) 14 WHITESPACE@[10; 15)
diff --git a/tests/data/parser/inline/0043_call_expr.txt b/tests/data/parser/inline/0043_call_expr.txt
index 418d86270..03b36da00 100644
--- a/tests/data/parser/inline/0043_call_expr.txt
+++ b/tests/data/parser/inline/0043_call_expr.txt
@@ -4,10 +4,11 @@ FILE@[0; 57)
4 NAME@[2; 6) 4 NAME@[2; 6)
5 WHITESPACE@[2; 3) 5 WHITESPACE@[2; 3)
6 IDENT@[3; 6) "foo" 6 IDENT@[3; 6) "foo"
7 L_PAREN@[6; 7) 7 PARAM_LIST@[6; 9)
8 R_PAREN@[7; 8) 8 L_PAREN@[6; 7)
9 BLOCK@[8; 57) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK@[9; 57)
11 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
12 LET_STMT@[10; 32) 13 LET_STMT@[10; 32)
13 WHITESPACE@[10; 15) 14 WHITESPACE@[10; 15)
@@ -24,8 +25,9 @@ FILE@[0; 57)
24 NAME_REF@[22; 24) 25 NAME_REF@[22; 24)
25 WHITESPACE@[22; 23) 26 WHITESPACE@[22; 23)
26 IDENT@[23; 24) "f" 27 IDENT@[23; 24) "f"
27 L_PAREN@[24; 25) 28 ARG_LIST@[24; 26)
28 R_PAREN@[25; 26) 29 L_PAREN@[24; 25)
30 R_PAREN@[25; 26)
29 SEMI@[26; 27) 31 SEMI@[26; 27)
30 WHITESPACE@[27; 32) 32 WHITESPACE@[27; 32)
31 LET_STMT@[32; 55) 33 LET_STMT@[32; 55)
@@ -44,21 +46,24 @@ FILE@[0; 57)
44 NAME_REF@[39; 41) 46 NAME_REF@[39; 41)
45 WHITESPACE@[39; 40) 47 WHITESPACE@[39; 40)
46 IDENT@[40; 41) "f" 48 IDENT@[40; 41) "f"
47 L_PAREN@[41; 42) 49 ARG_LIST@[41; 43)
48 R_PAREN@[42; 43) 50 L_PAREN@[41; 42)
49 L_PAREN@[43; 44) 51 R_PAREN@[42; 43)
50 LITERAL@[44; 45) 52 ARG_LIST@[43; 46)
51 INT_NUMBER@[44; 45) 53 L_PAREN@[43; 44)
52 R_PAREN@[45; 46) 54 LITERAL@[44; 45)
53 L_PAREN@[46; 47) 55 INT_NUMBER@[44; 45)
54 LITERAL@[47; 48) 56 R_PAREN@[45; 46)
55 INT_NUMBER@[47; 48) 57 ARG_LIST@[46; 53)
56 COMMA@[48; 49) 58 L_PAREN@[46; 47)
57 LITERAL@[49; 51) 59 LITERAL@[47; 48)
58 WHITESPACE@[49; 50) 60 INT_NUMBER@[47; 48)
59 INT_NUMBER@[50; 51) 61 COMMA@[48; 49)
60 COMMA@[51; 52) 62 LITERAL@[49; 51)
61 R_PAREN@[52; 53) 63 WHITESPACE@[49; 50)
64 INT_NUMBER@[50; 51)
65 COMMA@[51; 52)
66 R_PAREN@[52; 53)
62 SEMI@[53; 54) 67 SEMI@[53; 54)
63 WHITESPACE@[54; 55) 68 WHITESPACE@[54; 55)
64 R_CURLY@[55; 56) 69 R_CURLY@[55; 56)
diff --git a/tests/data/parser/ok/0005_fn_item.txt b/tests/data/parser/ok/0005_fn_item.txt
index b9d049b79..130571f60 100644
--- a/tests/data/parser/ok/0005_fn_item.txt
+++ b/tests/data/parser/ok/0005_fn_item.txt
@@ -4,10 +4,11 @@ FILE@[0; 13)
4 NAME@[2; 6) 4 NAME@[2; 6)
5 WHITESPACE@[2; 3) 5 WHITESPACE@[2; 3)
6 IDENT@[3; 6) "foo" 6 IDENT@[3; 6) "foo"
7 L_PAREN@[6; 7) 7 PARAM_LIST@[6; 9)
8 R_PAREN@[7; 8) 8 L_PAREN@[6; 7)
9 BLOCK@[8; 13) 9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9) 10 WHITESPACE@[8; 9)
11 BLOCK@[9; 13)
11 L_CURLY@[9; 10) 12 L_CURLY@[9; 10)
12 WHITESPACE@[10; 11) 13 WHITESPACE@[10; 11)
13 R_CURLY@[11; 12) 14 R_CURLY@[11; 12)
diff --git a/tests/data/parser/ok/0008_mod_item.txt b/tests/data/parser/ok/0008_mod_item.txt
index 70ba5ac73..3a2e83654 100644
--- a/tests/data/parser/ok/0008_mod_item.txt
+++ b/tests/data/parser/ok/0008_mod_item.txt
@@ -29,10 +29,11 @@ FILE@[0; 118)
29 NAME@[33; 37) 29 NAME@[33; 37)
30 WHITESPACE@[33; 34) 30 WHITESPACE@[33; 34)
31 IDENT@[34; 37) "foo" 31 IDENT@[34; 37) "foo"
32 L_PAREN@[37; 38) 32 PARAM_LIST@[37; 40)
33 R_PAREN@[38; 39) 33 L_PAREN@[37; 38)
34 BLOCK@[39; 52) 34 R_PAREN@[38; 39)
35 WHITESPACE@[39; 40) 35 WHITESPACE@[39; 40)
36 BLOCK@[40; 52)
36 L_CURLY@[40; 41) 37 L_CURLY@[40; 41)
37 WHITESPACE@[41; 46) 38 WHITESPACE@[41; 46)
38 R_CURLY@[46; 47) 39 R_CURLY@[46; 47)
diff --git a/tests/data/parser/ok/0011_outer_attribute.txt b/tests/data/parser/ok/0011_outer_attribute.txt
index 3f685ebe2..b1e997617 100644
--- a/tests/data/parser/ok/0011_outer_attribute.txt
+++ b/tests/data/parser/ok/0011_outer_attribute.txt
@@ -22,10 +22,11 @@ FILE@[0; 35)
22 NAME@[25; 29) 22 NAME@[25; 29)
23 WHITESPACE@[25; 26) 23 WHITESPACE@[25; 26)
24 IDENT@[26; 29) "foo" 24 IDENT@[26; 29) "foo"
25 L_PAREN@[29; 30) 25 PARAM_LIST@[29; 32)
26 R_PAREN@[30; 31) 26 L_PAREN@[29; 30)
27 BLOCK@[31; 35) 27 R_PAREN@[30; 31)
28 WHITESPACE@[31; 32) 28 WHITESPACE@[31; 32)
29 BLOCK@[32; 35)
29 L_CURLY@[32; 33) 30 L_CURLY@[32; 33)
30 R_CURLY@[33; 34) 31 R_CURLY@[33; 34)
31 WHITESPACE@[34; 35) 32 WHITESPACE@[34; 35)
diff --git a/tests/data/parser/ok/0012_visibility.txt b/tests/data/parser/ok/0012_visibility.txt
index 664582a30..b0164f26d 100644
--- a/tests/data/parser/ok/0012_visibility.txt
+++ b/tests/data/parser/ok/0012_visibility.txt
@@ -4,10 +4,11 @@ FILE@[0; 98)
4 NAME@[2; 4) 4 NAME@[2; 4)
5 WHITESPACE@[2; 3) 5 WHITESPACE@[2; 3)
6 IDENT@[3; 4) "a" 6 IDENT@[3; 4) "a"
7 L_PAREN@[4; 5) 7 PARAM_LIST@[4; 7)
8 R_PAREN@[5; 6) 8 L_PAREN@[4; 5)
9 BLOCK@[6; 10) 9 R_PAREN@[5; 6)
10 WHITESPACE@[6; 7) 10 WHITESPACE@[6; 7)
11 BLOCK@[7; 10)
11 L_CURLY@[7; 8) 12 L_CURLY@[7; 8)
12 R_CURLY@[8; 9) 13 R_CURLY@[8; 9)
13 WHITESPACE@[9; 10) 14 WHITESPACE@[9; 10)
@@ -19,10 +20,11 @@ FILE@[0; 98)
19 NAME@[16; 18) 20 NAME@[16; 18)
20 WHITESPACE@[16; 17) 21 WHITESPACE@[16; 17)
21 IDENT@[17; 18) "b" 22 IDENT@[17; 18) "b"
22 L_PAREN@[18; 19) 23 PARAM_LIST@[18; 21)
23 R_PAREN@[19; 20) 24 L_PAREN@[18; 19)
24 BLOCK@[20; 24) 25 R_PAREN@[19; 20)
25 WHITESPACE@[20; 21) 26 WHITESPACE@[20; 21)
27 BLOCK@[21; 24)
26 L_CURLY@[21; 22) 28 L_CURLY@[21; 22)
27 R_CURLY@[22; 23) 29 R_CURLY@[22; 23)
28 WHITESPACE@[23; 24) 30 WHITESPACE@[23; 24)
@@ -37,10 +39,11 @@ FILE@[0; 98)
37 NAME@[37; 39) 39 NAME@[37; 39)
38 WHITESPACE@[37; 38) 40 WHITESPACE@[37; 38)
39 IDENT@[38; 39) "c" 41 IDENT@[38; 39) "c"
40 L_PAREN@[39; 40) 42 PARAM_LIST@[39; 42)
41 R_PAREN@[40; 41) 43 L_PAREN@[39; 40)
42 BLOCK@[41; 45) 44 R_PAREN@[40; 41)
43 WHITESPACE@[41; 42) 45 WHITESPACE@[41; 42)
46 BLOCK@[42; 45)
44 L_CURLY@[42; 43) 47 L_CURLY@[42; 43)
45 R_CURLY@[43; 44) 48 R_CURLY@[43; 44)
46 WHITESPACE@[44; 45) 49 WHITESPACE@[44; 45)
@@ -55,10 +58,11 @@ FILE@[0; 98)
55 NAME@[58; 60) 58 NAME@[58; 60)
56 WHITESPACE@[58; 59) 59 WHITESPACE@[58; 59)
57 IDENT@[59; 60) "d" 60 IDENT@[59; 60) "d"
58 L_PAREN@[60; 61) 61 PARAM_LIST@[60; 63)
59 R_PAREN@[61; 62) 62 L_PAREN@[60; 61)
60 BLOCK@[62; 66) 63 R_PAREN@[61; 62)
61 WHITESPACE@[62; 63) 64 WHITESPACE@[62; 63)
65 BLOCK@[63; 66)
62 L_CURLY@[63; 64) 66 L_CURLY@[63; 64)
63 R_CURLY@[64; 65) 67 R_CURLY@[64; 65)
64 WHITESPACE@[65; 66) 68 WHITESPACE@[65; 66)
@@ -88,10 +92,11 @@ FILE@[0; 98)
88 NAME@[90; 92) 92 NAME@[90; 92)
89 WHITESPACE@[90; 91) 93 WHITESPACE@[90; 91)
90 IDENT@[91; 92) "e" 94 IDENT@[91; 92) "e"
91 L_PAREN@[92; 93) 95 PARAM_LIST@[92; 95)
92 R_PAREN@[93; 94) 96 L_PAREN@[92; 93)
93 BLOCK@[94; 98) 97 R_PAREN@[93; 94)
94 WHITESPACE@[94; 95) 98 WHITESPACE@[94; 95)
99 BLOCK@[95; 98)
95 L_CURLY@[95; 96) 100 L_CURLY@[95; 96)
96 R_CURLY@[96; 97) 101 R_CURLY@[96; 97)
97 WHITESPACE@[97; 98) 102 WHITESPACE@[97; 98)
diff --git a/tests/data/parser/ok/0017_attr_trailing_comma.txt b/tests/data/parser/ok/0017_attr_trailing_comma.txt
index 792633eae..b043973af 100644
--- a/tests/data/parser/ok/0017_attr_trailing_comma.txt
+++ b/tests/data/parser/ok/0017_attr_trailing_comma.txt
@@ -16,10 +16,11 @@ FILE@[0; 23)
16 NAME@[13; 17) 16 NAME@[13; 17)
17 WHITESPACE@[13; 14) 17 WHITESPACE@[13; 14)
18 IDENT@[14; 17) "foo" 18 IDENT@[14; 17) "foo"
19 L_PAREN@[17; 18) 19 PARAM_LIST@[17; 20)
20 R_PAREN@[18; 19) 20 L_PAREN@[17; 18)
21 BLOCK@[19; 23) 21 R_PAREN@[18; 19)
22 WHITESPACE@[19; 20) 22 WHITESPACE@[19; 20)
23 BLOCK@[20; 23)
23 L_CURLY@[20; 21) 24 L_CURLY@[20; 21)
24 R_CURLY@[21; 22) 25 R_CURLY@[21; 22)
25 WHITESPACE@[22; 23) 26 WHITESPACE@[22; 23)
diff --git a/tests/data/parser/ok/0021_extern_fn.txt b/tests/data/parser/ok/0021_extern_fn.txt
index b4456af84..502b0181d 100644
--- a/tests/data/parser/ok/0021_extern_fn.txt
+++ b/tests/data/parser/ok/0021_extern_fn.txt
@@ -7,10 +7,11 @@ FILE@[0; 71)
7 NAME@[9; 13) 7 NAME@[9; 13)
8 WHITESPACE@[9; 10) 8 WHITESPACE@[9; 10)
9 IDENT@[10; 13) "foo" 9 IDENT@[10; 13) "foo"
10 L_PAREN@[13; 14) 10 PARAM_LIST@[13; 16)
11 R_PAREN@[14; 15) 11 L_PAREN@[13; 14)
12 BLOCK@[15; 21) 12 R_PAREN@[14; 15)
13 WHITESPACE@[15; 16) 13 WHITESPACE@[15; 16)
14 BLOCK@[16; 21)
14 L_CURLY@[16; 17) 15 L_CURLY@[16; 17)
15 WHITESPACE@[17; 18) 16 WHITESPACE@[17; 18)
16 R_CURLY@[18; 19) 17 R_CURLY@[18; 19)
@@ -25,10 +26,11 @@ FILE@[0; 71)
25 NAME@[34; 38) 26 NAME@[34; 38)
26 WHITESPACE@[34; 35) 27 WHITESPACE@[34; 35)
27 IDENT@[35; 38) "bar" 28 IDENT@[35; 38) "bar"
28 L_PAREN@[38; 39) 29 PARAM_LIST@[38; 41)
29 R_PAREN@[39; 40) 30 L_PAREN@[38; 39)
30 BLOCK@[40; 46) 31 R_PAREN@[39; 40)
31 WHITESPACE@[40; 41) 32 WHITESPACE@[40; 41)
33 BLOCK@[41; 46)
32 L_CURLY@[41; 42) 34 L_CURLY@[41; 42)
33 WHITESPACE@[42; 43) 35 WHITESPACE@[42; 43)
34 R_CURLY@[43; 44) 36 R_CURLY@[43; 44)
@@ -43,10 +45,11 @@ FILE@[0; 71)
43 NAME@[60; 64) 45 NAME@[60; 64)
44 WHITESPACE@[60; 61) 46 WHITESPACE@[60; 61)
45 IDENT@[61; 64) "baz" 47 IDENT@[61; 64) "baz"
46 L_PAREN@[64; 65) 48 PARAM_LIST@[64; 67)
47 R_PAREN@[65; 66) 49 L_PAREN@[64; 65)
48 BLOCK@[66; 71) 50 R_PAREN@[65; 66)
49 WHITESPACE@[66; 67) 51 WHITESPACE@[66; 67)
52 BLOCK@[67; 71)
50 L_CURLY@[67; 68) 53 L_CURLY@[67; 68)
51 WHITESPACE@[68; 69) 54 WHITESPACE@[68; 69)
52 R_CURLY@[69; 70) 55 R_CURLY@[69; 70)