authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-02-01 21:31:41-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-02-01 21:31:41-07:00
log0c6b98b82568edd982d8f7b7820a0a1173c5c5d2
treec4f75bdc91fa1df97fc1169ad1ece795bb804d2b
parent272a0ab359ee504f147ccf1ce5adb78c676a8305

zig fmt: implement simple test with doc comments


2 files changed, 533 insertions(+), 528 deletions(-)

lib/std/zig/parser_test.zig+257-248
...@@ -21,247 +21,6 @@ test "zig fmt: two spaced line comments before decl" {...@@ -21,247 +21,6 @@ test "zig fmt: two spaced line comments before decl" {
21 );21 );
22}22}
2323
24//test "recovery: top level" {
25// try testError(
26// \\test "" {inline}
27// \\test "" {inline}
28// , &[_]Error{
29// .ExpectedInlinable,
30// .ExpectedInlinable,
31// });
32//}
33//
34//test "recovery: block statements" {
35// try testError(
36// \\test "" {
37// \\ foo + +;
38// \\ inline;
39// \\}
40// , &[_]Error{
41// .InvalidToken,
42// .ExpectedInlinable,
43// });
44//}
45//
46//test "recovery: missing comma" {
47// try testError(
48// \\test "" {
49// \\ switch (foo) {
50// \\ 2 => {}
51// \\ 3 => {}
52// \\ else => {
53// \\ foo && bar +;
54// \\ }
55// \\ }
56// \\}
57// , &[_]Error{
58// .ExpectedToken,
59// .ExpectedToken,
60// .InvalidAnd,
61// .InvalidToken,
62// });
63//}
64//
65//test "recovery: extra qualifier" {
66// try testError(
67// \\const a: *const const u8;
68// \\test ""
69// , &[_]Error{
70// .ExtraConstQualifier,
71// .ExpectedLBrace,
72// });
73//}
74//
75//test "recovery: missing return type" {
76// try testError(
77// \\fn foo() {
78// \\ a && b;
79// \\}
80// \\test ""
81// , &[_]Error{
82// .ExpectedReturnType,
83// .InvalidAnd,
84// .ExpectedLBrace,
85// });
86//}
87//
88//test "recovery: continue after invalid decl" {
89// try testError(
90// \\fn foo {
91// \\ inline;
92// \\}
93// \\pub test "" {
94// \\ async a && b;
95// \\}
96// , &[_]Error{
97// .ExpectedToken,
98// .ExpectedPubItem,
99// .ExpectedParamList,
100// .InvalidAnd,
101// });
102// try testError(
103// \\threadlocal test "" {
104// \\ @a && b;
105// \\}
106// , &[_]Error{
107// .ExpectedVarDecl,
108// .ExpectedParamList,
109// .InvalidAnd,
110// });
111//}
112//
113//test "recovery: invalid extern/inline" {
114// try testError(
115// \\inline test "" { a && b; }
116// , &[_]Error{
117// .ExpectedFn,
118// .InvalidAnd,
119// });
120// try testError(
121// \\extern "" test "" { a && b; }
122// , &[_]Error{
123// .ExpectedVarDeclOrFn,
124// .InvalidAnd,
125// });
126//}
127//
128//test "recovery: missing semicolon" {
129// try testError(
130// \\test "" {
131// \\ comptime a && b
132// \\ c && d
133// \\ @foo
134// \\}
135// , &[_]Error{
136// .InvalidAnd,
137// .ExpectedToken,
138// .InvalidAnd,
139// .ExpectedToken,
140// .ExpectedParamList,
141// .ExpectedToken,
142// });
143//}
144//
145//test "recovery: invalid container members" {
146// try testError(
147// \\usingnamespace;
148// \\foo+
149// \\bar@,
150// \\while (a == 2) { test "" {}}
151// \\test "" {
152// \\ a && b
153// \\}
154// , &[_]Error{
155// .ExpectedExpr,
156// .ExpectedToken,
157// .ExpectedToken,
158// .ExpectedContainerMembers,
159// .InvalidAnd,
160// .ExpectedToken,
161// });
162//}
163//
164//test "recovery: invalid parameter" {
165// try testError(
166// \\fn main() void {
167// \\ a(comptime T: type)
168// \\}
169// , &[_]Error{
170// .ExpectedToken,
171// });
172//}
173//
174//test "recovery: extra '}' at top level" {
175// try testError(
176// \\}}}
177// \\test "" {
178// \\ a && b;
179// \\}
180// , &[_]Error{
181// .ExpectedContainerMembers,
182// .ExpectedContainerMembers,
183// .ExpectedContainerMembers,
184// .InvalidAnd,
185// });
186//}
187//
188//test "recovery: mismatched bracket at top level" {
189// try testError(
190// \\const S = struct {
191// \\ arr: 128]?G
192// \\};
193// , &[_]Error{
194// .ExpectedToken,
195// });
196//}
197//
198//test "recovery: invalid global error set access" {
199// try testError(
200// \\test "" {
201// \\ error && foo;
202// \\}
203// , &[_]Error{
204// .ExpectedToken,
205// .ExpectedIdentifier,
206// .InvalidAnd,
207// });
208//}
209//
210//test "recovery: invalid asterisk after pointer dereference" {
211// try testError(
212// \\test "" {
213// \\ var sequence = "repeat".*** 10;
214// \\}
215// , &[_]Error{
216// .AsteriskAfterPointerDereference,
217// });
218// try testError(
219// \\test "" {
220// \\ var sequence = "repeat".** 10&&a;
221// \\}
222// , &[_]Error{
223// .AsteriskAfterPointerDereference,
224// .InvalidAnd,
225// });
226//}
227//
228//test "recovery: missing semicolon after if, for, while stmt" {
229// try testError(
230// \\test "" {
231// \\ if (foo) bar
232// \\ for (foo) |a| bar
233// \\ while (foo) bar
234// \\ a && b;
235// \\}
236// , &[_]Error{
237// .ExpectedSemiOrElse,
238// .ExpectedSemiOrElse,
239// .ExpectedSemiOrElse,
240// .InvalidAnd,
241// });
242//}
243//
244//test "recovery: invalid comptime" {
245// try testError(
246// \\comptime
247// , &[_]Error{
248// .ExpectedBlockOrField,
249// });
250//}
251//
252//test "recovery: missing block after for/while loops" {
253// try testError(
254// \\test "" { while (foo) }
255// , &[_]Error{
256// .ExpectedBlockOrAssignment,
257// });
258// try testError(
259// \\test "" { for (foo) |bar| }
260// , &[_]Error{
261// .ExpectedBlockOrAssignment,
262// });
263//}
264//
265//test "zig fmt: respect line breaks after var declarations" {24//test "zig fmt: respect line breaks after var declarations" {
266// try testCanonical(25// try testCanonical(
267// \\const crc =26// \\const crc =
...@@ -306,13 +65,22 @@ test "zig fmt: two spaced line comments before decl" {...@@ -306,13 +65,22 @@ test "zig fmt: two spaced line comments before decl" {
306// \\65// \\
307// );66// );
308//}67//}
309//68
310//test "zig fmt: empty file" {69test "zig fmt: empty file" {
311// try testCanonical(70 try testCanonical(
312// \\71 \\
313// );72 );
314//}73}
315//74
75test "zig fmt: doc comments on test" {
76 try testCanonical(
77 \\/// hello
78 \\/// world
79 \\test "" {}
80 \\
81 );
82}
83
316//test "zig fmt: if statment" {84//test "zig fmt: if statment" {
317// try testCanonical(85// try testCanonical(
318// \\test "" {86// \\test "" {
...@@ -3712,6 +3480,247 @@ test "zig fmt: two spaced line comments before decl" {...@@ -3712,6 +3480,247 @@ test "zig fmt: two spaced line comments before decl" {
3712// \\3480// \\
3713// );3481// );
3714//}3482//}
3483//
3484//test "recovery: top level" {
3485// try testError(
3486// \\test "" {inline}
3487// \\test "" {inline}
3488// , &[_]Error{
3489// .ExpectedInlinable,
3490// .ExpectedInlinable,
3491// });
3492//}
3493//
3494//test "recovery: block statements" {
3495// try testError(
3496// \\test "" {
3497// \\ foo + +;
3498// \\ inline;
3499// \\}
3500// , &[_]Error{
3501// .InvalidToken,
3502// .ExpectedInlinable,
3503// });
3504//}
3505//
3506//test "recovery: missing comma" {
3507// try testError(
3508// \\test "" {
3509// \\ switch (foo) {
3510// \\ 2 => {}
3511// \\ 3 => {}
3512// \\ else => {
3513// \\ foo && bar +;
3514// \\ }
3515// \\ }
3516// \\}
3517// , &[_]Error{
3518// .ExpectedToken,
3519// .ExpectedToken,
3520// .InvalidAnd,
3521// .InvalidToken,
3522// });
3523//}
3524//
3525//test "recovery: extra qualifier" {
3526// try testError(
3527// \\const a: *const const u8;
3528// \\test ""
3529// , &[_]Error{
3530// .ExtraConstQualifier,
3531// .ExpectedLBrace,
3532// });
3533//}
3534//
3535//test "recovery: missing return type" {
3536// try testError(
3537// \\fn foo() {
3538// \\ a && b;
3539// \\}
3540// \\test ""
3541// , &[_]Error{
3542// .ExpectedReturnType,
3543// .InvalidAnd,
3544// .ExpectedLBrace,
3545// });
3546//}
3547//
3548//test "recovery: continue after invalid decl" {
3549// try testError(
3550// \\fn foo {
3551// \\ inline;
3552// \\}
3553// \\pub test "" {
3554// \\ async a && b;
3555// \\}
3556// , &[_]Error{
3557// .ExpectedToken,
3558// .ExpectedPubItem,
3559// .ExpectedParamList,
3560// .InvalidAnd,
3561// });
3562// try testError(
3563// \\threadlocal test "" {
3564// \\ @a && b;
3565// \\}
3566// , &[_]Error{
3567// .ExpectedVarDecl,
3568// .ExpectedParamList,
3569// .InvalidAnd,
3570// });
3571//}
3572//
3573//test "recovery: invalid extern/inline" {
3574// try testError(
3575// \\inline test "" { a && b; }
3576// , &[_]Error{
3577// .ExpectedFn,
3578// .InvalidAnd,
3579// });
3580// try testError(
3581// \\extern "" test "" { a && b; }
3582// , &[_]Error{
3583// .ExpectedVarDeclOrFn,
3584// .InvalidAnd,
3585// });
3586//}
3587//
3588//test "recovery: missing semicolon" {
3589// try testError(
3590// \\test "" {
3591// \\ comptime a && b
3592// \\ c && d
3593// \\ @foo
3594// \\}
3595// , &[_]Error{
3596// .InvalidAnd,
3597// .ExpectedToken,
3598// .InvalidAnd,
3599// .ExpectedToken,
3600// .ExpectedParamList,
3601// .ExpectedToken,
3602// });
3603//}
3604//
3605//test "recovery: invalid container members" {
3606// try testError(
3607// \\usingnamespace;
3608// \\foo+
3609// \\bar@,
3610// \\while (a == 2) { test "" {}}
3611// \\test "" {
3612// \\ a && b
3613// \\}
3614// , &[_]Error{
3615// .ExpectedExpr,
3616// .ExpectedToken,
3617// .ExpectedToken,
3618// .ExpectedContainerMembers,
3619// .InvalidAnd,
3620// .ExpectedToken,
3621// });
3622//}
3623//
3624//test "recovery: invalid parameter" {
3625// try testError(
3626// \\fn main() void {
3627// \\ a(comptime T: type)
3628// \\}
3629// , &[_]Error{
3630// .ExpectedToken,
3631// });
3632//}
3633//
3634//test "recovery: extra '}' at top level" {
3635// try testError(
3636// \\}}}
3637// \\test "" {
3638// \\ a && b;
3639// \\}
3640// , &[_]Error{
3641// .ExpectedContainerMembers,
3642// .ExpectedContainerMembers,
3643// .ExpectedContainerMembers,
3644// .InvalidAnd,
3645// });
3646//}
3647//
3648//test "recovery: mismatched bracket at top level" {
3649// try testError(
3650// \\const S = struct {
3651// \\ arr: 128]?G
3652// \\};
3653// , &[_]Error{
3654// .ExpectedToken,
3655// });
3656//}
3657//
3658//test "recovery: invalid global error set access" {
3659// try testError(
3660// \\test "" {
3661// \\ error && foo;
3662// \\}
3663// , &[_]Error{
3664// .ExpectedToken,
3665// .ExpectedIdentifier,
3666// .InvalidAnd,
3667// });
3668//}
3669//
3670//test "recovery: invalid asterisk after pointer dereference" {
3671// try testError(
3672// \\test "" {
3673// \\ var sequence = "repeat".*** 10;
3674// \\}
3675// , &[_]Error{
3676// .AsteriskAfterPointerDereference,
3677// });
3678// try testError(
3679// \\test "" {
3680// \\ var sequence = "repeat".** 10&&a;
3681// \\}
3682// , &[_]Error{
3683// .AsteriskAfterPointerDereference,
3684// .InvalidAnd,
3685// });
3686//}
3687//
3688//test "recovery: missing semicolon after if, for, while stmt" {
3689// try testError(
3690// \\test "" {
3691// \\ if (foo) bar
3692// \\ for (foo) |a| bar
3693// \\ while (foo) bar
3694// \\ a && b;
3695// \\}
3696// , &[_]Error{
3697// .ExpectedSemiOrElse,
3698// .ExpectedSemiOrElse,
3699// .ExpectedSemiOrElse,
3700// .InvalidAnd,
3701// });
3702//}
3703//
3704//test "recovery: invalid comptime" {
3705// try testError(
3706// \\comptime
3707// , &[_]Error{
3708// .ExpectedBlockOrField,
3709// });
3710//}
3711//
3712//test "recovery: missing block after for/while loops" {
3713// try testError(
3714// \\test "" { while (foo) }
3715// , &[_]Error{
3716// .ExpectedBlockOrAssignment,
3717// });
3718// try testError(
3719// \\test "" { for (foo) |bar| }
3720// , &[_]Error{
3721// .ExpectedBlockOrAssignment,
3722// });
3723//}
37153724
3716const std = @import("std");3725const std = @import("std");
3717const mem = std.mem;3726const mem = std.mem;
lib/std/zig/render.zig+276-280
...@@ -101,6 +101,9 @@ fn renderTopLevelDecl(ais: *Ais, tree: ast.Tree, decl: ast.Node.Index) Error!voi...@@ -101,6 +101,9 @@ fn renderTopLevelDecl(ais: *Ais, tree: ast.Tree, decl: ast.Node.Index) Error!voi
101}101}
102102
103fn renderContainerDecl(ais: *Ais, tree: ast.Tree, decl: ast.Node.Index, space: Space) Error!void {103fn renderContainerDecl(ais: *Ais, tree: ast.Tree, decl: ast.Node.Index, space: Space) Error!void {
104 const token_tags = tree.tokens.items(.tag);
105 const main_tokens = tree.nodes.items(.main_token);
106 const datas = tree.nodes.items(.data);
104 switch (tree.nodes.items(.tag)[decl]) {107 switch (tree.nodes.items(.tag)[decl]) {
105 .UsingNamespace,108 .UsingNamespace,
106 .FnProtoSimple,109 .FnProtoSimple,
...@@ -112,142 +115,137 @@ fn renderContainerDecl(ais: *Ais, tree: ast.Tree, decl: ast.Node.Index, space: S...@@ -112,142 +115,137 @@ fn renderContainerDecl(ais: *Ais, tree: ast.Tree, decl: ast.Node.Index, space: S
112 .LocalVarDecl,115 .LocalVarDecl,
113 .SimpleVarDecl,116 .SimpleVarDecl,
114 .AlignedVarDecl,117 .AlignedVarDecl,
115 .TestDecl,
116 .ContainerFieldInit,118 .ContainerFieldInit,
117 .ContainerFieldAlign,119 .ContainerFieldAlign,
118 .ContainerField,120 .ContainerField,
119 => @panic("TODO implement renderContainerDecl"),121 => @panic("TODO implement renderContainerDecl"),
120122
121 .Comptime => return renderExpression(ais, tree, decl, space),123 // .FnProto => {
122124 // const fn_proto = @fieldParentPtr(ast.Node.FnProto, "base", decl);
123 else => unreachable,
124 }
125 //switch (tag) {
126 // .FnProto => {
127 // const fn_proto = @fieldParentPtr(ast.Node.FnProto, "base", decl);
128
129 // try renderDocComments(tree, ais, fn_proto, fn_proto.getDocComments());
130125
131 // if (fn_proto.getBodyNode()) |body_node| {126 // try renderDocComments(ais, tree, fn_proto, fn_proto.getDocComments());
132 // try renderExpression(allocator, ais, tree, decl, .Space);
133 // try renderExpression(allocator, ais, tree, body_node, space);
134 // } else {
135 // try renderExpression(allocator, ais, tree, decl, .None);
136 // try renderToken(ais, tree, tree.nextToken(decl.lastToken()), space);
137 // }
138 // },
139
140 // .Use => {
141 // const use_decl = @fieldParentPtr(ast.Node.Use, "base", decl);
142
143 // if (use_decl.visib_token) |visib_token| {
144 // try renderToken(ais, tree, visib_token, .Space); // pub
145 // }
146 // try renderToken(ais, tree, use_decl.use_token, .Space); // usingnamespace
147 // try renderExpression(allocator, ais, tree, use_decl.expr, .None);
148 // try renderToken(ais, tree, use_decl.semicolon_token, space); // ;
149 // },
150127
151 // .VarDecl => {128 // if (fn_proto.getBodyNode()) |body_node| {
152 // const var_decl = @fieldParentPtr(ast.Node.VarDecl, "base", decl);129 // try renderExpression(ais, tree, decl, .Space);
130 // try renderExpression(ais, tree, body_node, space);
131 // } else {
132 // try renderExpression(ais, tree, decl, .None);
133 // try renderToken(ais, tree, tree.nextToken(decl.lastToken()), space);
134 // }
135 // },
153136
154 // try renderDocComments(tree, ais, var_decl, var_decl.getDocComments());137 // .Use => {
155 // try renderVarDecl(allocator, ais, tree, var_decl);138 // const use_decl = @fieldParentPtr(ast.Node.Use, "base", decl);
156 // },
157139
158 // .TestDecl => {140 // if (use_decl.visib_token) |visib_token| {
159 // const test_decl = @fieldParentPtr(ast.Node.TestDecl, "base", decl);141 // try renderToken(ais, tree, visib_token, .Space); // pub
142 // }
143 // try renderToken(ais, tree, use_decl.use_token, .Space); // usingnamespace
144 // try renderExpression(ais, tree, use_decl.expr, .None);
145 // try renderToken(ais, tree, use_decl.semicolon_token, space); // ;
146 // },
147
148 // .VarDecl => {
149 // const var_decl = @fieldParentPtr(ast.Node.VarDecl, "base", decl);
150
151 // try renderDocComments(ais, tree, var_decl, var_decl.getDocComments());
152 // try renderVarDecl(allocator, ais, tree, var_decl);
153 // },
154
155 .TestDecl => {
156 const test_token = main_tokens[decl];
157 try renderDocComments(ais, tree, test_token);
158 try renderToken(ais, tree, test_token, .Space);
159 if (token_tags[test_token + 1] == .StringLiteral) {
160 try renderToken(ais, tree, test_token + 1, .Space);
161 }
162 try renderExpression(ais, tree, datas[decl].rhs, space);
163 },
160164
161 // try renderDocComments(tree, ais, test_decl, test_decl.doc_comments);165 // .ContainerField => {
162 // try renderToken(ais, tree, test_decl.test_token, .Space);166 // const field = @fieldParentPtr(ast.Node.ContainerField, "base", decl);
163 // if (test_decl.name) |name|
164 // try renderExpression(allocator, ais, tree, name, .Space);
165 // try renderExpression(allocator, ais, tree, test_decl.body_node, space);
166 // },
167167
168 // .ContainerField => {168 // try renderDocComments(ais, tree, field, field.doc_comments);
169 // const field = @fieldParentPtr(ast.Node.ContainerField, "base", decl);169 // if (field.comptime_token) |t| {
170 // try renderToken(ais, tree, t, .Space); // comptime
171 // }
170172
171 // try renderDocComments(tree, ais, field, field.doc_comments);173 // const src_has_trailing_comma = blk: {
172 // if (field.comptime_token) |t| {174 // const maybe_comma = tree.nextToken(field.lastToken());
173 // try renderToken(ais, tree, t, .Space); // comptime175 // break :blk tree.token_tags[maybe_comma] == .Comma;
174 // }176 // };
175177
176 // const src_has_trailing_comma = blk: {178 // // The trailing comma is emitted at the end, but if it's not present
177 // const maybe_comma = tree.nextToken(field.lastToken());179 // // we still have to respect the specified `space` parameter
178 // break :blk tree.token_tags[maybe_comma] == .Comma;180 // const last_token_space: Space = if (src_has_trailing_comma) .None else space;
179 // };181
180182 // if (field.type_expr == null and field.value_expr == null) {
181 // // The trailing comma is emitted at the end, but if it's not present183 // try renderToken(ais, tree, field.name_token, last_token_space); // name
182 // // we still have to respect the specified `space` parameter184 // } else if (field.type_expr != null and field.value_expr == null) {
183 // const last_token_space: Space = if (src_has_trailing_comma) .None else space;185 // try renderToken(ais, tree, field.name_token, .None); // name
184186 // try renderToken(ais, tree, tree.nextToken(field.name_token), .Space); // :
185 // if (field.type_expr == null and field.value_expr == null) {187
186 // try renderToken(ais, tree, field.name_token, last_token_space); // name188 // if (field.align_expr) |align_value_expr| {
187 // } else if (field.type_expr != null and field.value_expr == null) {189 // try renderExpression(ais, tree, field.type_expr.?, .Space); // type
188 // try renderToken(ais, tree, field.name_token, .None); // name190 // const lparen_token = tree.prevToken(align_value_expr.firstToken());
189 // try renderToken(ais, tree, tree.nextToken(field.name_token), .Space); // :191 // const align_kw = tree.prevToken(lparen_token);
190192 // const rparen_token = tree.nextToken(align_value_expr.lastToken());
191 // if (field.align_expr) |align_value_expr| {193 // try renderToken(ais, tree, align_kw, .None); // align
192 // try renderExpression(allocator, ais, tree, field.type_expr.?, .Space); // type194 // try renderToken(ais, tree, lparen_token, .None); // (
193 // const lparen_token = tree.prevToken(align_value_expr.firstToken());195 // try renderExpression(ais, tree, align_value_expr, .None); // alignment
194 // const align_kw = tree.prevToken(lparen_token);196 // try renderToken(ais, tree, rparen_token, last_token_space); // )
195 // const rparen_token = tree.nextToken(align_value_expr.lastToken());197 // } else {
196 // try renderToken(ais, tree, align_kw, .None); // align198 // try renderExpression(ais, tree, field.type_expr.?, last_token_space); // type
197 // try renderToken(ais, tree, lparen_token, .None); // (199 // }
198 // try renderExpression(allocator, ais, tree, align_value_expr, .None); // alignment200 // } else if (field.type_expr == null and field.value_expr != null) {
199 // try renderToken(ais, tree, rparen_token, last_token_space); // )201 // try renderToken(ais, tree, field.name_token, .Space); // name
200 // } else {202 // try renderToken(ais, tree, tree.nextToken(field.name_token), .Space); // =
201 // try renderExpression(allocator, ais, tree, field.type_expr.?, last_token_space); // type203 // try renderExpression(ais, tree, field.value_expr.?, last_token_space); // value
202 // }204 // } else {
203 // } else if (field.type_expr == null and field.value_expr != null) {205 // try renderToken(ais, tree, field.name_token, .None); // name
204 // try renderToken(ais, tree, field.name_token, .Space); // name206 // try renderToken(ais, tree, tree.nextToken(field.name_token), .Space); // :
205 // try renderToken(ais, tree, tree.nextToken(field.name_token), .Space); // =207
206 // try renderExpression(allocator, ais, tree, field.value_expr.?, last_token_space); // value208 // if (field.align_expr) |align_value_expr| {
207 // } else {209 // try renderExpression(ais, tree, field.type_expr.?, .Space); // type
208 // try renderToken(ais, tree, field.name_token, .None); // name210 // const lparen_token = tree.prevToken(align_value_expr.firstToken());
209 // try renderToken(ais, tree, tree.nextToken(field.name_token), .Space); // :211 // const align_kw = tree.prevToken(lparen_token);
210212 // const rparen_token = tree.nextToken(align_value_expr.lastToken());
211 // if (field.align_expr) |align_value_expr| {213 // try renderToken(ais, tree, align_kw, .None); // align
212 // try renderExpression(allocator, ais, tree, field.type_expr.?, .Space); // type214 // try renderToken(ais, tree, lparen_token, .None); // (
213 // const lparen_token = tree.prevToken(align_value_expr.firstToken());215 // try renderExpression(ais, tree, align_value_expr, .None); // alignment
214 // const align_kw = tree.prevToken(lparen_token);216 // try renderToken(ais, tree, rparen_token, .Space); // )
215 // const rparen_token = tree.nextToken(align_value_expr.lastToken());217 // } else {
216 // try renderToken(ais, tree, align_kw, .None); // align218 // try renderExpression(ais, tree, field.type_expr.?, .Space); // type
217 // try renderToken(ais, tree, lparen_token, .None); // (219 // }
218 // try renderExpression(allocator, ais, tree, align_value_expr, .None); // alignment220 // try renderToken(ais, tree, tree.prevToken(field.value_expr.?.firstToken()), .Space); // =
219 // try renderToken(ais, tree, rparen_token, .Space); // )221 // try renderExpression(ais, tree, field.value_expr.?, last_token_space); // value
220 // } else {222 // }
221 // try renderExpression(allocator, ais, tree, field.type_expr.?, .Space); // type
222 // }
223 // try renderToken(ais, tree, tree.prevToken(field.value_expr.?.firstToken()), .Space); // =
224 // try renderExpression(allocator, ais, tree, field.value_expr.?, last_token_space); // value
225 // }
226223
227 // if (src_has_trailing_comma) {224 // if (src_has_trailing_comma) {
228 // const comma = tree.nextToken(field.lastToken());225 // const comma = tree.nextToken(field.lastToken());
229 // try renderToken(ais, tree, comma, space);226 // try renderToken(ais, tree, comma, space);
230 // }227 // }
231 // },228 // },
229 .Comptime => return renderExpression(ais, tree, decl, space),
232230
233 // .DocComment => {231 // .DocComment => {
234 // const comment = @fieldParentPtr(ast.Node.DocComment, "base", decl);232 // const comment = @fieldParentPtr(ast.Node.DocComment, "base", decl);
235 // const kind = tree.token_tags[comment.first_line];233 // const kind = tree.token_tags[comment.first_line];
236 // try renderToken(ais, tree, comment.first_line, .Newline);234 // try renderToken(ais, tree, comment.first_line, .Newline);
237 // var tok_i = comment.first_line + 1;235 // var tok_i = comment.first_line + 1;
238 // while (true) : (tok_i += 1) {236 // while (true) : (tok_i += 1) {
239 // const tok_id = tree.token_tags[tok_i];237 // const tok_id = tree.token_tags[tok_i];
240 // if (tok_id == kind) {238 // if (tok_id == kind) {
241 // try renderToken(ais, tree, tok_i, .Newline);239 // try renderToken(ais, tree, tok_i, .Newline);
242 // } else if (tok_id == .LineComment) {240 // } else if (tok_id == .LineComment) {
243 // continue;241 // continue;
244 // } else {242 // } else {
245 // break;243 // break;
246 // }244 // }
247 // }245 // }
248 // },246 // },
249 // else => unreachable,247 else => unreachable,
250 //}248 }
251}249}
252250
253fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Space) Error!void {251fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Space) Error!void {
...@@ -319,9 +317,9 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -319,9 +317,9 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
319317
320 // try renderToken(ais, tree, defer_node.defer_token, Space.Space);318 // try renderToken(ais, tree, defer_node.defer_token, Space.Space);
321 // if (defer_node.payload) |payload| {319 // if (defer_node.payload) |payload| {
322 // try renderExpression(allocator, ais, tree, payload, Space.Space);320 // try renderExpression(ais, tree, payload, Space.Space);
323 // }321 // }
324 // return renderExpression(allocator, ais, tree, defer_node.expr, space);322 // return renderExpression(ais, tree, defer_node.expr, space);
325 //},323 //},
326 .Comptime => {324 .Comptime => {
327 const comptime_token = tree.nodes.items(.main_token)[node];325 const comptime_token = tree.nodes.items(.main_token)[node];
...@@ -337,7 +335,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -337,7 +335,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
337 // } else {335 // } else {
338 // try renderToken(ais, tree, nosuspend_node.nosuspend_token, Space.Space);336 // try renderToken(ais, tree, nosuspend_node.nosuspend_token, Space.Space);
339 // }337 // }
340 // return renderExpression(allocator, ais, tree, nosuspend_node.expr, space);338 // return renderExpression(ais, tree, nosuspend_node.expr, space);
341 //},339 //},
342340
343 //.Suspend => {341 //.Suspend => {
...@@ -345,7 +343,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -345,7 +343,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
345343
346 // if (suspend_node.body) |body| {344 // if (suspend_node.body) |body| {
347 // try renderToken(ais, tree, suspend_node.suspend_token, Space.Space);345 // try renderToken(ais, tree, suspend_node.suspend_token, Space.Space);
348 // return renderExpression(allocator, ais, tree, body, space);346 // return renderExpression(ais, tree, body, space);
349 // } else {347 // } else {
350 // return renderToken(ais, tree, suspend_node.suspend_token, space);348 // return renderToken(ais, tree, suspend_node.suspend_token, space);
351 // }349 // }
...@@ -355,7 +353,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -355,7 +353,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
355 // const infix_op_node = @fieldParentPtr(ast.Node.Catch, "base", base);353 // const infix_op_node = @fieldParentPtr(ast.Node.Catch, "base", base);
356354
357 // const op_space = Space.Space;355 // const op_space = Space.Space;
358 // try renderExpression(allocator, ais, tree, infix_op_node.lhs, op_space);356 // try renderExpression(ais, tree, infix_op_node.lhs, op_space);
359357
360 // const after_op_space = blk: {358 // const after_op_space = blk: {
361 // const same_line = tree.tokensOnSameLine(infix_op_node.op_token, tree.nextToken(infix_op_node.op_token));359 // const same_line = tree.tokensOnSameLine(infix_op_node.op_token, tree.nextToken(infix_op_node.op_token));
...@@ -365,11 +363,11 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -365,11 +363,11 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
365 // try renderToken(ais, tree, infix_op_node.op_token, after_op_space);363 // try renderToken(ais, tree, infix_op_node.op_token, after_op_space);
366364
367 // if (infix_op_node.payload) |payload| {365 // if (infix_op_node.payload) |payload| {
368 // try renderExpression(allocator, ais, tree, payload, Space.Space);366 // try renderExpression(ais, tree, payload, Space.Space);
369 // }367 // }
370368
371 // ais.pushIndentOneShot();369 // ais.pushIndentOneShot();
372 // return renderExpression(allocator, ais, tree, infix_op_node.rhs, space);370 // return renderExpression(ais, tree, infix_op_node.rhs, space);
373 //},371 //},
374372
375 //.Add,373 //.Add,
...@@ -421,7 +419,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -421,7 +419,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
421 // .Period, .ErrorUnion, .Range => Space.None,419 // .Period, .ErrorUnion, .Range => Space.None,
422 // else => Space.Space,420 // else => Space.Space,
423 // };421 // };
424 // try renderExpression(allocator, ais, tree, infix_op_node.lhs, op_space);422 // try renderExpression(ais, tree, infix_op_node.lhs, op_space);
425423
426 // const after_op_space = blk: {424 // const after_op_space = blk: {
427 // const loc = tree.tokenLocation(tree.token_locs[infix_op_node.op_token].end, tree.nextToken(infix_op_node.op_token));425 // const loc = tree.tokenLocation(tree.token_locs[infix_op_node.op_token].end, tree.nextToken(infix_op_node.op_token));
...@@ -434,7 +432,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -434,7 +432,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
434 // try renderToken(ais, tree, infix_op_node.op_token, after_op_space);432 // try renderToken(ais, tree, infix_op_node.op_token, after_op_space);
435 // }433 // }
436 // ais.pushIndentOneShot();434 // ais.pushIndentOneShot();
437 // return renderExpression(allocator, ais, tree, infix_op_node.rhs, space);435 // return renderExpression(ais, tree, infix_op_node.rhs, space);
438 //},436 //},
439437
440 //.BitNot,438 //.BitNot,
...@@ -446,7 +444,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -446,7 +444,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
446 //=> {444 //=> {
447 // const casted_node = @fieldParentPtr(ast.Node.SimplePrefixOp, "base", base);445 // const casted_node = @fieldParentPtr(ast.Node.SimplePrefixOp, "base", base);
448 // try renderToken(ais, tree, casted_node.op_token, Space.None);446 // try renderToken(ais, tree, casted_node.op_token, Space.None);
449 // return renderExpression(allocator, ais, tree, casted_node.rhs, space);447 // return renderExpression(ais, tree, casted_node.rhs, space);
450 //},448 //},
451449
452 //.Try,450 //.Try,
...@@ -455,7 +453,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -455,7 +453,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
455 //=> {453 //=> {
456 // const casted_node = @fieldParentPtr(ast.Node.SimplePrefixOp, "base", base);454 // const casted_node = @fieldParentPtr(ast.Node.SimplePrefixOp, "base", base);
457 // try renderToken(ais, tree, casted_node.op_token, Space.Space);455 // try renderToken(ais, tree, casted_node.op_token, Space.Space);
458 // return renderExpression(allocator, ais, tree, casted_node.rhs, space);456 // return renderExpression(ais, tree, casted_node.rhs, space);
459 //},457 //},
460458
461 //.ArrayType => {459 //.ArrayType => {
...@@ -503,7 +501,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -503,7 +501,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
503 // .LBracket => Space.None,501 // .LBracket => Space.None,
504 // else => Space.Space,502 // else => Space.Space,
505 // };503 // };
506 // try renderExpression(allocator, ais, tree, sentinel, sentinel_space);504 // try renderExpression(ais, tree, sentinel, sentinel_space);
507 // }505 // }
508 // switch (op_tok_id) {506 // switch (op_tok_id) {
509 // .Asterisk, .AsteriskAsterisk => {},507 // .Asterisk, .AsteriskAsterisk => {},
...@@ -520,16 +518,16 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -520,16 +518,16 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
520 // try renderToken(ais, tree, align_token, Space.None); // align518 // try renderToken(ais, tree, align_token, Space.None); // align
521 // try renderToken(ais, tree, lparen_token, Space.None); // (519 // try renderToken(ais, tree, lparen_token, Space.None); // (
522520
523 // try renderExpression(allocator, ais, tree, align_info.node, Space.None);521 // try renderExpression(ais, tree, align_info.node, Space.None);
524522
525 // if (align_info.bit_range) |bit_range| {523 // if (align_info.bit_range) |bit_range| {
526 // const colon1 = tree.prevToken(bit_range.start.firstToken());524 // const colon1 = tree.prevToken(bit_range.start.firstToken());
527 // const colon2 = tree.prevToken(bit_range.end.firstToken());525 // const colon2 = tree.prevToken(bit_range.end.firstToken());
528526
529 // try renderToken(ais, tree, colon1, Space.None); // :527 // try renderToken(ais, tree, colon1, Space.None); // :
530 // try renderExpression(allocator, ais, tree, bit_range.start, Space.None);528 // try renderExpression(ais, tree, bit_range.start, Space.None);
531 // try renderToken(ais, tree, colon2, Space.None); // :529 // try renderToken(ais, tree, colon2, Space.None); // :
532 // try renderExpression(allocator, ais, tree, bit_range.end, Space.None);530 // try renderExpression(ais, tree, bit_range.end, Space.None);
533531
534 // const rparen_token = tree.nextToken(bit_range.end.lastToken());532 // const rparen_token = tree.nextToken(bit_range.end.lastToken());
535 // try renderToken(ais, tree, rparen_token, Space.Space); // )533 // try renderToken(ais, tree, rparen_token, Space.Space); // )
...@@ -544,7 +542,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -544,7 +542,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
544 // if (ptr_type.ptr_info.volatile_token) |volatile_token| {542 // if (ptr_type.ptr_info.volatile_token) |volatile_token| {
545 // try renderToken(ais, tree, volatile_token, Space.Space); // volatile543 // try renderToken(ais, tree, volatile_token, Space.Space); // volatile
546 // }544 // }
547 // return renderExpression(allocator, ais, tree, ptr_type.rhs, space);545 // return renderExpression(ais, tree, ptr_type.rhs, space);
548 //},546 //},
549547
550 //.SliceType => {548 //.SliceType => {
...@@ -553,7 +551,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -553,7 +551,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
553 // if (slice_type.ptr_info.sentinel) |sentinel| {551 // if (slice_type.ptr_info.sentinel) |sentinel| {
554 // const colon_token = tree.prevToken(sentinel.firstToken());552 // const colon_token = tree.prevToken(sentinel.firstToken());
555 // try renderToken(ais, tree, colon_token, Space.None); // :553 // try renderToken(ais, tree, colon_token, Space.None); // :
556 // try renderExpression(allocator, ais, tree, sentinel, Space.None);554 // try renderExpression(ais, tree, sentinel, Space.None);
557 // try renderToken(ais, tree, tree.nextToken(sentinel.lastToken()), Space.None); // ]555 // try renderToken(ais, tree, tree.nextToken(sentinel.lastToken()), Space.None); // ]
558 // } else {556 // } else {
559 // try renderToken(ais, tree, tree.nextToken(slice_type.op_token), Space.None); // ]557 // try renderToken(ais, tree, tree.nextToken(slice_type.op_token), Space.None); // ]
...@@ -569,16 +567,16 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -569,16 +567,16 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
569 // try renderToken(ais, tree, align_token, Space.None); // align567 // try renderToken(ais, tree, align_token, Space.None); // align
570 // try renderToken(ais, tree, lparen_token, Space.None); // (568 // try renderToken(ais, tree, lparen_token, Space.None); // (
571569
572 // try renderExpression(allocator, ais, tree, align_info.node, Space.None);570 // try renderExpression(ais, tree, align_info.node, Space.None);
573571
574 // if (align_info.bit_range) |bit_range| {572 // if (align_info.bit_range) |bit_range| {
575 // const colon1 = tree.prevToken(bit_range.start.firstToken());573 // const colon1 = tree.prevToken(bit_range.start.firstToken());
576 // const colon2 = tree.prevToken(bit_range.end.firstToken());574 // const colon2 = tree.prevToken(bit_range.end.firstToken());
577575
578 // try renderToken(ais, tree, colon1, Space.None); // :576 // try renderToken(ais, tree, colon1, Space.None); // :
579 // try renderExpression(allocator, ais, tree, bit_range.start, Space.None);577 // try renderExpression(ais, tree, bit_range.start, Space.None);
580 // try renderToken(ais, tree, colon2, Space.None); // :578 // try renderToken(ais, tree, colon2, Space.None); // :
581 // try renderExpression(allocator, ais, tree, bit_range.end, Space.None);579 // try renderExpression(ais, tree, bit_range.end, Space.None);
582580
583 // const rparen_token = tree.nextToken(bit_range.end.lastToken());581 // const rparen_token = tree.nextToken(bit_range.end.lastToken());
584 // try renderToken(ais, tree, rparen_token, Space.Space); // )582 // try renderToken(ais, tree, rparen_token, Space.Space); // )
...@@ -593,7 +591,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -593,7 +591,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
593 // if (slice_type.ptr_info.volatile_token) |volatile_token| {591 // if (slice_type.ptr_info.volatile_token) |volatile_token| {
594 // try renderToken(ais, tree, volatile_token, Space.Space);592 // try renderToken(ais, tree, volatile_token, Space.Space);
595 // }593 // }
596 // return renderExpression(allocator, ais, tree, slice_type.rhs, space);594 // return renderExpression(ais, tree, slice_type.rhs, space);
597 //},595 //},
598596
599 //.ArrayInitializer, .ArrayInitializerDot => {597 //.ArrayInitializer, .ArrayInitializerDot => {
...@@ -622,7 +620,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -622,7 +620,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
622620
623 // switch (lhs) {621 // switch (lhs) {
624 // .dot => |dot| try renderToken(ais, tree, dot, Space.None),622 // .dot => |dot| try renderToken(ais, tree, dot, Space.None),
625 // .node => |node| try renderExpression(allocator, ais, tree, node, Space.None),623 // .node => |node| try renderExpression(ais, tree, node, Space.None),
626 // }624 // }
627625
628 // if (exprs.len == 0) {626 // if (exprs.len == 0) {
...@@ -634,7 +632,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -634,7 +632,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
634 // const expr = exprs[0];632 // const expr = exprs[0];
635633
636 // try renderToken(ais, tree, lbrace, Space.None);634 // try renderToken(ais, tree, lbrace, Space.None);
637 // try renderExpression(allocator, ais, tree, expr, Space.None);635 // try renderExpression(ais, tree, expr, Space.None);
638 // return renderToken(ais, tree, rtoken, space);636 // return renderToken(ais, tree, rtoken, space);
639 // }637 // }
640638
...@@ -748,7 +746,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -748,7 +746,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
748 // for (section_exprs) |expr, i| {746 // for (section_exprs) |expr, i| {
749 // if (i + 1 < section_exprs.len) {747 // if (i + 1 < section_exprs.len) {
750 // const next_expr = section_exprs[i + 1];748 // const next_expr = section_exprs[i + 1];
751 // try renderExpression(allocator, ais, tree, expr, Space.None);749 // try renderExpression(ais, tree, expr, Space.None);
752750
753 // const comma = tree.nextToken(expr.*.lastToken());751 // const comma = tree.nextToken(expr.*.lastToken());
754752
...@@ -775,10 +773,10 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -775,10 +773,10 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
775 // } else {773 // } else {
776 // const maybe_comma = tree.nextToken(expr.*.lastToken());774 // const maybe_comma = tree.nextToken(expr.*.lastToken());
777 // if (tree.token_tags[maybe_comma] == .Comma) {775 // if (tree.token_tags[maybe_comma] == .Comma) {
778 // try renderExpression(allocator, ais, tree, expr, Space.None); // ,776 // try renderExpression(ais, tree, expr, Space.None); // ,
779 // try renderToken(ais, tree, maybe_comma, Space.Newline); // ,777 // try renderToken(ais, tree, maybe_comma, Space.Newline); // ,
780 // } else {778 // } else {
781 // try renderExpression(allocator, ais, tree, expr, Space.Comma); // ,779 // try renderExpression(ais, tree, expr, Space.Comma); // ,
782 // }780 // }
783 // }781 // }
784 // }782 // }
...@@ -797,11 +795,11 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -797,11 +795,11 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
797 // for (exprs) |expr, i| {795 // for (exprs) |expr, i| {
798 // if (i + 1 < exprs.len) {796 // if (i + 1 < exprs.len) {
799 // const next_expr = exprs[i + 1];797 // const next_expr = exprs[i + 1];
800 // try renderExpression(allocator, ais, tree, expr, Space.None);798 // try renderExpression(ais, tree, expr, Space.None);
801 // const comma = tree.nextToken(expr.*.lastToken());799 // const comma = tree.nextToken(expr.*.lastToken());
802 // try renderToken(ais, tree, comma, Space.Space); // ,800 // try renderToken(ais, tree, comma, Space.Space); // ,
803 // } else {801 // } else {
804 // try renderExpression(allocator, ais, tree, expr, Space.Space);802 // try renderExpression(ais, tree, expr, Space.Space);
805 // }803 // }
806 // }804 // }
807805
...@@ -835,7 +833,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -835,7 +833,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
835 // if (field_inits.len == 0) {833 // if (field_inits.len == 0) {
836 // switch (lhs) {834 // switch (lhs) {
837 // .dot => |dot| try renderToken(ais, tree, dot, Space.None),835 // .dot => |dot| try renderToken(ais, tree, dot, Space.None),
838 // .node => |node| try renderExpression(allocator, ais, tree, node, Space.None),836 // .node => |node| try renderExpression(ais, tree, node, Space.None),
839 // }837 // }
840838
841 // {839 // {
...@@ -886,10 +884,10 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -886,10 +884,10 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
886884
887 // switch (lhs) {885 // switch (lhs) {
888 // .dot => |dot| try renderToken(ais, tree, dot, Space.None),886 // .dot => |dot| try renderToken(ais, tree, dot, Space.None),
889 // .node => |node| try renderExpression(allocator, ais, tree, node, Space.None),887 // .node => |node| try renderExpression(ais, tree, node, Space.None),
890 // }888 // }
891 // try renderToken(ais, tree, lbrace, Space.Space);889 // try renderToken(ais, tree, lbrace, Space.Space);
892 // try renderExpression(allocator, ais, tree, field_inits[0], Space.Space);890 // try renderExpression(ais, tree, field_inits[0], Space.Space);
893 // return renderToken(ais, tree, rtoken, space);891 // return renderToken(ais, tree, rtoken, space);
894 // }892 // }
895893
...@@ -897,18 +895,18 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -897,18 +895,18 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
897 // // render all on one line, no trailing comma895 // // render all on one line, no trailing comma
898 // switch (lhs) {896 // switch (lhs) {
899 // .dot => |dot| try renderToken(ais, tree, dot, Space.None),897 // .dot => |dot| try renderToken(ais, tree, dot, Space.None),
900 // .node => |node| try renderExpression(allocator, ais, tree, node, Space.None),898 // .node => |node| try renderExpression(ais, tree, node, Space.None),
901 // }899 // }
902 // try renderToken(ais, tree, lbrace, Space.Space);900 // try renderToken(ais, tree, lbrace, Space.Space);
903901
904 // for (field_inits) |field_init, i| {902 // for (field_inits) |field_init, i| {
905 // if (i + 1 < field_inits.len) {903 // if (i + 1 < field_inits.len) {
906 // try renderExpression(allocator, ais, tree, field_init, Space.None);904 // try renderExpression(ais, tree, field_init, Space.None);
907905
908 // const comma = tree.nextToken(field_init.lastToken());906 // const comma = tree.nextToken(field_init.lastToken());
909 // try renderToken(ais, tree, comma, Space.Space);907 // try renderToken(ais, tree, comma, Space.Space);
910 // } else {908 // } else {
911 // try renderExpression(allocator, ais, tree, field_init, Space.Space);909 // try renderExpression(ais, tree, field_init, Space.Space);
912 // }910 // }
913 // }911 // }
914912
...@@ -918,7 +916,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -918,7 +916,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
918 // {916 // {
919 // switch (lhs) {917 // switch (lhs) {
920 // .dot => |dot| try renderToken(ais, tree, dot, Space.None),918 // .dot => |dot| try renderToken(ais, tree, dot, Space.None),
921 // .node => |node| try renderExpression(allocator, ais, tree, node, Space.None),919 // .node => |node| try renderExpression(ais, tree, node, Space.None),
922 // }920 // }
923921
924 // ais.pushIndentNextLine();922 // ais.pushIndentNextLine();
...@@ -929,14 +927,14 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -929,14 +927,14 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
929 // for (field_inits) |field_init, i| {927 // for (field_inits) |field_init, i| {
930 // if (i + 1 < field_inits.len) {928 // if (i + 1 < field_inits.len) {
931 // const next_field_init = field_inits[i + 1];929 // const next_field_init = field_inits[i + 1];
932 // try renderExpression(allocator, ais, tree, field_init, Space.None);930 // try renderExpression(ais, tree, field_init, Space.None);
933931
934 // const comma = tree.nextToken(field_init.lastToken());932 // const comma = tree.nextToken(field_init.lastToken());
935 // try renderToken(ais, tree, comma, Space.Newline);933 // try renderToken(ais, tree, comma, Space.Newline);
936934
937 // try renderExtraNewline(tree, ais, next_field_init);935 // try renderExtraNewline(tree, ais, next_field_init);
938 // } else {936 // } else {
939 // try renderExpression(allocator, ais, tree, field_init, Space.Comma);937 // try renderExpression(ais, tree, field_init, Space.Comma);
940 // }938 // }
941 // }939 // }
942 // }940 // }
...@@ -950,7 +948,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -950,7 +948,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
950 // try renderToken(ais, tree, async_token, Space.Space);948 // try renderToken(ais, tree, async_token, Space.Space);
951 // }949 // }
952950
953 // try renderExpression(allocator, ais, tree, call.lhs, Space.None);951 // try renderExpression(ais, tree, call.lhs, Space.None);
954952
955 // const lparen = tree.nextToken(call.lhs.lastToken());953 // const lparen = tree.nextToken(call.lhs.lastToken());
956954
...@@ -974,7 +972,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -974,7 +972,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
974 // for (params) |param_node, i| {972 // for (params) |param_node, i| {
975 // if (i + 1 < params.len) {973 // if (i + 1 < params.len) {
976 // const next_node = params[i + 1];974 // const next_node = params[i + 1];
977 // try renderExpression(allocator, ais, tree, param_node, Space.None);975 // try renderExpression(ais, tree, param_node, Space.None);
978976
979 // // Unindent the comma for multiline string literals977 // // Unindent the comma for multiline string literals
980 // const maybe_multiline_string = param_node.firstToken();978 // const maybe_multiline_string = param_node.firstToken();
...@@ -986,7 +984,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -986,7 +984,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
986 // try renderToken(ais, tree, comma, Space.Newline); // ,984 // try renderToken(ais, tree, comma, Space.Newline); // ,
987 // try renderExtraNewline(tree, ais, next_node);985 // try renderExtraNewline(tree, ais, next_node);
988 // } else {986 // } else {
989 // try renderExpression(allocator, ais, tree, param_node, Space.Comma);987 // try renderExpression(ais, tree, param_node, Space.Comma);
990 // }988 // }
991 // }989 // }
992 // }990 // }
...@@ -1003,7 +1001,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1003,7 +1001,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1003 // ais.pushIndentOneShot();1001 // ais.pushIndentOneShot();
1004 // }1002 // }
10051003
1006 // try renderExpression(allocator, ais, tree, param_node, Space.None);1004 // try renderExpression(ais, tree, param_node, Space.None);
10071005
1008 // if (i + 1 < params.len) {1006 // if (i + 1 < params.len) {
1009 // const comma = tree.nextToken(param_node.lastToken());1007 // const comma = tree.nextToken(param_node.lastToken());
...@@ -1019,7 +1017,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1019,7 +1017,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1019 // const lbracket = tree.nextToken(suffix_op.lhs.lastToken());1017 // const lbracket = tree.nextToken(suffix_op.lhs.lastToken());
1020 // const rbracket = tree.nextToken(suffix_op.index_expr.lastToken());1018 // const rbracket = tree.nextToken(suffix_op.index_expr.lastToken());
10211019
1022 // try renderExpression(allocator, ais, tree, suffix_op.lhs, Space.None);1020 // try renderExpression(ais, tree, suffix_op.lhs, Space.None);
1023 // try renderToken(ais, tree, lbracket, Space.None); // [1021 // try renderToken(ais, tree, lbracket, Space.None); // [
10241022
1025 // const starts_with_comment = tree.token_tags[lbracket + 1] == .LineComment;1023 // const starts_with_comment = tree.token_tags[lbracket + 1] == .LineComment;
...@@ -1029,7 +1027,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1029,7 +1027,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
10291027
1030 // ais.pushIndent();1028 // ais.pushIndent();
1031 // defer ais.popIndent();1029 // defer ais.popIndent();
1032 // try renderExpression(allocator, ais, tree, suffix_op.index_expr, new_space);1030 // try renderExpression(ais, tree, suffix_op.index_expr, new_space);
1033 // }1031 // }
1034 // if (starts_with_comment) try ais.maybeInsertNewline();1032 // if (starts_with_comment) try ais.maybeInsertNewline();
1035 // return renderToken(ais, tree, rbracket, space); // ]1033 // return renderToken(ais, tree, rbracket, space); // ]
...@@ -1037,7 +1035,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1037,7 +1035,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
10371035
1038 //.Slice => {1036 //.Slice => {
1039 // const suffix_op = base.castTag(.Slice).?;1037 // const suffix_op = base.castTag(.Slice).?;
1040 // try renderExpression(allocator, ais, tree, suffix_op.lhs, Space.None);1038 // try renderExpression(ais, tree, suffix_op.lhs, Space.None);
10411039
1042 // const lbracket = tree.prevToken(suffix_op.start.firstToken());1040 // const lbracket = tree.prevToken(suffix_op.start.firstToken());
1043 // const dotdot = tree.nextToken(suffix_op.start.lastToken());1041 // const dotdot = tree.nextToken(suffix_op.start.lastToken());
...@@ -1048,16 +1046,16 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1048,16 +1046,16 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1048 // const after_op_space = if (suffix_op.end != null) after_start_space else Space.None;1046 // const after_op_space = if (suffix_op.end != null) after_start_space else Space.None;
10491047
1050 // try renderToken(ais, tree, lbracket, Space.None); // [1048 // try renderToken(ais, tree, lbracket, Space.None); // [
1051 // try renderExpression(allocator, ais, tree, suffix_op.start, after_start_space);1049 // try renderExpression(ais, tree, suffix_op.start, after_start_space);
1052 // try renderToken(ais, tree, dotdot, after_op_space); // ..1050 // try renderToken(ais, tree, dotdot, after_op_space); // ..
1053 // if (suffix_op.end) |end| {1051 // if (suffix_op.end) |end| {
1054 // const after_end_space = if (suffix_op.sentinel != null) Space.Space else Space.None;1052 // const after_end_space = if (suffix_op.sentinel != null) Space.Space else Space.None;
1055 // try renderExpression(allocator, ais, tree, end, after_end_space);1053 // try renderExpression(ais, tree, end, after_end_space);
1056 // }1054 // }
1057 // if (suffix_op.sentinel) |sentinel| {1055 // if (suffix_op.sentinel) |sentinel| {
1058 // const colon = tree.prevToken(sentinel.firstToken());1056 // const colon = tree.prevToken(sentinel.firstToken());
1059 // try renderToken(ais, tree, colon, Space.None); // :1057 // try renderToken(ais, tree, colon, Space.None); // :
1060 // try renderExpression(allocator, ais, tree, sentinel, Space.None);1058 // try renderExpression(ais, tree, sentinel, Space.None);
1061 // }1059 // }
1062 // return renderToken(ais, tree, suffix_op.rtoken, space); // ]1060 // return renderToken(ais, tree, suffix_op.rtoken, space); // ]
1063 //},1061 //},
...@@ -1065,13 +1063,13 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1065,13 +1063,13 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1065 //.Deref => {1063 //.Deref => {
1066 // const suffix_op = base.castTag(.Deref).?;1064 // const suffix_op = base.castTag(.Deref).?;
10671065
1068 // try renderExpression(allocator, ais, tree, suffix_op.lhs, Space.None);1066 // try renderExpression(ais, tree, suffix_op.lhs, Space.None);
1069 // return renderToken(ais, tree, suffix_op.rtoken, space); // .*1067 // return renderToken(ais, tree, suffix_op.rtoken, space); // .*
1070 //},1068 //},
1071 //.UnwrapOptional => {1069 //.UnwrapOptional => {
1072 // const suffix_op = base.castTag(.UnwrapOptional).?;1070 // const suffix_op = base.castTag(.UnwrapOptional).?;
10731071
1074 // try renderExpression(allocator, ais, tree, suffix_op.lhs, Space.None);1072 // try renderExpression(ais, tree, suffix_op.lhs, Space.None);
1075 // try renderToken(ais, tree, tree.prevToken(suffix_op.rtoken), Space.None); // .1073 // try renderToken(ais, tree, tree.prevToken(suffix_op.rtoken), Space.None); // .
1076 // return renderToken(ais, tree, suffix_op.rtoken, space); // ?1074 // return renderToken(ais, tree, suffix_op.rtoken, space); // ?
1077 //},1075 //},
...@@ -1095,7 +1093,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1095,7 +1093,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1095 // }1093 // }
1096 // try renderToken(ais, tree, label, Space.Space); // label1094 // try renderToken(ais, tree, label, Space.Space); // label
1097 // }1095 // }
1098 // return renderExpression(allocator, ais, tree, maybe_rhs.?, space);1096 // return renderExpression(ais, tree, maybe_rhs.?, space);
1099 //},1097 //},
11001098
1101 //.Continue => {1099 //.Continue => {
...@@ -1114,7 +1112,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1114,7 +1112,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1114 // const flow_expr = base.castTag(.Return).?;1112 // const flow_expr = base.castTag(.Return).?;
1115 // if (flow_expr.getRHS()) |rhs| {1113 // if (flow_expr.getRHS()) |rhs| {
1116 // try renderToken(ais, tree, flow_expr.ltoken, Space.Space);1114 // try renderToken(ais, tree, flow_expr.ltoken, Space.Space);
1117 // return renderExpression(allocator, ais, tree, rhs, space);1115 // return renderExpression(ais, tree, rhs, space);
1118 // } else {1116 // } else {
1119 // return renderToken(ais, tree, flow_expr.ltoken, space);1117 // return renderToken(ais, tree, flow_expr.ltoken, space);
1120 // }1118 // }
...@@ -1124,7 +1122,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1124,7 +1122,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1124 // const payload = @fieldParentPtr(ast.Node.Payload, "base", base);1122 // const payload = @fieldParentPtr(ast.Node.Payload, "base", base);
11251123
1126 // try renderToken(ais, tree, payload.lpipe, Space.None);1124 // try renderToken(ais, tree, payload.lpipe, Space.None);
1127 // try renderExpression(allocator, ais, tree, payload.error_symbol, Space.None);1125 // try renderExpression(ais, tree, payload.error_symbol, Space.None);
1128 // return renderToken(ais, tree, payload.rpipe, space);1126 // return renderToken(ais, tree, payload.rpipe, space);
1129 //},1127 //},
11301128
...@@ -1135,7 +1133,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1135,7 +1133,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1135 // if (payload.ptr_token) |ptr_token| {1133 // if (payload.ptr_token) |ptr_token| {
1136 // try renderToken(ais, tree, ptr_token, Space.None);1134 // try renderToken(ais, tree, ptr_token, Space.None);
1137 // }1135 // }
1138 // try renderExpression(allocator, ais, tree, payload.value_symbol, Space.None);1136 // try renderExpression(ais, tree, payload.value_symbol, Space.None);
1139 // return renderToken(ais, tree, payload.rpipe, space);1137 // return renderToken(ais, tree, payload.rpipe, space);
1140 //},1138 //},
11411139
...@@ -1146,13 +1144,13 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1146,13 +1144,13 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1146 // if (payload.ptr_token) |ptr_token| {1144 // if (payload.ptr_token) |ptr_token| {
1147 // try renderToken(ais, tree, ptr_token, Space.None);1145 // try renderToken(ais, tree, ptr_token, Space.None);
1148 // }1146 // }
1149 // try renderExpression(allocator, ais, tree, payload.value_symbol, Space.None);1147 // try renderExpression(ais, tree, payload.value_symbol, Space.None);
11501148
1151 // if (payload.index_symbol) |index_symbol| {1149 // if (payload.index_symbol) |index_symbol| {
1152 // const comma = tree.nextToken(payload.value_symbol.lastToken());1150 // const comma = tree.nextToken(payload.value_symbol.lastToken());
11531151
1154 // try renderToken(ais, tree, comma, Space.Space);1152 // try renderToken(ais, tree, comma, Space.Space);
1155 // try renderExpression(allocator, ais, tree, index_symbol, Space.None);1153 // try renderExpression(ais, tree, index_symbol, Space.None);
1156 // }1154 // }
11571155
1158 // return renderToken(ais, tree, payload.rpipe, space);1156 // return renderToken(ais, tree, payload.rpipe, space);
...@@ -1164,7 +1162,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1164,7 +1162,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1164 // try renderToken(ais, tree, grouped_expr.lparen, Space.None);1162 // try renderToken(ais, tree, grouped_expr.lparen, Space.None);
1165 // {1163 // {
1166 // ais.pushIndentOneShot();1164 // ais.pushIndentOneShot();
1167 // try renderExpression(allocator, ais, tree, grouped_expr.expr, Space.None);1165 // try renderExpression(ais, tree, grouped_expr.expr, Space.None);
1168 // }1166 // }
1169 // return renderToken(ais, tree, grouped_expr.rparen, space);1167 // return renderToken(ais, tree, grouped_expr.rparen, space);
1170 //},1168 //},
...@@ -1175,7 +1173,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1175,7 +1173,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1175 // try renderToken(ais, tree, field_init.period_token, Space.None); // .1173 // try renderToken(ais, tree, field_init.period_token, Space.None); // .
1176 // try renderToken(ais, tree, field_init.name_token, Space.Space); // name1174 // try renderToken(ais, tree, field_init.name_token, Space.Space); // name
1177 // try renderToken(ais, tree, tree.nextToken(field_init.name_token), Space.Space); // =1175 // try renderToken(ais, tree, tree.nextToken(field_init.name_token), Space.Space); // =
1178 // return renderExpression(allocator, ais, tree, field_init.expr, space);1176 // return renderExpression(ais, tree, field_init.expr, space);
1179 //},1177 //},
11801178
1181 //.ContainerDecl => {1179 //.ContainerDecl => {
...@@ -1200,7 +1198,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1200,7 +1198,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
12001198
1201 // if (enum_tag_type) |expr| {1199 // if (enum_tag_type) |expr| {
1202 // try renderToken(ais, tree, tree.nextToken(enum_token), Space.None); // (1200 // try renderToken(ais, tree, tree.nextToken(enum_token), Space.None); // (
1203 // try renderExpression(allocator, ais, tree, expr, Space.None);1201 // try renderExpression(ais, tree, expr, Space.None);
12041202
1205 // const rparen = tree.nextToken(expr.lastToken());1203 // const rparen = tree.nextToken(expr.lastToken());
1206 // try renderToken(ais, tree, rparen, Space.None); // )1204 // try renderToken(ais, tree, rparen, Space.None); // )
...@@ -1216,7 +1214,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1216,7 +1214,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1216 // const rparen = tree.nextToken(type_expr.lastToken());1214 // const rparen = tree.nextToken(type_expr.lastToken());
12171215
1218 // try renderToken(ais, tree, lparen, Space.None); // (1216 // try renderToken(ais, tree, lparen, Space.None); // (
1219 // try renderExpression(allocator, ais, tree, type_expr, Space.None);1217 // try renderExpression(ais, tree, type_expr, Space.None);
1220 // try renderToken(ais, tree, rparen, Space.Space); // )1218 // try renderToken(ais, tree, rparen, Space.Space); // )
1221 // },1219 // },
1222 // }1220 // }
...@@ -1317,7 +1315,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1317,7 +1315,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
13171315
1318 // try renderToken(ais, tree, err_set_decl.error_token, Space.None); // error1316 // try renderToken(ais, tree, err_set_decl.error_token, Space.None); // error
1319 // try renderToken(ais, tree, lbrace, Space.None); // {1317 // try renderToken(ais, tree, lbrace, Space.None); // {
1320 // try renderExpression(allocator, ais, tree, node, Space.None);1318 // try renderExpression(ais, tree, node, Space.None);
1321 // return renderToken(ais, tree, err_set_decl.rbrace_token, space); // }1319 // return renderToken(ais, tree, err_set_decl.rbrace_token, space); // }
1322 // }1320 // }
13231321
...@@ -1337,12 +1335,12 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1337,12 +1335,12 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1337 // const decls = err_set_decl.decls();1335 // const decls = err_set_decl.decls();
1338 // for (decls) |node, i| {1336 // for (decls) |node, i| {
1339 // if (i + 1 < decls.len) {1337 // if (i + 1 < decls.len) {
1340 // try renderExpression(allocator, ais, tree, node, Space.None);1338 // try renderExpression(ais, tree, node, Space.None);
1341 // try renderToken(ais, tree, tree.nextToken(node.lastToken()), Space.Newline); // ,1339 // try renderToken(ais, tree, tree.nextToken(node.lastToken()), Space.Newline); // ,
13421340
1343 // try renderExtraNewline(tree, ais, decls[i + 1]);1341 // try renderExtraNewline(tree, ais, decls[i + 1]);
1344 // } else {1342 // } else {
1345 // try renderExpression(allocator, ais, tree, node, Space.Comma);1343 // try renderExpression(ais, tree, node, Space.Comma);
1346 // }1344 // }
1347 // }1345 // }
1348 // }1346 // }
...@@ -1354,14 +1352,14 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1354,14 +1352,14 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1354 // const decls = err_set_decl.decls();1352 // const decls = err_set_decl.decls();
1355 // for (decls) |node, i| {1353 // for (decls) |node, i| {
1356 // if (i + 1 < decls.len) {1354 // if (i + 1 < decls.len) {
1357 // try renderExpression(allocator, ais, tree, node, Space.None);1355 // try renderExpression(ais, tree, node, Space.None);
13581356
1359 // const comma_token = tree.nextToken(node.lastToken());1357 // const comma_token = tree.nextToken(node.lastToken());
1360 // assert(tree.token_tags[comma_token] == .Comma);1358 // assert(tree.token_tags[comma_token] == .Comma);
1361 // try renderToken(ais, tree, comma_token, Space.Space); // ,1359 // try renderToken(ais, tree, comma_token, Space.Space); // ,
1362 // try renderExtraNewline(tree, ais, decls[i + 1]);1360 // try renderExtraNewline(tree, ais, decls[i + 1]);
1363 // } else {1361 // } else {
1364 // try renderExpression(allocator, ais, tree, node, Space.Space);1362 // try renderExpression(ais, tree, node, Space.Space);
1365 // }1363 // }
1366 // }1364 // }
13671365
...@@ -1372,7 +1370,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1372,7 +1370,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1372 //.ErrorTag => {1370 //.ErrorTag => {
1373 // const tag = @fieldParentPtr(ast.Node.ErrorTag, "base", base);1371 // const tag = @fieldParentPtr(ast.Node.ErrorTag, "base", base);
13741372
1375 // try renderDocComments(tree, ais, tag, tag.doc_comments);1373 // try renderDocComments(ais, tree, tag, tag.doc_comments);
1376 // return renderToken(ais, tree, tag.name_token, space); // name1374 // return renderToken(ais, tree, tag.name_token, space); // name
1377 //},1375 //},
13781376
...@@ -1431,7 +1429,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1431,7 +1429,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1431 // if (param_node.*.tag == .MultilineStringLiteral or tree.token_tags[maybe_comment] == .LineComment) {1429 // if (param_node.*.tag == .MultilineStringLiteral or tree.token_tags[maybe_comment] == .LineComment) {
1432 // ais.pushIndentOneShot();1430 // ais.pushIndentOneShot();
1433 // }1431 // }
1434 // try renderExpression(allocator, ais, tree, param_node, Space.None);1432 // try renderExpression(ais, tree, param_node, Space.None);
14351433
1436 // if (i + 1 < params.len) {1434 // if (i + 1 < params.len) {
1437 // const comma_token = tree.nextToken(param_node.lastToken());1435 // const comma_token = tree.nextToken(param_node.lastToken());
...@@ -1445,7 +1443,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1445,7 +1443,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1445 // try renderToken(ais, tree, lparen, Space.Newline); // (1443 // try renderToken(ais, tree, lparen, Space.Newline); // (
14461444
1447 // for (builtin_call.params()) |param_node| {1445 // for (builtin_call.params()) |param_node| {
1448 // try renderExpression(allocator, ais, tree, param_node, Space.Comma);1446 // try renderExpression(ais, tree, param_node, Space.Comma);
1449 // }1447 // }
1450 // }1448 // }
14511449
...@@ -1468,7 +1466,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1468,7 +1466,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1468 // }1466 // }
14691467
1470 // if (fn_proto.getLibName()) |lib_name| {1468 // if (fn_proto.getLibName()) |lib_name| {
1471 // try renderExpression(allocator, ais, tree, lib_name, Space.Space);1469 // try renderExpression(ais, tree, lib_name, Space.Space);
1472 // }1470 // }
14731471
1474 // const lparen = if (fn_proto.getNameToken()) |name_token| blk: {1472 // const lparen = if (fn_proto.getNameToken()) |name_token| blk: {
...@@ -1541,7 +1539,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1541,7 +1539,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
15411539
1542 // try renderToken(ais, tree, align_kw, Space.None); // align1540 // try renderToken(ais, tree, align_kw, Space.None); // align
1543 // try renderToken(ais, tree, align_lparen, Space.None); // (1541 // try renderToken(ais, tree, align_lparen, Space.None); // (
1544 // try renderExpression(allocator, ais, tree, align_expr, Space.None);1542 // try renderExpression(ais, tree, align_expr, Space.None);
1545 // try renderToken(ais, tree, align_rparen, Space.Space); // )1543 // try renderToken(ais, tree, align_rparen, Space.Space); // )
1546 // }1544 // }
15471545
...@@ -1552,7 +1550,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1552,7 +1550,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
15521550
1553 // try renderToken(ais, tree, section_kw, Space.None); // section1551 // try renderToken(ais, tree, section_kw, Space.None); // section
1554 // try renderToken(ais, tree, section_lparen, Space.None); // (1552 // try renderToken(ais, tree, section_lparen, Space.None); // (
1555 // try renderExpression(allocator, ais, tree, section_expr, Space.None);1553 // try renderExpression(ais, tree, section_expr, Space.None);
1556 // try renderToken(ais, tree, section_rparen, Space.Space); // )1554 // try renderToken(ais, tree, section_rparen, Space.Space); // )
1557 // }1555 // }
15581556
...@@ -1563,7 +1561,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1563,7 +1561,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
15631561
1564 // try renderToken(ais, tree, callconv_kw, Space.None); // callconv1562 // try renderToken(ais, tree, callconv_kw, Space.None); // callconv
1565 // try renderToken(ais, tree, callconv_lparen, Space.None); // (1563 // try renderToken(ais, tree, callconv_lparen, Space.None); // (
1566 // try renderExpression(allocator, ais, tree, callconv_expr, Space.None);1564 // try renderExpression(ais, tree, callconv_expr, Space.None);
1567 // try renderToken(ais, tree, callconv_rparen, Space.Space); // )1565 // try renderToken(ais, tree, callconv_rparen, Space.Space); // )
1568 // } else if (fn_proto.getIsExternPrototype() != null) {1566 // } else if (fn_proto.getIsExternPrototype() != null) {
1569 // try ais.writer().writeAll("callconv(.C) ");1567 // try ais.writer().writeAll("callconv(.C) ");
...@@ -1573,11 +1571,11 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1573,11 +1571,11 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
15731571
1574 // switch (fn_proto.return_type) {1572 // switch (fn_proto.return_type) {
1575 // .Explicit => |node| {1573 // .Explicit => |node| {
1576 // return renderExpression(allocator, ais, tree, node, space);1574 // return renderExpression(ais, tree, node, space);
1577 // },1575 // },
1578 // .InferErrorSet => |node| {1576 // .InferErrorSet => |node| {
1579 // try renderToken(ais, tree, tree.prevToken(node.firstToken()), Space.None); // !1577 // try renderToken(ais, tree, tree.prevToken(node.firstToken()), Space.None); // !
1580 // return renderExpression(allocator, ais, tree, node, space);1578 // return renderExpression(ais, tree, node, space);
1581 // },1579 // },
1582 // .Invalid => unreachable,1580 // .Invalid => unreachable,
1583 // }1581 // }
...@@ -1589,7 +1587,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1589,7 +1587,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1589 // if (anyframe_type.result) |result| {1587 // if (anyframe_type.result) |result| {
1590 // try renderToken(ais, tree, anyframe_type.anyframe_token, Space.None); // anyframe1588 // try renderToken(ais, tree, anyframe_type.anyframe_token, Space.None); // anyframe
1591 // try renderToken(ais, tree, result.arrow_token, Space.None); // ->1589 // try renderToken(ais, tree, result.arrow_token, Space.None); // ->
1592 // return renderExpression(allocator, ais, tree, result.return_type, space);1590 // return renderExpression(ais, tree, result.return_type, space);
1593 // } else {1591 // } else {
1594 // return renderToken(ais, tree, anyframe_type.anyframe_token, space); // anyframe1592 // return renderToken(ais, tree, anyframe_type.anyframe_token, space); // anyframe
1595 // }1593 // }
...@@ -1607,13 +1605,13 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1607,13 +1605,13 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1607 // const lbrace = tree.nextToken(rparen);1605 // const lbrace = tree.nextToken(rparen);
16081606
1609 // if (switch_node.cases_len == 0) {1607 // if (switch_node.cases_len == 0) {
1610 // try renderExpression(allocator, ais, tree, switch_node.expr, Space.None);1608 // try renderExpression(ais, tree, switch_node.expr, Space.None);
1611 // try renderToken(ais, tree, rparen, Space.Space); // )1609 // try renderToken(ais, tree, rparen, Space.Space); // )
1612 // try renderToken(ais, tree, lbrace, Space.None); // {1610 // try renderToken(ais, tree, lbrace, Space.None); // {
1613 // return renderToken(ais, tree, switch_node.rbrace, space); // }1611 // return renderToken(ais, tree, switch_node.rbrace, space); // }
1614 // }1612 // }
16151613
1616 // try renderExpression(allocator, ais, tree, switch_node.expr, Space.None);1614 // try renderExpression(ais, tree, switch_node.expr, Space.None);
1617 // try renderToken(ais, tree, rparen, Space.Space); // )1615 // try renderToken(ais, tree, rparen, Space.Space); // )
16181616
1619 // {1617 // {
...@@ -1623,7 +1621,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1623,7 +1621,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
16231621
1624 // const cases = switch_node.cases();1622 // const cases = switch_node.cases();
1625 // for (cases) |node, i| {1623 // for (cases) |node, i| {
1626 // try renderExpression(allocator, ais, tree, node, Space.Comma);1624 // try renderExpression(ais, tree, node, Space.Comma);
16271625
1628 // if (i + 1 < cases.len) {1626 // if (i + 1 < cases.len) {
1629 // try renderExtraNewline(tree, ais, cases[i + 1]);1627 // try renderExtraNewline(tree, ais, cases[i + 1]);
...@@ -1648,26 +1646,26 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1648,26 +1646,26 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1648 // const items = switch_case.items();1646 // const items = switch_case.items();
1649 // for (items) |node, i| {1647 // for (items) |node, i| {
1650 // if (i + 1 < items.len) {1648 // if (i + 1 < items.len) {
1651 // try renderExpression(allocator, ais, tree, node, Space.None);1649 // try renderExpression(ais, tree, node, Space.None);
16521650
1653 // const comma_token = tree.nextToken(node.lastToken());1651 // const comma_token = tree.nextToken(node.lastToken());
1654 // try renderToken(ais, tree, comma_token, Space.Space); // ,1652 // try renderToken(ais, tree, comma_token, Space.Space); // ,
1655 // try renderExtraNewline(tree, ais, items[i + 1]);1653 // try renderExtraNewline(tree, ais, items[i + 1]);
1656 // } else {1654 // } else {
1657 // try renderExpression(allocator, ais, tree, node, Space.Space);1655 // try renderExpression(ais, tree, node, Space.Space);
1658 // }1656 // }
1659 // }1657 // }
1660 // } else {1658 // } else {
1661 // const items = switch_case.items();1659 // const items = switch_case.items();
1662 // for (items) |node, i| {1660 // for (items) |node, i| {
1663 // if (i + 1 < items.len) {1661 // if (i + 1 < items.len) {
1664 // try renderExpression(allocator, ais, tree, node, Space.None);1662 // try renderExpression(ais, tree, node, Space.None);
16651663
1666 // const comma_token = tree.nextToken(node.lastToken());1664 // const comma_token = tree.nextToken(node.lastToken());
1667 // try renderToken(ais, tree, comma_token, Space.Newline); // ,1665 // try renderToken(ais, tree, comma_token, Space.Newline); // ,
1668 // try renderExtraNewline(tree, ais, items[i + 1]);1666 // try renderExtraNewline(tree, ais, items[i + 1]);
1669 // } else {1667 // } else {
1670 // try renderExpression(allocator, ais, tree, node, Space.Comma);1668 // try renderExpression(ais, tree, node, Space.Comma);
1671 // }1669 // }
1672 // }1670 // }
1673 // }1671 // }
...@@ -1675,10 +1673,10 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1675,10 +1673,10 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1675 // try renderToken(ais, tree, switch_case.arrow_token, Space.Space); // =>1673 // try renderToken(ais, tree, switch_case.arrow_token, Space.Space); // =>
16761674
1677 // if (switch_case.payload) |payload| {1675 // if (switch_case.payload) |payload| {
1678 // try renderExpression(allocator, ais, tree, payload, Space.Space);1676 // try renderExpression(ais, tree, payload, Space.Space);
1679 // }1677 // }
16801678
1681 // return renderExpression(allocator, ais, tree, switch_case.expr, space);1679 // return renderExpression(ais, tree, switch_case.expr, space);
1682 //},1680 //},
1683 //.SwitchElse => {1681 //.SwitchElse => {
1684 // const switch_else = @fieldParentPtr(ast.Node.SwitchElse, "base", base);1682 // const switch_else = @fieldParentPtr(ast.Node.SwitchElse, "base", base);
...@@ -1695,15 +1693,15 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1695,15 +1693,15 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
16951693
1696 // if (else_node.payload) |payload| {1694 // if (else_node.payload) |payload| {
1697 // const payload_space = if (same_line) Space.Space else Space.Newline;1695 // const payload_space = if (same_line) Space.Space else Space.Newline;
1698 // try renderExpression(allocator, ais, tree, payload, payload_space);1696 // try renderExpression(ais, tree, payload, payload_space);
1699 // }1697 // }
17001698
1701 // if (same_line) {1699 // if (same_line) {
1702 // return renderExpression(allocator, ais, tree, else_node.body, space);1700 // return renderExpression(ais, tree, else_node.body, space);
1703 // } else {1701 // } else {
1704 // ais.pushIndent();1702 // ais.pushIndent();
1705 // defer ais.popIndent();1703 // defer ais.popIndent();
1706 // return renderExpression(allocator, ais, tree, else_node.body, space);1704 // return renderExpression(ais, tree, else_node.body, space);
1707 // }1705 // }
1708 //},1706 //},
17091707
...@@ -1721,7 +1719,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1721,7 +1719,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
17211719
1722 // try renderToken(ais, tree, while_node.while_token, Space.Space); // while1720 // try renderToken(ais, tree, while_node.while_token, Space.Space); // while
1723 // try renderToken(ais, tree, tree.nextToken(while_node.while_token), Space.None); // (1721 // try renderToken(ais, tree, tree.nextToken(while_node.while_token), Space.None); // (
1724 // try renderExpression(allocator, ais, tree, while_node.condition, Space.None);1722 // try renderExpression(ais, tree, while_node.condition, Space.None);
17251723
1726 // const cond_rparen = tree.nextToken(while_node.condition.lastToken());1724 // const cond_rparen = tree.nextToken(while_node.condition.lastToken());
17271725
...@@ -1748,7 +1746,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1748,7 +1746,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
17481746
1749 // if (while_node.payload) |payload| {1747 // if (while_node.payload) |payload| {
1750 // const payload_space = if (while_node.continue_expr != null) Space.Space else block_start_space;1748 // const payload_space = if (while_node.continue_expr != null) Space.Space else block_start_space;
1751 // try renderExpression(allocator, ais, tree, payload, payload_space);1749 // try renderExpression(ais, tree, payload, payload_space);
1752 // }1750 // }
17531751
1754 // if (while_node.continue_expr) |continue_expr| {1752 // if (while_node.continue_expr) |continue_expr| {
...@@ -1759,7 +1757,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1759,7 +1757,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1759 // try renderToken(ais, tree, colon, Space.Space); // :1757 // try renderToken(ais, tree, colon, Space.Space); // :
1760 // try renderToken(ais, tree, lparen, Space.None); // (1758 // try renderToken(ais, tree, lparen, Space.None); // (
17611759
1762 // try renderExpression(allocator, ais, tree, continue_expr, Space.None);1760 // try renderExpression(ais, tree, continue_expr, Space.None);
17631761
1764 // try renderToken(ais, tree, rparen, block_start_space); // )1762 // try renderToken(ais, tree, rparen, block_start_space); // )
1765 // }1763 // }
...@@ -1767,11 +1765,11 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1767,11 +1765,11 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1767 // {1765 // {
1768 // if (!body_is_block) ais.pushIndent();1766 // if (!body_is_block) ais.pushIndent();
1769 // defer if (!body_is_block) ais.popIndent();1767 // defer if (!body_is_block) ais.popIndent();
1770 // try renderExpression(allocator, ais, tree, while_node.body, after_body_space);1768 // try renderExpression(ais, tree, while_node.body, after_body_space);
1771 // }1769 // }
17721770
1773 // if (while_node.@"else") |@"else"| {1771 // if (while_node.@"else") |@"else"| {
1774 // return renderExpression(allocator, ais, tree, &@"else".base, space);1772 // return renderExpression(ais, tree, &@"else".base, space);
1775 // }1773 // }
1776 //},1774 //},
17771775
...@@ -1789,7 +1787,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1789,7 +1787,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
17891787
1790 // try renderToken(ais, tree, for_node.for_token, Space.Space); // for1788 // try renderToken(ais, tree, for_node.for_token, Space.Space); // for
1791 // try renderToken(ais, tree, tree.nextToken(for_node.for_token), Space.None); // (1789 // try renderToken(ais, tree, tree.nextToken(for_node.for_token), Space.None); // (
1792 // try renderExpression(allocator, ais, tree, for_node.array_expr, Space.None);1790 // try renderExpression(ais, tree, for_node.array_expr, Space.None);
17931791
1794 // const rparen = tree.nextToken(for_node.array_expr.lastToken());1792 // const rparen = tree.nextToken(for_node.array_expr.lastToken());
17951793
...@@ -1800,7 +1798,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1800,7 +1798,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1800 // try renderToken(ais, tree, rparen, Space.Space); // )1798 // try renderToken(ais, tree, rparen, Space.Space); // )
18011799
1802 // const space_after_payload = if (body_on_same_line) Space.Space else Space.Newline;1800 // const space_after_payload = if (body_on_same_line) Space.Space else Space.Newline;
1803 // try renderExpression(allocator, ais, tree, for_node.payload, space_after_payload); // |x|1801 // try renderExpression(ais, tree, for_node.payload, space_after_payload); // |x|
18041802
1805 // const space_after_body = blk: {1803 // const space_after_body = blk: {
1806 // if (for_node.@"else") |@"else"| {1804 // if (for_node.@"else") |@"else"| {
...@@ -1818,11 +1816,11 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1818,11 +1816,11 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1818 // {1816 // {
1819 // if (!body_on_same_line) ais.pushIndent();1817 // if (!body_on_same_line) ais.pushIndent();
1820 // defer if (!body_on_same_line) ais.popIndent();1818 // defer if (!body_on_same_line) ais.popIndent();
1821 // try renderExpression(allocator, ais, tree, for_node.body, space_after_body); // { body }1819 // try renderExpression(ais, tree, for_node.body, space_after_body); // { body }
1822 // }1820 // }
18231821
1824 // if (for_node.@"else") |@"else"| {1822 // if (for_node.@"else") |@"else"| {
1825 // return renderExpression(allocator, ais, tree, &@"else".base, space); // else1823 // return renderExpression(ais, tree, &@"else".base, space); // else
1826 // }1824 // }
1827 //},1825 //},
18281826
...@@ -1835,7 +1833,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1835,7 +1833,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1835 // try renderToken(ais, tree, if_node.if_token, Space.Space); // if1833 // try renderToken(ais, tree, if_node.if_token, Space.Space); // if
1836 // try renderToken(ais, tree, lparen, Space.None); // (1834 // try renderToken(ais, tree, lparen, Space.None); // (
18371835
1838 // try renderExpression(allocator, ais, tree, if_node.condition, Space.None); // condition1836 // try renderExpression(ais, tree, if_node.condition, Space.None); // condition
18391837
1840 // const body_is_if_block = if_node.body.tag == .If;1838 // const body_is_if_block = if_node.body.tag == .If;
1841 // const body_is_block = nodeIsBlock(if_node.body);1839 // const body_is_block = nodeIsBlock(if_node.body);
...@@ -1847,14 +1845,14 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1847,14 +1845,14 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1847 // try renderToken(ais, tree, rparen, after_rparen_space); // )1845 // try renderToken(ais, tree, rparen, after_rparen_space); // )
18481846
1849 // if (if_node.payload) |payload| {1847 // if (if_node.payload) |payload| {
1850 // try renderExpression(allocator, ais, tree, payload, Space.BlockStart); // |x|1848 // try renderExpression(ais, tree, payload, Space.BlockStart); // |x|
1851 // }1849 // }
18521850
1853 // if (if_node.@"else") |@"else"| {1851 // if (if_node.@"else") |@"else"| {
1854 // try renderExpression(allocator, ais, tree, if_node.body, Space.SpaceOrOutdent);1852 // try renderExpression(ais, tree, if_node.body, Space.SpaceOrOutdent);
1855 // return renderExpression(allocator, ais, tree, &@"else".base, space);1853 // return renderExpression(ais, tree, &@"else".base, space);
1856 // } else {1854 // } else {
1857 // return renderExpression(allocator, ais, tree, if_node.body, space);1855 // return renderExpression(ais, tree, if_node.body, space);
1858 // }1856 // }
1859 // }1857 // }
18601858
...@@ -1870,7 +1868,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1870,7 +1868,7 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1870 // }1868 // }
18711869
1872 // if (if_node.payload) |payload| {1870 // if (if_node.payload) |payload| {
1873 // try renderExpression(allocator, ais, tree, payload, Space.Newline);1871 // try renderExpression(ais, tree, payload, Space.Newline);
1874 // }1872 // }
18751873
1876 // if (if_node.@"else") |@"else"| {1874 // if (if_node.@"else") |@"else"| {
...@@ -1879,33 +1877,33 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1879,33 +1877,33 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1879 // {1877 // {
1880 // ais.pushIndent();1878 // ais.pushIndent();
1881 // defer ais.popIndent();1879 // defer ais.popIndent();
1882 // try renderExpression(allocator, ais, tree, if_node.body, Space.Newline);1880 // try renderExpression(ais, tree, if_node.body, Space.Newline);
1883 // }1881 // }
18841882
1885 // if (else_is_block) {1883 // if (else_is_block) {
1886 // try renderToken(ais, tree, @"else".else_token, Space.Space); // else1884 // try renderToken(ais, tree, @"else".else_token, Space.Space); // else
18871885
1888 // if (@"else".payload) |payload| {1886 // if (@"else".payload) |payload| {
1889 // try renderExpression(allocator, ais, tree, payload, Space.Space);1887 // try renderExpression(ais, tree, payload, Space.Space);
1890 // }1888 // }
18911889
1892 // return renderExpression(allocator, ais, tree, @"else".body, space);1890 // return renderExpression(ais, tree, @"else".body, space);
1893 // } else {1891 // } else {
1894 // const after_else_space = if (@"else".payload == null) Space.Newline else Space.Space;1892 // const after_else_space = if (@"else".payload == null) Space.Newline else Space.Space;
1895 // try renderToken(ais, tree, @"else".else_token, after_else_space); // else1893 // try renderToken(ais, tree, @"else".else_token, after_else_space); // else
18961894
1897 // if (@"else".payload) |payload| {1895 // if (@"else".payload) |payload| {
1898 // try renderExpression(allocator, ais, tree, payload, Space.Newline);1896 // try renderExpression(ais, tree, payload, Space.Newline);
1899 // }1897 // }
19001898
1901 // ais.pushIndent();1899 // ais.pushIndent();
1902 // defer ais.popIndent();1900 // defer ais.popIndent();
1903 // return renderExpression(allocator, ais, tree, @"else".body, space);1901 // return renderExpression(ais, tree, @"else".body, space);
1904 // }1902 // }
1905 // } else {1903 // } else {
1906 // ais.pushIndent();1904 // ais.pushIndent();
1907 // defer ais.popIndent();1905 // defer ais.popIndent();
1908 // return renderExpression(allocator, ais, tree, if_node.body, space);1906 // return renderExpression(ais, tree, if_node.body, space);
1909 // }1907 // }
1910 // }1908 // }
19111909
...@@ -1914,20 +1912,20 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1914,20 +1912,20 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1914 // try renderToken(ais, tree, rparen, Space.Space); // )1912 // try renderToken(ais, tree, rparen, Space.Space); // )
19151913
1916 // if (if_node.payload) |payload| {1914 // if (if_node.payload) |payload| {
1917 // try renderExpression(allocator, ais, tree, payload, Space.Space);1915 // try renderExpression(ais, tree, payload, Space.Space);
1918 // }1916 // }
19191917
1920 // if (if_node.@"else") |@"else"| {1918 // if (if_node.@"else") |@"else"| {
1921 // try renderExpression(allocator, ais, tree, if_node.body, Space.Space);1919 // try renderExpression(ais, tree, if_node.body, Space.Space);
1922 // try renderToken(ais, tree, @"else".else_token, Space.Space);1920 // try renderToken(ais, tree, @"else".else_token, Space.Space);
19231921
1924 // if (@"else".payload) |payload| {1922 // if (@"else".payload) |payload| {
1925 // try renderExpression(allocator, ais, tree, payload, Space.Space);1923 // try renderExpression(ais, tree, payload, Space.Space);
1926 // }1924 // }
19271925
1928 // return renderExpression(allocator, ais, tree, @"else".body, space);1926 // return renderExpression(ais, tree, @"else".body, space);
1929 // } else {1927 // } else {
1930 // return renderExpression(allocator, ais, tree, if_node.body, space);1928 // return renderExpression(ais, tree, if_node.body, space);
1931 // }1929 // }
1932 //},1930 //},
19331931
...@@ -1948,11 +1946,11 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -1948,11 +1946,11 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
1948 // defer ais.popIndent();1946 // defer ais.popIndent();
19491947
1950 // if (asm_node.outputs.len == 0 and asm_node.inputs.len == 0 and asm_node.clobbers.len == 0) {1948 // if (asm_node.outputs.len == 0 and asm_node.inputs.len == 0 and asm_node.clobbers.len == 0) {
1951 // try renderExpression(allocator, ais, tree, asm_node.template, Space.None);1949 // try renderExpression(ais, tree, asm_node.template, Space.None);
1952 // break :asmblk;1950 // break :asmblk;
1953 // }1951 // }
19541952
1955 // try renderExpression(allocator, ais, tree, asm_node.template, Space.Newline);1953 // try renderExpression(ais, tree, asm_node.template, Space.Newline);
19561954
1957 // ais.setIndentDelta(asm_indent_delta);1955 // ais.setIndentDelta(asm_indent_delta);
1958 // defer ais.setIndentDelta(indent_delta);1956 // defer ais.setIndentDelta(indent_delta);
...@@ -2027,10 +2025,10 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac...@@ -2027,10 +2025,10 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
2027 // defer ais.popIndent();2025 // defer ais.popIndent();
2028 // for (asm_node.clobbers) |clobber_node, i| {2026 // for (asm_node.clobbers) |clobber_node, i| {
2029 // if (i + 1 >= asm_node.clobbers.len) {2027 // if (i + 1 >= asm_node.clobbers.len) {
2030 // try renderExpression(allocator, ais, tree, clobber_node, Space.Newline);2028 // try renderExpression(ais, tree, clobber_node, Space.Newline);
2031 // break :asmblk;2029 // break :asmblk;
2032 // } else {2030 // } else {
2033 // try renderExpression(allocator, ais, tree, clobber_node, Space.None);2031 // try renderExpression(ais, tree, clobber_node, Space.None);
2034 // const comma = tree.nextToken(clobber_node.lastToken());2032 // const comma = tree.nextToken(clobber_node.lastToken());
2035 // try renderToken(ais, tree, comma, Space.Space); // ,2033 // try renderToken(ais, tree, comma, Space.Space); // ,
2036 // }2034 // }
...@@ -2081,7 +2079,7 @@ fn renderArrayType(...@@ -2081,7 +2079,7 @@ fn renderArrayType(
2081 defer if (do_indent) ais.popIndent();2079 defer if (do_indent) ais.popIndent();
20822080
2083 try renderToken(ais, tree, lbracket, Space.None); // [2081 try renderToken(ais, tree, lbracket, Space.None); // [
2084 try renderExpression(allocator, ais, tree, len_expr, new_space);2082 try renderExpression(ais, tree, len_expr, new_space);
20852083
2086 if (starts_with_comment) {2084 if (starts_with_comment) {
2087 try ais.maybeInsertNewline();2085 try ais.maybeInsertNewline();
...@@ -2089,7 +2087,7 @@ fn renderArrayType(...@@ -2089,7 +2087,7 @@ fn renderArrayType(
2089 if (opt_sentinel) |sentinel| {2087 if (opt_sentinel) |sentinel| {
2090 const colon_token = tree.prevToken(sentinel.firstToken());2088 const colon_token = tree.prevToken(sentinel.firstToken());
2091 try renderToken(ais, tree, colon_token, Space.None); // :2089 try renderToken(ais, tree, colon_token, Space.None); // :
2092 try renderExpression(allocator, ais, tree, sentinel, Space.None);2090 try renderExpression(ais, tree, sentinel, Space.None);
2093 }2091 }
2094 if (starts_with_comment) {2092 if (starts_with_comment) {
2095 try ais.maybeInsertNewline();2093 try ais.maybeInsertNewline();
...@@ -2097,7 +2095,7 @@ fn renderArrayType(...@@ -2097,7 +2095,7 @@ fn renderArrayType(
2097 }2095 }
2098 try renderToken(ais, tree, rbracket, Space.None); // ]2096 try renderToken(ais, tree, rbracket, Space.None); // ]
20992097
2100 return renderExpression(allocator, ais, tree, rhs, space);2098 return renderExpression(ais, tree, rhs, space);
2101}2099}
21022100
2103fn renderAsmOutput(2101fn renderAsmOutput(
...@@ -2108,18 +2106,18 @@ fn renderAsmOutput(...@@ -2108,18 +2106,18 @@ fn renderAsmOutput(
2108 space: Space,2106 space: Space,
2109) Error!void {2107) Error!void {
2110 try ais.writer().writeAll("[");2108 try ais.writer().writeAll("[");
2111 try renderExpression(allocator, ais, tree, asm_output.symbolic_name, Space.None);2109 try renderExpression(ais, tree, asm_output.symbolic_name, Space.None);
2112 try ais.writer().writeAll("] ");2110 try ais.writer().writeAll("] ");
2113 try renderExpression(allocator, ais, tree, asm_output.constraint, Space.None);2111 try renderExpression(ais, tree, asm_output.constraint, Space.None);
2114 try ais.writer().writeAll(" (");2112 try ais.writer().writeAll(" (");
21152113
2116 switch (asm_output.kind) {2114 switch (asm_output.kind) {
2117 .Variable => |variable_name| {2115 .Variable => |variable_name| {
2118 try renderExpression(allocator, ais, tree, &variable_name.base, Space.None);2116 try renderExpression(ais, tree, &variable_name.base, Space.None);
2119 },2117 },
2120 .Return => |return_type| {2118 .Return => |return_type| {
2121 try ais.writer().writeAll("-> ");2119 try ais.writer().writeAll("-> ");
2122 try renderExpression(allocator, ais, tree, return_type, Space.None);2120 try renderExpression(ais, tree, return_type, Space.None);
2123 },2121 },
2124 }2122 }
21252123
...@@ -2134,11 +2132,11 @@ fn renderAsmInput(...@@ -2134,11 +2132,11 @@ fn renderAsmInput(
2134 space: Space,2132 space: Space,
2135) Error!void {2133) Error!void {
2136 try ais.writer().writeAll("[");2134 try ais.writer().writeAll("[");
2137 try renderExpression(allocator, ais, tree, asm_input.symbolic_name, Space.None);2135 try renderExpression(ais, tree, asm_input.symbolic_name, Space.None);
2138 try ais.writer().writeAll("] ");2136 try ais.writer().writeAll("] ");
2139 try renderExpression(allocator, ais, tree, asm_input.constraint, Space.None);2137 try renderExpression(ais, tree, asm_input.constraint, Space.None);
2140 try ais.writer().writeAll(" (");2138 try ais.writer().writeAll(" (");
2141 try renderExpression(allocator, ais, tree, asm_input.expr, Space.None);2139 try renderExpression(ais, tree, asm_input.expr, Space.None);
2142 return renderToken(ais, tree, asm_input.lastToken(), space); // )2140 return renderToken(ais, tree, asm_input.lastToken(), space); // )
2143}2141}
21442142
...@@ -2156,7 +2154,7 @@ fn renderVarDecl(...@@ -2156,7 +2154,7 @@ fn renderVarDecl(
2156 try renderToken(ais, tree, extern_export_token, Space.Space); // extern2154 try renderToken(ais, tree, extern_export_token, Space.Space); // extern
21572155
2158 if (var_decl.getLibName()) |lib_name| {2156 if (var_decl.getLibName()) |lib_name| {
2159 try renderExpression(allocator, ais, tree, lib_name, Space.Space); // "lib"2157 try renderExpression(ais, tree, lib_name, Space.Space); // "lib"
2160 }2158 }
2161 }2159 }
21622160
...@@ -2183,7 +2181,7 @@ fn renderVarDecl(...@@ -2183,7 +2181,7 @@ fn renderVarDecl(
2183 const s = if (var_decl.getAlignNode() != null or2181 const s = if (var_decl.getAlignNode() != null or
2184 var_decl.getSectionNode() != null or2182 var_decl.getSectionNode() != null or
2185 var_decl.getInitNode() != null) Space.Space else Space.None;2183 var_decl.getInitNode() != null) Space.Space else Space.None;
2186 try renderExpression(allocator, ais, tree, type_node, s);2184 try renderExpression(ais, tree, type_node, s);
2187 }2185 }
21882186
2189 if (var_decl.getAlignNode()) |align_node| {2187 if (var_decl.getAlignNode()) |align_node| {
...@@ -2192,7 +2190,7 @@ fn renderVarDecl(...@@ -2192,7 +2190,7 @@ fn renderVarDecl(
2192 const rparen = tree.nextToken(align_node.lastToken());2190 const rparen = tree.nextToken(align_node.lastToken());
2193 try renderToken(ais, tree, align_kw, Space.None); // align2191 try renderToken(ais, tree, align_kw, Space.None); // align
2194 try renderToken(ais, tree, lparen, Space.None); // (2192 try renderToken(ais, tree, lparen, Space.None); // (
2195 try renderExpression(allocator, ais, tree, align_node, Space.None);2193 try renderExpression(ais, tree, align_node, Space.None);
2196 const s = if (var_decl.getSectionNode() != null or var_decl.getInitNode() != null) Space.Space else Space.None;2194 const s = if (var_decl.getSectionNode() != null or var_decl.getInitNode() != null) Space.Space else Space.None;
2197 try renderToken(ais, tree, rparen, s); // )2195 try renderToken(ais, tree, rparen, s); // )
2198 }2196 }
...@@ -2203,7 +2201,7 @@ fn renderVarDecl(...@@ -2203,7 +2201,7 @@ fn renderVarDecl(
2203 const rparen = tree.nextToken(section_node.lastToken());2201 const rparen = tree.nextToken(section_node.lastToken());
2204 try renderToken(ais, tree, section_kw, Space.None); // linksection2202 try renderToken(ais, tree, section_kw, Space.None); // linksection
2205 try renderToken(ais, tree, lparen, Space.None); // (2203 try renderToken(ais, tree, lparen, Space.None); // (
2206 try renderExpression(allocator, ais, tree, section_node, Space.None);2204 try renderExpression(ais, tree, section_node, Space.None);
2207 const s = if (var_decl.getInitNode() != null) Space.Space else Space.None;2205 const s = if (var_decl.getInitNode() != null) Space.Space else Space.None;
2208 try renderToken(ais, tree, rparen, s); // )2206 try renderToken(ais, tree, rparen, s); // )
2209 }2207 }
...@@ -2221,7 +2219,7 @@ fn renderVarDecl(...@@ -2221,7 +2219,7 @@ fn renderVarDecl(
2221 try renderToken(ais, tree, eq_token, eq_space); // =2219 try renderToken(ais, tree, eq_token, eq_space); // =
2222 }2220 }
2223 ais.pushIndentOneShot();2221 ais.pushIndentOneShot();
2224 try renderExpression(allocator, ais, tree, init_node, Space.None);2222 try renderExpression(ais, tree, init_node, Space.None);
2225 }2223 }
22262224
2227 try renderToken(ais, tree, var_decl.semicolon_token, Space.Newline);2225 try renderToken(ais, tree, var_decl.semicolon_token, Space.Newline);
...@@ -2234,7 +2232,7 @@ fn renderParamDecl(...@@ -2234,7 +2232,7 @@ fn renderParamDecl(
2234 param_decl: ast.Node.FnProto.ParamDecl,2232 param_decl: ast.Node.FnProto.ParamDecl,
2235 space: Space,2233 space: Space,
2236) Error!void {2234) Error!void {
2237 try renderDocComments(tree, ais, param_decl, param_decl.doc_comments);2235 try renderDocComments(ais, tree, param_decl, param_decl.doc_comments);
22382236
2239 if (param_decl.comptime_token) |comptime_token| {2237 if (param_decl.comptime_token) |comptime_token| {
2240 try renderToken(ais, tree, comptime_token, Space.Space);2238 try renderToken(ais, tree, comptime_token, Space.Space);
...@@ -2247,7 +2245,7 @@ fn renderParamDecl(...@@ -2247,7 +2245,7 @@ fn renderParamDecl(
2247 try renderToken(ais, tree, tree.nextToken(name_token), Space.Space); // :2245 try renderToken(ais, tree, tree.nextToken(name_token), Space.Space); // :
2248 }2246 }
2249 switch (param_decl.param_type) {2247 switch (param_decl.param_type) {
2250 .any_type, .type_expr => |node| try renderExpression(allocator, ais, tree, node, space),2248 .any_type, .type_expr => |node| try renderExpression(ais, tree, node, space),
2251 }2249 }
2252}2250}
22532251
...@@ -2260,13 +2258,13 @@ fn renderStatement(ais: *Ais, tree: ast.Tree, base: ast.Node.Index) Error!void {...@@ -2260,13 +2258,13 @@ fn renderStatement(ais: *Ais, tree: ast.Tree, base: ast.Node.Index) Error!void {
2260 // },2258 // },
2261 // else => {2259 // else => {
2262 // if (base.requireSemiColon()) {2260 // if (base.requireSemiColon()) {
2263 // try renderExpression(allocator, ais, tree, base, Space.None);2261 // try renderExpression(ais, tree, base, Space.None);
22642262
2265 // const semicolon_index = tree.nextToken(base.lastToken());2263 // const semicolon_index = tree.nextToken(base.lastToken());
2266 // assert(tree.token_tags[semicolon_index] == .Semicolon);2264 // assert(tree.token_tags[semicolon_index] == .Semicolon);
2267 // try renderToken(ais, tree, semicolon_index, Space.Newline);2265 // try renderToken(ais, tree, semicolon_index, Space.Newline);
2268 // } else {2266 // } else {
2269 // try renderExpression(allocator, ais, tree, base, Space.Newline);2267 // try renderExpression(ais, tree, base, Space.Newline);
2270 // }2268 // }
2271 // },2269 // },
2272 //}2270 //}
...@@ -2338,34 +2336,32 @@ fn renderToken(ais: *Ais, tree: ast.Tree, token_index: ast.TokenIndex, space: Sp...@@ -2338,34 +2336,32 @@ fn renderToken(ais: *Ais, tree: ast.Tree, token_index: ast.TokenIndex, space: Sp
2338 }2336 }
2339}2337}
23402338
2341fn renderDocComments(2339/// end_token is the token one past the last doc comment token. This function
2342 tree: ast.Tree,2340/// searches backwards from there.
2343 ais: *Ais,2341fn renderDocComments(ais: *Ais, tree: ast.Tree, end_token: ast.TokenIndex) Error!void {
2344 node: anytype,2342 // Search backwards for the first doc comment.
2345 doc_comments: ?ast.Node.Index.DocComment,2343 const token_tags = tree.tokens.items(.tag);
2346) Error!void {2344 if (end_token == 0) return;
2347 const comment = doc_comments orelse return;2345 var tok = end_token - 1;
2348 return renderDocCommentsToken(tree, ais, comment, node.firstToken());2346 while (token_tags[tok] == .DocComment) {
2349}2347 if (tok == 0) break;
23502348 tok -= 1;
2351fn renderDocCommentsToken(2349 } else {
2352 tree: ast.Tree,2350 tok += 1;
2353 ais: *Ais,2351 }
2354 comment: ast.Node.Index.DocComment,2352 const first_tok = tok;
2355 first_token: ast.TokenIndex,2353 if (tok == end_token) return;
2356) Error!void {2354
2357 var tok_i = comment.first_line;2355 while (true) : (tok += 1) {
2358 while (true) : (tok_i += 1) {2356 switch (token_tags[tok]) {
2359 switch (tree.token_tags[tok_i]) {2357 .DocComment => {
2360 .DocComment, .ContainerDocComment => {2358 if (first_tok < end_token) {
2361 if (comment.first_line < first_token) {2359 try renderToken(ais, tree, tok, .Newline);
2362 try renderToken(ais, tree, tok_i, Space.Newline);
2363 } else {2360 } else {
2364 try renderToken(ais, tree, tok_i, Space.NoComment);2361 try renderToken(ais, tree, tok, .NoComment);
2365 try ais.insertNewline();2362 try ais.insertNewline();
2366 }2363 }
2367 },2364 },
2368 .LineComment => continue,
2369 else => break,2365 else => break,
2370 }2366 }
2371 }2367 }