authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2019-12-05 14:46:11+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2019-12-05 14:50:51+02:00
logd40ad92668ad19bebdcf9d4ac1cc30576f5358df
treedfbeccebe456bcd5e9c2bed8fc054848dbc6e231
parent10cc8cad86a39dd0f6d707c3ec30f490ba071230
signature Commit is signed but in an unrecognized format.

use enum literals in render.zig


1 files changed, 126 insertions(+), 126 deletions(-)

lib/std/zig/render.zig+126-126
...@@ -75,7 +75,7 @@ fn renderRoot(...@@ -75,7 +75,7 @@ fn renderRoot(
7575
76 // render all the line comments at the beginning of the file76 // render all the line comments at the beginning of the file
77 while (tok_it.next()) |token| {77 while (tok_it.next()) |token| {
78 if (token.id != Token.Id.LineComment) break;78 if (token.id != .LineComment) break;
79 try stream.print("{}\n", mem.trimRight(u8, tree.tokenSlicePtr(token), " "));79 try stream.print("{}\n", mem.trimRight(u8, tree.tokenSlicePtr(token), " "));
80 if (tok_it.peek()) |next_token| {80 if (tok_it.peek()) |next_token| {
81 const loc = tree.tokenLocationPtr(token.end, next_token);81 const loc = tree.tokenLocationPtr(token.end, next_token);
...@@ -109,8 +109,8 @@ fn renderRoot(...@@ -109,8 +109,8 @@ fn renderRoot(
109 token_index -= 1;109 token_index -= 1;
110 const token = tree.tokens.at(token_index);110 const token = tree.tokens.at(token_index);
111 switch (token.id) {111 switch (token.id) {
112 Token.Id.LineComment => {},112 .LineComment => {},
113 Token.Id.DocComment => {113 .DocComment => {
114 copy_start_token_index = token_index;114 copy_start_token_index = token_index;
115 continue;115 continue;
116 },116 },
...@@ -149,8 +149,8 @@ fn renderRoot(...@@ -149,8 +149,8 @@ fn renderRoot(
149 while (token_index < decl_first_token_index) : (token_index += 1) {149 while (token_index < decl_first_token_index) : (token_index += 1) {
150 const token = tree.tokens.at(token_index);150 const token = tree.tokens.at(token_index);
151 switch (token.id) {151 switch (token.id) {
152 Token.Id.LineComment => {},152 .LineComment => {},
153 Token.Id.Eof => unreachable,153 .Eof => unreachable,
154 else => continue,154 else => continue,
155 }155 }
156 if (mem.eql(u8, mem.trim(u8, tree.tokenSlicePtr(token)[2..], " "), "zig fmt: on")) {156 if (mem.eql(u8, mem.trim(u8, tree.tokenSlicePtr(token)[2..], " "), "zig fmt: on")) {
...@@ -169,8 +169,8 @@ fn renderRoot(...@@ -169,8 +169,8 @@ fn renderRoot(
169 token_index -= 1;169 token_index -= 1;
170 const token = tree.tokens.at(token_index);170 const token = tree.tokens.at(token_index);
171 switch (token.id) {171 switch (token.id) {
172 Token.Id.LineComment => {},172 .LineComment => {},
173 Token.Id.DocComment => {173 .DocComment => {
174 copy_end_token_index = token_index;174 copy_end_token_index = token_index;
175 continue;175 continue;
176 },176 },
...@@ -193,7 +193,7 @@ fn renderRoot(...@@ -193,7 +193,7 @@ fn renderRoot(
193fn renderExtraNewline(tree: *ast.Tree, stream: var, start_col: *usize, node: *ast.Node) @typeOf(stream).Child.Error!void {193fn renderExtraNewline(tree: *ast.Tree, stream: var, start_col: *usize, node: *ast.Node) @typeOf(stream).Child.Error!void {
194 const first_token = node.firstToken();194 const first_token = node.firstToken();
195 var prev_token = first_token;195 var prev_token = first_token;
196 while (tree.tokens.at(prev_token - 1).id == Token.Id.DocComment) {196 while (tree.tokens.at(prev_token - 1).id == .DocComment) {
197 prev_token -= 1;197 prev_token -= 1;
198 }198 }
199 const prev_token_end = tree.tokens.at(prev_token - 1).end;199 const prev_token_end = tree.tokens.at(prev_token - 1).end;
...@@ -206,7 +206,7 @@ fn renderExtraNewline(tree: *ast.Tree, stream: var, start_col: *usize, node: *as...@@ -206,7 +206,7 @@ fn renderExtraNewline(tree: *ast.Tree, stream: var, start_col: *usize, node: *as
206206
207fn renderTopLevelDecl(allocator: *mem.Allocator, stream: var, tree: *ast.Tree, indent: usize, start_col: *usize, decl: *ast.Node) (@typeOf(stream).Child.Error || Error)!void {207fn renderTopLevelDecl(allocator: *mem.Allocator, stream: var, tree: *ast.Tree, indent: usize, start_col: *usize, decl: *ast.Node) (@typeOf(stream).Child.Error || Error)!void {
208 switch (decl.id) {208 switch (decl.id) {
209 ast.Node.Id.FnProto => {209 .FnProto => {
210 const fn_proto = @fieldParentPtr(ast.Node.FnProto, "base", decl);210 const fn_proto = @fieldParentPtr(ast.Node.FnProto, "base", decl);
211211
212 try renderDocComments(tree, stream, fn_proto, indent, start_col);212 try renderDocComments(tree, stream, fn_proto, indent, start_col);
...@@ -220,7 +220,7 @@ fn renderTopLevelDecl(allocator: *mem.Allocator, stream: var, tree: *ast.Tree, i...@@ -220,7 +220,7 @@ fn renderTopLevelDecl(allocator: *mem.Allocator, stream: var, tree: *ast.Tree, i
220 }220 }
221 },221 },
222222
223 ast.Node.Id.Use => {223 .Use => {
224 const use_decl = @fieldParentPtr(ast.Node.Use, "base", decl);224 const use_decl = @fieldParentPtr(ast.Node.Use, "base", decl);
225225
226 if (use_decl.visib_token) |visib_token| {226 if (use_decl.visib_token) |visib_token| {
...@@ -231,14 +231,14 @@ fn renderTopLevelDecl(allocator: *mem.Allocator, stream: var, tree: *ast.Tree, i...@@ -231,14 +231,14 @@ fn renderTopLevelDecl(allocator: *mem.Allocator, stream: var, tree: *ast.Tree, i
231 try renderToken(tree, stream, use_decl.semicolon_token, indent, start_col, Space.Newline); // ;231 try renderToken(tree, stream, use_decl.semicolon_token, indent, start_col, Space.Newline); // ;
232 },232 },
233233
234 ast.Node.Id.VarDecl => {234 .VarDecl => {
235 const var_decl = @fieldParentPtr(ast.Node.VarDecl, "base", decl);235 const var_decl = @fieldParentPtr(ast.Node.VarDecl, "base", decl);
236236
237 try renderDocComments(tree, stream, var_decl, indent, start_col);237 try renderDocComments(tree, stream, var_decl, indent, start_col);
238 try renderVarDecl(allocator, stream, tree, indent, start_col, var_decl);238 try renderVarDecl(allocator, stream, tree, indent, start_col, var_decl);
239 },239 },
240240
241 ast.Node.Id.TestDecl => {241 .TestDecl => {
242 const test_decl = @fieldParentPtr(ast.Node.TestDecl, "base", decl);242 const test_decl = @fieldParentPtr(ast.Node.TestDecl, "base", decl);
243243
244 try renderDocComments(tree, stream, test_decl, indent, start_col);244 try renderDocComments(tree, stream, test_decl, indent, start_col);
...@@ -247,7 +247,7 @@ fn renderTopLevelDecl(allocator: *mem.Allocator, stream: var, tree: *ast.Tree, i...@@ -247,7 +247,7 @@ fn renderTopLevelDecl(allocator: *mem.Allocator, stream: var, tree: *ast.Tree, i
247 try renderExpression(allocator, stream, tree, indent, start_col, test_decl.body_node, Space.Newline);247 try renderExpression(allocator, stream, tree, indent, start_col, test_decl.body_node, Space.Newline);
248 },248 },
249249
250 ast.Node.Id.ContainerField => {250 .ContainerField => {
251 const field = @fieldParentPtr(ast.Node.ContainerField, "base", decl);251 const field = @fieldParentPtr(ast.Node.ContainerField, "base", decl);
252252
253 try renderDocComments(tree, stream, field, indent, start_col);253 try renderDocComments(tree, stream, field, indent, start_col);
...@@ -295,12 +295,12 @@ fn renderTopLevelDecl(allocator: *mem.Allocator, stream: var, tree: *ast.Tree, i...@@ -295,12 +295,12 @@ fn renderTopLevelDecl(allocator: *mem.Allocator, stream: var, tree: *ast.Tree, i
295 }295 }
296 },296 },
297297
298 ast.Node.Id.Comptime => {298 .Comptime => {
299 assert(!decl.requireSemiColon());299 assert(!decl.requireSemiColon());
300 try renderExpression(allocator, stream, tree, indent, start_col, decl, Space.Newline);300 try renderExpression(allocator, stream, tree, indent, start_col, decl, Space.Newline);
301 },301 },
302302
303 ast.Node.Id.DocComment => {303 .DocComment => {
304 const comment = @fieldParentPtr(ast.Node.DocComment, "base", decl);304 const comment = @fieldParentPtr(ast.Node.DocComment, "base", decl);
305 var it = comment.lines.iterator(0);305 var it = comment.lines.iterator(0);
306 while (it.next()) |line_token_index| {306 while (it.next()) |line_token_index| {
...@@ -324,11 +324,11 @@ fn renderExpression(...@@ -324,11 +324,11 @@ fn renderExpression(
324 space: Space,324 space: Space,
325) (@typeOf(stream).Child.Error || Error)!void {325) (@typeOf(stream).Child.Error || Error)!void {
326 switch (base.id) {326 switch (base.id) {
327 ast.Node.Id.Identifier => {327 .Identifier => {
328 const identifier = @fieldParentPtr(ast.Node.Identifier, "base", base);328 const identifier = @fieldParentPtr(ast.Node.Identifier, "base", base);
329 return renderToken(tree, stream, identifier.token, indent, start_col, space);329 return renderToken(tree, stream, identifier.token, indent, start_col, space);
330 },330 },
331 ast.Node.Id.Block => {331 .Block => {
332 const block = @fieldParentPtr(ast.Node.Block, "base", base);332 const block = @fieldParentPtr(ast.Node.Block, "base", base);
333333
334 if (block.label) |label| {334 if (block.label) |label| {
...@@ -357,20 +357,20 @@ fn renderExpression(...@@ -357,20 +357,20 @@ fn renderExpression(
357 return renderToken(tree, stream, block.rbrace, indent, start_col, space);357 return renderToken(tree, stream, block.rbrace, indent, start_col, space);
358 }358 }
359 },359 },
360 ast.Node.Id.Defer => {360 .Defer => {
361 const defer_node = @fieldParentPtr(ast.Node.Defer, "base", base);361 const defer_node = @fieldParentPtr(ast.Node.Defer, "base", base);
362362
363 try renderToken(tree, stream, defer_node.defer_token, indent, start_col, Space.Space);363 try renderToken(tree, stream, defer_node.defer_token, indent, start_col, Space.Space);
364 return renderExpression(allocator, stream, tree, indent, start_col, defer_node.expr, space);364 return renderExpression(allocator, stream, tree, indent, start_col, defer_node.expr, space);
365 },365 },
366 ast.Node.Id.Comptime => {366 .Comptime => {
367 const comptime_node = @fieldParentPtr(ast.Node.Comptime, "base", base);367 const comptime_node = @fieldParentPtr(ast.Node.Comptime, "base", base);
368368
369 try renderToken(tree, stream, comptime_node.comptime_token, indent, start_col, Space.Space);369 try renderToken(tree, stream, comptime_node.comptime_token, indent, start_col, Space.Space);
370 return renderExpression(allocator, stream, tree, indent, start_col, comptime_node.expr, space);370 return renderExpression(allocator, stream, tree, indent, start_col, comptime_node.expr, space);
371 },371 },
372372
373 ast.Node.Id.Suspend => {373 .Suspend => {
374 const suspend_node = @fieldParentPtr(ast.Node.Suspend, "base", base);374 const suspend_node = @fieldParentPtr(ast.Node.Suspend, "base", base);
375375
376 if (suspend_node.body) |body| {376 if (suspend_node.body) |body| {
...@@ -381,7 +381,7 @@ fn renderExpression(...@@ -381,7 +381,7 @@ fn renderExpression(
381 }381 }
382 },382 },
383383
384 ast.Node.Id.InfixOp => {384 .InfixOp => {
385 const infix_op_node = @fieldParentPtr(ast.Node.InfixOp, "base", base);385 const infix_op_node = @fieldParentPtr(ast.Node.InfixOp, "base", base);
386386
387 const op_space = switch (infix_op_node.op) {387 const op_space = switch (infix_op_node.op) {
...@@ -397,7 +397,7 @@ fn renderExpression(...@@ -397,7 +397,7 @@ fn renderExpression(
397397
398 try renderToken(tree, stream, infix_op_node.op_token, indent, start_col, after_op_space);398 try renderToken(tree, stream, infix_op_node.op_token, indent, start_col, after_op_space);
399 if (after_op_space == Space.Newline and399 if (after_op_space == Space.Newline and
400 tree.tokens.at(tree.nextToken(infix_op_node.op_token)).id != Token.Id.MultilineStringLiteralLine)400 tree.tokens.at(tree.nextToken(infix_op_node.op_token)).id != .MultilineStringLiteralLine)
401 {401 {
402 try stream.writeByteNTimes(' ', indent + indent_delta);402 try stream.writeByteNTimes(' ', indent + indent_delta);
403 start_col.* = indent + indent_delta;403 start_col.* = indent + indent_delta;
...@@ -413,11 +413,11 @@ fn renderExpression(...@@ -413,11 +413,11 @@ fn renderExpression(
413 return renderExpression(allocator, stream, tree, indent, start_col, infix_op_node.rhs, space);413 return renderExpression(allocator, stream, tree, indent, start_col, infix_op_node.rhs, space);
414 },414 },
415415
416 ast.Node.Id.PrefixOp => {416 .PrefixOp => {
417 const prefix_op_node = @fieldParentPtr(ast.Node.PrefixOp, "base", base);417 const prefix_op_node = @fieldParentPtr(ast.Node.PrefixOp, "base", base);
418418
419 switch (prefix_op_node.op) {419 switch (prefix_op_node.op) {
420 ast.Node.PrefixOp.Op.PtrType => |ptr_info| {420 .PtrType => |ptr_info| {
421 const op_tok_id = tree.tokens.at(prefix_op_node.op_token).id;421 const op_tok_id = tree.tokens.at(prefix_op_node.op_token).id;
422 switch (op_tok_id) {422 switch (op_tok_id) {
423 .Asterisk, .AsteriskAsterisk => try stream.writeByte('*'),423 .Asterisk, .AsteriskAsterisk => try stream.writeByte('*'),
...@@ -477,7 +477,7 @@ fn renderExpression(...@@ -477,7 +477,7 @@ fn renderExpression(
477 }477 }
478 },478 },
479479
480 ast.Node.PrefixOp.Op.SliceType => |ptr_info| {480 .SliceType => |ptr_info| {
481 try renderToken(tree, stream, prefix_op_node.op_token, indent, start_col, Space.None); // [481 try renderToken(tree, stream, prefix_op_node.op_token, indent, start_col, Space.None); // [
482 if (ptr_info.sentinel) |sentinel| {482 if (ptr_info.sentinel) |sentinel| {
483 const colon_token = tree.prevToken(sentinel.firstToken());483 const colon_token = tree.prevToken(sentinel.firstToken());
...@@ -524,7 +524,7 @@ fn renderExpression(...@@ -524,7 +524,7 @@ fn renderExpression(
524 }524 }
525 },525 },
526526
527 ast.Node.PrefixOp.Op.ArrayType => |array_info| {527 .ArrayType => |array_info| {
528 const lbracket = prefix_op_node.op_token;528 const lbracket = prefix_op_node.op_token;
529 const rbracket = tree.nextToken(if (array_info.sentinel) |sentinel|529 const rbracket = tree.nextToken(if (array_info.sentinel) |sentinel|
530 sentinel.lastToken()530 sentinel.lastToken()
...@@ -551,20 +551,20 @@ fn renderExpression(...@@ -551,20 +551,20 @@ fn renderExpression(
551 }551 }
552 try renderToken(tree, stream, rbracket, indent, start_col, Space.None); // ]552 try renderToken(tree, stream, rbracket, indent, start_col, Space.None); // ]
553 },553 },
554 ast.Node.PrefixOp.Op.BitNot,554 .BitNot,
555 ast.Node.PrefixOp.Op.BoolNot,555 .BoolNot,
556 ast.Node.PrefixOp.Op.Negation,556 .Negation,
557 ast.Node.PrefixOp.Op.NegationWrap,557 .NegationWrap,
558 ast.Node.PrefixOp.Op.OptionalType,558 .OptionalType,
559 ast.Node.PrefixOp.Op.AddressOf,559 .AddressOf,
560 => {560 => {
561 try renderToken(tree, stream, prefix_op_node.op_token, indent, start_col, Space.None);561 try renderToken(tree, stream, prefix_op_node.op_token, indent, start_col, Space.None);
562 },562 },
563563
564 ast.Node.PrefixOp.Op.Try,564 .Try,
565 ast.Node.PrefixOp.Op.Await,565 .Await,
566 ast.Node.PrefixOp.Op.Cancel,566 .Cancel,
567 ast.Node.PrefixOp.Op.Resume,567 .Resume,
568 => {568 => {
569 try renderToken(tree, stream, prefix_op_node.op_token, indent, start_col, Space.Space);569 try renderToken(tree, stream, prefix_op_node.op_token, indent, start_col, Space.Space);
570 },570 },
...@@ -573,11 +573,11 @@ fn renderExpression(...@@ -573,11 +573,11 @@ fn renderExpression(
573 return renderExpression(allocator, stream, tree, indent, start_col, prefix_op_node.rhs, space);573 return renderExpression(allocator, stream, tree, indent, start_col, prefix_op_node.rhs, space);
574 },574 },
575575
576 ast.Node.Id.SuffixOp => {576 .SuffixOp => {
577 const suffix_op = @fieldParentPtr(ast.Node.SuffixOp, "base", base);577 const suffix_op = @fieldParentPtr(ast.Node.SuffixOp, "base", base);
578578
579 switch (suffix_op.op) {579 switch (suffix_op.op) {
580 @TagType(ast.Node.SuffixOp.Op).Call => |*call_info| {580 .Call => |*call_info| {
581 if (call_info.async_token) |async_token| {581 if (call_info.async_token) |async_token| {
582 try renderToken(tree, stream, async_token, indent, start_col, Space.Space);582 try renderToken(tree, stream, async_token, indent, start_col, Space.Space);
583 }583 }
...@@ -593,7 +593,7 @@ fn renderExpression(...@@ -593,7 +593,7 @@ fn renderExpression(
593593
594 const src_has_trailing_comma = blk: {594 const src_has_trailing_comma = blk: {
595 const maybe_comma = tree.prevToken(suffix_op.rtoken);595 const maybe_comma = tree.prevToken(suffix_op.rtoken);
596 break :blk tree.tokens.at(maybe_comma).id == Token.Id.Comma;596 break :blk tree.tokens.at(maybe_comma).id == .Comma;
597 };597 };
598598
599 if (src_has_trailing_comma) {599 if (src_has_trailing_comma) {
...@@ -604,7 +604,7 @@ fn renderExpression(...@@ -604,7 +604,7 @@ fn renderExpression(
604 while (true) {604 while (true) {
605 const param_node = it.next().?;605 const param_node = it.next().?;
606606
607 const param_node_new_indent = if (param_node.*.id == ast.Node.Id.MultilineStringLiteral) blk: {607 const param_node_new_indent = if (param_node.*.id == .MultilineStringLiteral) blk: {
608 break :blk indent;608 break :blk indent;
609 } else blk: {609 } else blk: {
610 try stream.writeByteNTimes(' ', new_indent);610 try stream.writeByteNTimes(' ', new_indent);
...@@ -638,7 +638,7 @@ fn renderExpression(...@@ -638,7 +638,7 @@ fn renderExpression(
638 return renderToken(tree, stream, suffix_op.rtoken, indent, start_col, space);638 return renderToken(tree, stream, suffix_op.rtoken, indent, start_col, space);
639 },639 },
640640
641 ast.Node.SuffixOp.Op.ArrayAccess => |index_expr| {641 .ArrayAccess => |index_expr| {
642 const lbracket = tree.prevToken(index_expr.firstToken());642 const lbracket = tree.prevToken(index_expr.firstToken());
643 const rbracket = tree.nextToken(index_expr.lastToken());643 const rbracket = tree.nextToken(index_expr.lastToken());
644644
...@@ -659,18 +659,18 @@ fn renderExpression(...@@ -659,18 +659,18 @@ fn renderExpression(
659 return renderToken(tree, stream, rbracket, indent, start_col, space); // ]659 return renderToken(tree, stream, rbracket, indent, start_col, space); // ]
660 },660 },
661661
662 ast.Node.SuffixOp.Op.Deref => {662 .Deref => {
663 try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs.node, Space.None);663 try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs.node, Space.None);
664 return renderToken(tree, stream, suffix_op.rtoken, indent, start_col, space); // .*664 return renderToken(tree, stream, suffix_op.rtoken, indent, start_col, space); // .*
665 },665 },
666666
667 ast.Node.SuffixOp.Op.UnwrapOptional => {667 .UnwrapOptional => {
668 try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs.node, Space.None);668 try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs.node, Space.None);
669 try renderToken(tree, stream, tree.prevToken(suffix_op.rtoken), indent, start_col, Space.None); // .669 try renderToken(tree, stream, tree.prevToken(suffix_op.rtoken), indent, start_col, Space.None); // .
670 return renderToken(tree, stream, suffix_op.rtoken, indent, start_col, space); // ?670 return renderToken(tree, stream, suffix_op.rtoken, indent, start_col, space); // ?
671 },671 },
672672
673 @TagType(ast.Node.SuffixOp.Op).Slice => |range| {673 .Slice => |range| {
674 try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs.node, Space.None);674 try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs.node, Space.None);
675675
676 const lbracket = tree.prevToken(range.start.firstToken());676 const lbracket = tree.prevToken(range.start.firstToken());
...@@ -690,7 +690,7 @@ fn renderExpression(...@@ -690,7 +690,7 @@ fn renderExpression(
690 return renderToken(tree, stream, suffix_op.rtoken, indent, start_col, space); // ]690 return renderToken(tree, stream, suffix_op.rtoken, indent, start_col, space); // ]
691 },691 },
692692
693 ast.Node.SuffixOp.Op.StructInitializer => |*field_inits| {693 .StructInitializer => |*field_inits| {
694 const lbrace = switch (suffix_op.lhs) {694 const lbrace = switch (suffix_op.lhs) {
695 .dot => |dot| tree.nextToken(dot),695 .dot => |dot| tree.nextToken(dot),
696 .node => |node| tree.nextToken(node.lastToken()),696 .node => |node| tree.nextToken(node.lastToken()),
...@@ -707,7 +707,7 @@ fn renderExpression(...@@ -707,7 +707,7 @@ fn renderExpression(
707707
708 const src_has_trailing_comma = blk: {708 const src_has_trailing_comma = blk: {
709 const maybe_comma = tree.prevToken(suffix_op.rtoken);709 const maybe_comma = tree.prevToken(suffix_op.rtoken);
710 break :blk tree.tokens.at(maybe_comma).id == Token.Id.Comma;710 break :blk tree.tokens.at(maybe_comma).id == .Comma;
711 };711 };
712712
713 const src_same_line = blk: {713 const src_same_line = blk: {
...@@ -731,7 +731,7 @@ fn renderExpression(...@@ -731,7 +731,7 @@ fn renderExpression(
731 const field_init = field_inits.at(0).*.cast(ast.Node.FieldInitializer).?;731 const field_init = field_inits.at(0).*.cast(ast.Node.FieldInitializer).?;
732732
733 if (field_init.expr.cast(ast.Node.SuffixOp)) |nested_suffix_op| {733 if (field_init.expr.cast(ast.Node.SuffixOp)) |nested_suffix_op| {
734 if (nested_suffix_op.op == ast.Node.SuffixOp.Op.StructInitializer) {734 if (nested_suffix_op.op == .StructInitializer) {
735 break :blk;735 break :blk;
736 }736 }
737 }737 }
...@@ -801,7 +801,7 @@ fn renderExpression(...@@ -801,7 +801,7 @@ fn renderExpression(
801 return renderToken(tree, stream, suffix_op.rtoken, indent, start_col, space);801 return renderToken(tree, stream, suffix_op.rtoken, indent, start_col, space);
802 },802 },
803803
804 ast.Node.SuffixOp.Op.ArrayInitializer => |*exprs| {804 .ArrayInitializer => |*exprs| {
805 const lbrace = switch (suffix_op.lhs) {805 const lbrace = switch (suffix_op.lhs) {
806 .dot => |dot| tree.nextToken(dot),806 .dot => |dot| tree.nextToken(dot),
807 .node => |node| tree.nextToken(node.lastToken()),807 .node => |node| tree.nextToken(node.lastToken()),
...@@ -850,7 +850,7 @@ fn renderExpression(...@@ -850,7 +850,7 @@ fn renderExpression(
850 // all on one line850 // all on one line
851 const src_has_trailing_comma = trailblk: {851 const src_has_trailing_comma = trailblk: {
852 const maybe_comma = tree.prevToken(suffix_op.rtoken);852 const maybe_comma = tree.prevToken(suffix_op.rtoken);
853 break :trailblk tree.tokens.at(maybe_comma).id == Token.Id.Comma;853 break :trailblk tree.tokens.at(maybe_comma).id == .Comma;
854 };854 };
855 if (src_has_trailing_comma) {855 if (src_has_trailing_comma) {
856 break :blk 1; // force row size 1856 break :blk 1; // force row size 1
...@@ -891,7 +891,7 @@ fn renderExpression(...@@ -891,7 +891,7 @@ fn renderExpression(
891891
892 var new_indent = indent + indent_delta;892 var new_indent = indent + indent_delta;
893893
894 if (tree.tokens.at(tree.nextToken(lbrace)).id != Token.Id.MultilineStringLiteralLine) {894 if (tree.tokens.at(tree.nextToken(lbrace)).id != .MultilineStringLiteralLine) {
895 try renderToken(tree, stream, lbrace, new_indent, start_col, Space.Newline);895 try renderToken(tree, stream, lbrace, new_indent, start_col, Space.Newline);
896 try stream.writeByteNTimes(' ', new_indent);896 try stream.writeByteNTimes(' ', new_indent);
897 } else {897 } else {
...@@ -919,14 +919,14 @@ fn renderExpression(...@@ -919,14 +919,14 @@ fn renderExpression(
919 }919 }
920 col = 1;920 col = 1;
921921
922 if (tree.tokens.at(tree.nextToken(comma)).id != Token.Id.MultilineStringLiteralLine) {922 if (tree.tokens.at(tree.nextToken(comma)).id != .MultilineStringLiteralLine) {
923 try renderToken(tree, stream, comma, new_indent, start_col, Space.Newline); // ,923 try renderToken(tree, stream, comma, new_indent, start_col, Space.Newline); // ,
924 } else {924 } else {
925 try renderToken(tree, stream, comma, new_indent, start_col, Space.None); // ,925 try renderToken(tree, stream, comma, new_indent, start_col, Space.None); // ,
926 }926 }
927927
928 try renderExtraNewline(tree, stream, start_col, next_expr.*);928 try renderExtraNewline(tree, stream, start_col, next_expr.*);
929 if (next_expr.*.id != ast.Node.Id.MultilineStringLiteral) {929 if (next_expr.*.id != .MultilineStringLiteral) {
930 try stream.writeByteNTimes(' ', new_indent);930 try stream.writeByteNTimes(' ', new_indent);
931 }931 }
932 } else {932 } else {
...@@ -934,7 +934,7 @@ fn renderExpression(...@@ -934,7 +934,7 @@ fn renderExpression(
934 }934 }
935 }935 }
936 const last_node = it.prev().?;936 const last_node = it.prev().?;
937 if (last_node.*.id != ast.Node.Id.MultilineStringLiteral) {937 if (last_node.*.id != .MultilineStringLiteral) {
938 try stream.writeByteNTimes(' ', indent);938 try stream.writeByteNTimes(' ', indent);
939 }939 }
940 return renderToken(tree, stream, suffix_op.rtoken, indent, start_col, space);940 return renderToken(tree, stream, suffix_op.rtoken, indent, start_col, space);
...@@ -957,11 +957,11 @@ fn renderExpression(...@@ -957,11 +957,11 @@ fn renderExpression(
957 }957 }
958 },958 },
959959
960 ast.Node.Id.ControlFlowExpression => {960 .ControlFlowExpression => {
961 const flow_expr = @fieldParentPtr(ast.Node.ControlFlowExpression, "base", base);961 const flow_expr = @fieldParentPtr(ast.Node.ControlFlowExpression, "base", base);
962962
963 switch (flow_expr.kind) {963 switch (flow_expr.kind) {
964 ast.Node.ControlFlowExpression.Kind.Break => |maybe_label| {964 .Break => |maybe_label| {
965 if (maybe_label == null and flow_expr.rhs == null) {965 if (maybe_label == null and flow_expr.rhs == null) {
966 return renderToken(tree, stream, flow_expr.ltoken, indent, start_col, space); // break966 return renderToken(tree, stream, flow_expr.ltoken, indent, start_col, space); // break
967 }967 }
...@@ -977,7 +977,7 @@ fn renderExpression(...@@ -977,7 +977,7 @@ fn renderExpression(
977 try renderExpression(allocator, stream, tree, indent, start_col, label, Space.Space); // label977 try renderExpression(allocator, stream, tree, indent, start_col, label, Space.Space); // label
978 }978 }
979 },979 },
980 ast.Node.ControlFlowExpression.Kind.Continue => |maybe_label| {980 .Continue => |maybe_label| {
981 assert(flow_expr.rhs == null);981 assert(flow_expr.rhs == null);
982982
983 if (maybe_label == null and flow_expr.rhs == null) {983 if (maybe_label == null and flow_expr.rhs == null) {
...@@ -992,7 +992,7 @@ fn renderExpression(...@@ -992,7 +992,7 @@ fn renderExpression(
992 return renderExpression(allocator, stream, tree, indent, start_col, label, space);992 return renderExpression(allocator, stream, tree, indent, start_col, label, space);
993 }993 }
994 },994 },
995 ast.Node.ControlFlowExpression.Kind.Return => {995 .Return => {
996 if (flow_expr.rhs == null) {996 if (flow_expr.rhs == null) {
997 return renderToken(tree, stream, flow_expr.ltoken, indent, start_col, space);997 return renderToken(tree, stream, flow_expr.ltoken, indent, start_col, space);
998 }998 }
...@@ -1003,7 +1003,7 @@ fn renderExpression(...@@ -1003,7 +1003,7 @@ fn renderExpression(
1003 return renderExpression(allocator, stream, tree, indent, start_col, flow_expr.rhs.?, space);1003 return renderExpression(allocator, stream, tree, indent, start_col, flow_expr.rhs.?, space);
1004 },1004 },
10051005
1006 ast.Node.Id.Payload => {1006 .Payload => {
1007 const payload = @fieldParentPtr(ast.Node.Payload, "base", base);1007 const payload = @fieldParentPtr(ast.Node.Payload, "base", base);
10081008
1009 try renderToken(tree, stream, payload.lpipe, indent, start_col, Space.None);1009 try renderToken(tree, stream, payload.lpipe, indent, start_col, Space.None);
...@@ -1011,7 +1011,7 @@ fn renderExpression(...@@ -1011,7 +1011,7 @@ fn renderExpression(
1011 return renderToken(tree, stream, payload.rpipe, indent, start_col, space);1011 return renderToken(tree, stream, payload.rpipe, indent, start_col, space);
1012 },1012 },
10131013
1014 ast.Node.Id.PointerPayload => {1014 .PointerPayload => {
1015 const payload = @fieldParentPtr(ast.Node.PointerPayload, "base", base);1015 const payload = @fieldParentPtr(ast.Node.PointerPayload, "base", base);
10161016
1017 try renderToken(tree, stream, payload.lpipe, indent, start_col, Space.None);1017 try renderToken(tree, stream, payload.lpipe, indent, start_col, Space.None);
...@@ -1022,7 +1022,7 @@ fn renderExpression(...@@ -1022,7 +1022,7 @@ fn renderExpression(
1022 return renderToken(tree, stream, payload.rpipe, indent, start_col, space);1022 return renderToken(tree, stream, payload.rpipe, indent, start_col, space);
1023 },1023 },
10241024
1025 ast.Node.Id.PointerIndexPayload => {1025 .PointerIndexPayload => {
1026 const payload = @fieldParentPtr(ast.Node.PointerIndexPayload, "base", base);1026 const payload = @fieldParentPtr(ast.Node.PointerIndexPayload, "base", base);
10271027
1028 try renderToken(tree, stream, payload.lpipe, indent, start_col, Space.None);1028 try renderToken(tree, stream, payload.lpipe, indent, start_col, Space.None);
...@@ -1041,7 +1041,7 @@ fn renderExpression(...@@ -1041,7 +1041,7 @@ fn renderExpression(
1041 return renderToken(tree, stream, payload.rpipe, indent, start_col, space);1041 return renderToken(tree, stream, payload.rpipe, indent, start_col, space);
1042 },1042 },
10431043
1044 ast.Node.Id.GroupedExpression => {1044 .GroupedExpression => {
1045 const grouped_expr = @fieldParentPtr(ast.Node.GroupedExpression, "base", base);1045 const grouped_expr = @fieldParentPtr(ast.Node.GroupedExpression, "base", base);
10461046
1047 try renderToken(tree, stream, grouped_expr.lparen, indent, start_col, Space.None);1047 try renderToken(tree, stream, grouped_expr.lparen, indent, start_col, Space.None);
...@@ -1049,7 +1049,7 @@ fn renderExpression(...@@ -1049,7 +1049,7 @@ fn renderExpression(
1049 return renderToken(tree, stream, grouped_expr.rparen, indent, start_col, space);1049 return renderToken(tree, stream, grouped_expr.rparen, indent, start_col, space);
1050 },1050 },
10511051
1052 ast.Node.Id.FieldInitializer => {1052 .FieldInitializer => {
1053 const field_init = @fieldParentPtr(ast.Node.FieldInitializer, "base", base);1053 const field_init = @fieldParentPtr(ast.Node.FieldInitializer, "base", base);
10541054
1055 try renderToken(tree, stream, field_init.period_token, indent, start_col, Space.None); // .1055 try renderToken(tree, stream, field_init.period_token, indent, start_col, Space.None); // .
...@@ -1058,43 +1058,43 @@ fn renderExpression(...@@ -1058,43 +1058,43 @@ fn renderExpression(
1058 return renderExpression(allocator, stream, tree, indent, start_col, field_init.expr, space);1058 return renderExpression(allocator, stream, tree, indent, start_col, field_init.expr, space);
1059 },1059 },
10601060
1061 ast.Node.Id.IntegerLiteral => {1061 .IntegerLiteral => {
1062 const integer_literal = @fieldParentPtr(ast.Node.IntegerLiteral, "base", base);1062 const integer_literal = @fieldParentPtr(ast.Node.IntegerLiteral, "base", base);
1063 return renderToken(tree, stream, integer_literal.token, indent, start_col, space);1063 return renderToken(tree, stream, integer_literal.token, indent, start_col, space);
1064 },1064 },
1065 ast.Node.Id.FloatLiteral => {1065 .FloatLiteral => {
1066 const float_literal = @fieldParentPtr(ast.Node.FloatLiteral, "base", base);1066 const float_literal = @fieldParentPtr(ast.Node.FloatLiteral, "base", base);
1067 return renderToken(tree, stream, float_literal.token, indent, start_col, space);1067 return renderToken(tree, stream, float_literal.token, indent, start_col, space);
1068 },1068 },
1069 ast.Node.Id.StringLiteral => {1069 .StringLiteral => {
1070 const string_literal = @fieldParentPtr(ast.Node.StringLiteral, "base", base);1070 const string_literal = @fieldParentPtr(ast.Node.StringLiteral, "base", base);
1071 return renderToken(tree, stream, string_literal.token, indent, start_col, space);1071 return renderToken(tree, stream, string_literal.token, indent, start_col, space);
1072 },1072 },
1073 ast.Node.Id.CharLiteral => {1073 .CharLiteral => {
1074 const char_literal = @fieldParentPtr(ast.Node.CharLiteral, "base", base);1074 const char_literal = @fieldParentPtr(ast.Node.CharLiteral, "base", base);
1075 return renderToken(tree, stream, char_literal.token, indent, start_col, space);1075 return renderToken(tree, stream, char_literal.token, indent, start_col, space);
1076 },1076 },
1077 ast.Node.Id.BoolLiteral => {1077 .BoolLiteral => {
1078 const bool_literal = @fieldParentPtr(ast.Node.CharLiteral, "base", base);1078 const bool_literal = @fieldParentPtr(ast.Node.CharLiteral, "base", base);
1079 return renderToken(tree, stream, bool_literal.token, indent, start_col, space);1079 return renderToken(tree, stream, bool_literal.token, indent, start_col, space);
1080 },1080 },
1081 ast.Node.Id.NullLiteral => {1081 .NullLiteral => {
1082 const null_literal = @fieldParentPtr(ast.Node.NullLiteral, "base", base);1082 const null_literal = @fieldParentPtr(ast.Node.NullLiteral, "base", base);
1083 return renderToken(tree, stream, null_literal.token, indent, start_col, space);1083 return renderToken(tree, stream, null_literal.token, indent, start_col, space);
1084 },1084 },
1085 ast.Node.Id.Unreachable => {1085 .Unreachable => {
1086 const unreachable_node = @fieldParentPtr(ast.Node.Unreachable, "base", base);1086 const unreachable_node = @fieldParentPtr(ast.Node.Unreachable, "base", base);
1087 return renderToken(tree, stream, unreachable_node.token, indent, start_col, space);1087 return renderToken(tree, stream, unreachable_node.token, indent, start_col, space);
1088 },1088 },
1089 ast.Node.Id.ErrorType => {1089 .ErrorType => {
1090 const error_type = @fieldParentPtr(ast.Node.ErrorType, "base", base);1090 const error_type = @fieldParentPtr(ast.Node.ErrorType, "base", base);
1091 return renderToken(tree, stream, error_type.token, indent, start_col, space);1091 return renderToken(tree, stream, error_type.token, indent, start_col, space);
1092 },1092 },
1093 ast.Node.Id.VarType => {1093 .VarType => {
1094 const var_type = @fieldParentPtr(ast.Node.VarType, "base", base);1094 const var_type = @fieldParentPtr(ast.Node.VarType, "base", base);
1095 return renderToken(tree, stream, var_type.token, indent, start_col, space);1095 return renderToken(tree, stream, var_type.token, indent, start_col, space);
1096 },1096 },
1097 ast.Node.Id.ContainerDecl => {1097 .ContainerDecl => {
1098 const container_decl = @fieldParentPtr(ast.Node.ContainerDecl, "base", base);1098 const container_decl = @fieldParentPtr(ast.Node.ContainerDecl, "base", base);
10991099
1100 if (container_decl.layout_token) |layout_token| {1100 if (container_decl.layout_token) |layout_token| {
...@@ -1159,7 +1159,7 @@ fn renderExpression(...@@ -1159,7 +1159,7 @@ fn renderExpression(
1159 }1159 }
1160 },1160 },
11611161
1162 ast.Node.Id.ErrorSetDecl => {1162 .ErrorSetDecl => {
1163 const err_set_decl = @fieldParentPtr(ast.Node.ErrorSetDecl, "base", base);1163 const err_set_decl = @fieldParentPtr(ast.Node.ErrorSetDecl, "base", base);
11641164
1165 const lbrace = tree.nextToken(err_set_decl.error_token);1165 const lbrace = tree.nextToken(err_set_decl.error_token);
...@@ -1209,20 +1209,20 @@ fn renderExpression(...@@ -1209,20 +1209,20 @@ fn renderExpression(
1209 return renderToken(tree, stream, err_set_decl.rbrace_token, indent, start_col, space); // }1209 return renderToken(tree, stream, err_set_decl.rbrace_token, indent, start_col, space); // }
1210 },1210 },
12111211
1212 ast.Node.Id.ErrorTag => {1212 .ErrorTag => {
1213 const tag = @fieldParentPtr(ast.Node.ErrorTag, "base", base);1213 const tag = @fieldParentPtr(ast.Node.ErrorTag, "base", base);
12141214
1215 try renderDocComments(tree, stream, tag, indent, start_col);1215 try renderDocComments(tree, stream, tag, indent, start_col);
1216 return renderToken(tree, stream, tag.name_token, indent, start_col, space); // name1216 return renderToken(tree, stream, tag.name_token, indent, start_col, space); // name
1217 },1217 },
12181218
1219 ast.Node.Id.MultilineStringLiteral => {1219 .MultilineStringLiteral => {
1220 // TODO: Don't indent in this function, but let the caller indent.1220 // TODO: Don't indent in this function, but let the caller indent.
1221 // If this has been implemented, a lot of hacky solutions in i.e. ArrayInit and FunctionCall can be removed1221 // If this has been implemented, a lot of hacky solutions in i.e. ArrayInit and FunctionCall can be removed
1222 const multiline_str_literal = @fieldParentPtr(ast.Node.MultilineStringLiteral, "base", base);1222 const multiline_str_literal = @fieldParentPtr(ast.Node.MultilineStringLiteral, "base", base);
12231223
1224 var skip_first_indent = true;1224 var skip_first_indent = true;
1225 if (tree.tokens.at(multiline_str_literal.firstToken() - 1).id != Token.Id.LineComment) {1225 if (tree.tokens.at(multiline_str_literal.firstToken() - 1).id != .LineComment) {
1226 try stream.print("\n");1226 try stream.print("\n");
1227 skip_first_indent = false;1227 skip_first_indent = false;
1228 }1228 }
...@@ -1238,12 +1238,12 @@ fn renderExpression(...@@ -1238,12 +1238,12 @@ fn renderExpression(
1238 }1238 }
1239 try stream.writeByteNTimes(' ', indent);1239 try stream.writeByteNTimes(' ', indent);
1240 },1240 },
1241 ast.Node.Id.UndefinedLiteral => {1241 .UndefinedLiteral => {
1242 const undefined_literal = @fieldParentPtr(ast.Node.UndefinedLiteral, "base", base);1242 const undefined_literal = @fieldParentPtr(ast.Node.UndefinedLiteral, "base", base);
1243 return renderToken(tree, stream, undefined_literal.token, indent, start_col, space);1243 return renderToken(tree, stream, undefined_literal.token, indent, start_col, space);
1244 },1244 },
12451245
1246 ast.Node.Id.BuiltinCall => {1246 .BuiltinCall => {
1247 const builtin_call = @fieldParentPtr(ast.Node.BuiltinCall, "base", base);1247 const builtin_call = @fieldParentPtr(ast.Node.BuiltinCall, "base", base);
12481248
1249 try renderToken(tree, stream, builtin_call.builtin_token, indent, start_col, Space.None); // @name1249 try renderToken(tree, stream, builtin_call.builtin_token, indent, start_col, Space.None); // @name
...@@ -1261,12 +1261,12 @@ fn renderExpression(...@@ -1261,12 +1261,12 @@ fn renderExpression(
1261 return renderToken(tree, stream, builtin_call.rparen_token, indent, start_col, space); // )1261 return renderToken(tree, stream, builtin_call.rparen_token, indent, start_col, space); // )
1262 },1262 },
12631263
1264 ast.Node.Id.FnProto => {1264 .FnProto => {
1265 const fn_proto = @fieldParentPtr(ast.Node.FnProto, "base", base);1265 const fn_proto = @fieldParentPtr(ast.Node.FnProto, "base", base);
12661266
1267 if (fn_proto.visib_token) |visib_token_index| {1267 if (fn_proto.visib_token) |visib_token_index| {
1268 const visib_token = tree.tokens.at(visib_token_index);1268 const visib_token = tree.tokens.at(visib_token_index);
1269 assert(visib_token.id == Token.Id.Keyword_pub or visib_token.id == Token.Id.Keyword_export);1269 assert(visib_token.id == .Keyword_pub or visib_token.id == .Keyword_export);
12701270
1271 try renderToken(tree, stream, visib_token_index, indent, start_col, Space.Space); // pub1271 try renderToken(tree, stream, visib_token_index, indent, start_col, Space.Space); // pub
1272 }1272 }
...@@ -1363,7 +1363,7 @@ fn renderExpression(...@@ -1363,7 +1363,7 @@ fn renderExpression(
1363 }1363 }
1364 },1364 },
13651365
1366 ast.Node.Id.AnyFrameType => {1366 .AnyFrameType => {
1367 const anyframe_type = @fieldParentPtr(ast.Node.AnyFrameType, "base", base);1367 const anyframe_type = @fieldParentPtr(ast.Node.AnyFrameType, "base", base);
13681368
1369 if (anyframe_type.result) |result| {1369 if (anyframe_type.result) |result| {
...@@ -1375,9 +1375,9 @@ fn renderExpression(...@@ -1375,9 +1375,9 @@ fn renderExpression(
1375 }1375 }
1376 },1376 },
13771377
1378 ast.Node.Id.DocComment => unreachable, // doc comments are attached to nodes1378 .DocComment => unreachable, // doc comments are attached to nodes
13791379
1380 ast.Node.Id.Switch => {1380 .Switch => {
1381 const switch_node = @fieldParentPtr(ast.Node.Switch, "base", base);1381 const switch_node = @fieldParentPtr(ast.Node.Switch, "base", base);
13821382
1383 try renderToken(tree, stream, switch_node.switch_token, indent, start_col, Space.Space); // switch1383 try renderToken(tree, stream, switch_node.switch_token, indent, start_col, Space.Space); // switch
...@@ -1414,14 +1414,14 @@ fn renderExpression(...@@ -1414,14 +1414,14 @@ fn renderExpression(
1414 return renderToken(tree, stream, switch_node.rbrace, indent, start_col, space); // }1414 return renderToken(tree, stream, switch_node.rbrace, indent, start_col, space); // }
1415 },1415 },
14161416
1417 ast.Node.Id.SwitchCase => {1417 .SwitchCase => {
1418 const switch_case = @fieldParentPtr(ast.Node.SwitchCase, "base", base);1418 const switch_case = @fieldParentPtr(ast.Node.SwitchCase, "base", base);
14191419
1420 assert(switch_case.items.len != 0);1420 assert(switch_case.items.len != 0);
1421 const src_has_trailing_comma = blk: {1421 const src_has_trailing_comma = blk: {
1422 const last_node = switch_case.items.at(switch_case.items.len - 1).*;1422 const last_node = switch_case.items.at(switch_case.items.len - 1).*;
1423 const maybe_comma = tree.nextToken(last_node.lastToken());1423 const maybe_comma = tree.nextToken(last_node.lastToken());
1424 break :blk tree.tokens.at(maybe_comma).id == Token.Id.Comma;1424 break :blk tree.tokens.at(maybe_comma).id == .Comma;
1425 };1425 };
14261426
1427 if (switch_case.items.len == 1 or !src_has_trailing_comma) {1427 if (switch_case.items.len == 1 or !src_has_trailing_comma) {
...@@ -1464,11 +1464,11 @@ fn renderExpression(...@@ -1464,11 +1464,11 @@ fn renderExpression(
14641464
1465 return renderExpression(allocator, stream, tree, indent, start_col, switch_case.expr, space);1465 return renderExpression(allocator, stream, tree, indent, start_col, switch_case.expr, space);
1466 },1466 },
1467 ast.Node.Id.SwitchElse => {1467 .SwitchElse => {
1468 const switch_else = @fieldParentPtr(ast.Node.SwitchElse, "base", base);1468 const switch_else = @fieldParentPtr(ast.Node.SwitchElse, "base", base);
1469 return renderToken(tree, stream, switch_else.token, indent, start_col, space);1469 return renderToken(tree, stream, switch_else.token, indent, start_col, space);
1470 },1470 },
1471 ast.Node.Id.Else => {1471 .Else => {
1472 const else_node = @fieldParentPtr(ast.Node.Else, "base", base);1472 const else_node = @fieldParentPtr(ast.Node.Else, "base", base);
14731473
1474 const body_is_block = nodeIsBlock(else_node.body);1474 const body_is_block = nodeIsBlock(else_node.body);
...@@ -1491,7 +1491,7 @@ fn renderExpression(...@@ -1491,7 +1491,7 @@ fn renderExpression(
1491 return renderExpression(allocator, stream, tree, indent, start_col, else_node.body, space);1491 return renderExpression(allocator, stream, tree, indent, start_col, else_node.body, space);
1492 },1492 },
14931493
1494 ast.Node.Id.While => {1494 .While => {
1495 const while_node = @fieldParentPtr(ast.Node.While, "base", base);1495 const while_node = @fieldParentPtr(ast.Node.While, "base", base);
14961496
1497 if (while_node.label) |label| {1497 if (while_node.label) |label| {
...@@ -1566,7 +1566,7 @@ fn renderExpression(...@@ -1566,7 +1566,7 @@ fn renderExpression(
1566 }1566 }
1567 },1567 },
15681568
1569 ast.Node.Id.For => {1569 .For => {
1570 const for_node = @fieldParentPtr(ast.Node.For, "base", base);1570 const for_node = @fieldParentPtr(ast.Node.For, "base", base);
15711571
1572 if (for_node.label) |label| {1572 if (for_node.label) |label| {
...@@ -1584,7 +1584,7 @@ fn renderExpression(...@@ -1584,7 +1584,7 @@ fn renderExpression(
15841584
1585 const rparen = tree.nextToken(for_node.array_expr.lastToken());1585 const rparen = tree.nextToken(for_node.array_expr.lastToken());
15861586
1587 const body_is_block = for_node.body.id == ast.Node.Id.Block;1587 const body_is_block = for_node.body.id == .Block;
1588 const src_one_line_to_body = !body_is_block and tree.tokensOnSameLine(rparen, for_node.body.firstToken());1588 const src_one_line_to_body = !body_is_block and tree.tokensOnSameLine(rparen, for_node.body.firstToken());
1589 const body_on_same_line = body_is_block or src_one_line_to_body;1589 const body_on_same_line = body_is_block or src_one_line_to_body;
15901590
...@@ -1616,7 +1616,7 @@ fn renderExpression(...@@ -1616,7 +1616,7 @@ fn renderExpression(
1616 }1616 }
1617 },1617 },
16181618
1619 ast.Node.Id.If => {1619 .If => {
1620 const if_node = @fieldParentPtr(ast.Node.If, "base", base);1620 const if_node = @fieldParentPtr(ast.Node.If, "base", base);
16211621
1622 const lparen = tree.prevToken(if_node.condition.firstToken());1622 const lparen = tree.prevToken(if_node.condition.firstToken());
...@@ -1627,7 +1627,7 @@ fn renderExpression(...@@ -1627,7 +1627,7 @@ fn renderExpression(
16271627
1628 try renderExpression(allocator, stream, tree, indent, start_col, if_node.condition, Space.None); // condition1628 try renderExpression(allocator, stream, tree, indent, start_col, if_node.condition, Space.None); // condition
16291629
1630 const body_is_if_block = if_node.body.id == ast.Node.Id.If;1630 const body_is_if_block = if_node.body.id == .If;
1631 const body_is_block = nodeIsBlock(if_node.body);1631 const body_is_block = nodeIsBlock(if_node.body);
16321632
1633 if (body_is_if_block) {1633 if (body_is_if_block) {
...@@ -1710,7 +1710,7 @@ fn renderExpression(...@@ -1710,7 +1710,7 @@ fn renderExpression(
1710 }1710 }
1711 },1711 },
17121712
1713 ast.Node.Id.Asm => {1713 .Asm => {
1714 const asm_node = @fieldParentPtr(ast.Node.Asm, "base", base);1714 const asm_node = @fieldParentPtr(ast.Node.Asm, "base", base);
17151715
1716 try renderToken(tree, stream, asm_node.asm_token, indent, start_col, Space.Space); // asm1716 try renderToken(tree, stream, asm_node.asm_token, indent, start_col, Space.Space); // asm
...@@ -1731,7 +1731,7 @@ fn renderExpression(...@@ -1731,7 +1731,7 @@ fn renderExpression(
17311731
1732 const indent_once = indent + indent_delta;1732 const indent_once = indent + indent_delta;
17331733
1734 if (asm_node.template.id == ast.Node.Id.MultilineStringLiteral) {1734 if (asm_node.template.id == .MultilineStringLiteral) {
1735 // After rendering a multiline string literal the cursor is1735 // After rendering a multiline string literal the cursor is
1736 // already offset by indent1736 // already offset by indent
1737 try stream.writeByteNTimes(' ', indent_delta);1737 try stream.writeByteNTimes(' ', indent_delta);
...@@ -1773,7 +1773,7 @@ fn renderExpression(...@@ -1773,7 +1773,7 @@ fn renderExpression(
1773 try stream.writeByteNTimes(' ', indent_once);1773 try stream.writeByteNTimes(' ', indent_once);
1774 const comma_or_colon = tree.nextToken(node.lastToken());1774 const comma_or_colon = tree.nextToken(node.lastToken());
1775 break :blk switch (tree.tokens.at(comma_or_colon).id) {1775 break :blk switch (tree.tokens.at(comma_or_colon).id) {
1776 Token.Id.Comma => tree.nextToken(comma_or_colon),1776 .Comma => tree.nextToken(comma_or_colon),
1777 else => comma_or_colon,1777 else => comma_or_colon,
1778 };1778 };
1779 }1779 }
...@@ -1811,7 +1811,7 @@ fn renderExpression(...@@ -1811,7 +1811,7 @@ fn renderExpression(
1811 try stream.writeByteNTimes(' ', indent_once);1811 try stream.writeByteNTimes(' ', indent_once);
1812 const comma_or_colon = tree.nextToken(node.lastToken());1812 const comma_or_colon = tree.nextToken(node.lastToken());
1813 break :blk switch (tree.tokens.at(comma_or_colon).id) {1813 break :blk switch (tree.tokens.at(comma_or_colon).id) {
1814 Token.Id.Comma => tree.nextToken(comma_or_colon),1814 .Comma => tree.nextToken(comma_or_colon),
1815 else => comma_or_colon,1815 else => comma_or_colon,
1816 };1816 };
1817 }1817 }
...@@ -1836,7 +1836,7 @@ fn renderExpression(...@@ -1836,7 +1836,7 @@ fn renderExpression(
1836 }1836 }
1837 },1837 },
18381838
1839 ast.Node.Id.AsmInput => {1839 .AsmInput => {
1840 const asm_input = @fieldParentPtr(ast.Node.AsmInput, "base", base);1840 const asm_input = @fieldParentPtr(ast.Node.AsmInput, "base", base);
18411841
1842 try stream.write("[");1842 try stream.write("[");
...@@ -1848,7 +1848,7 @@ fn renderExpression(...@@ -1848,7 +1848,7 @@ fn renderExpression(
1848 return renderToken(tree, stream, asm_input.lastToken(), indent, start_col, space); // )1848 return renderToken(tree, stream, asm_input.lastToken(), indent, start_col, space); // )
1849 },1849 },
18501850
1851 ast.Node.Id.AsmOutput => {1851 .AsmOutput => {
1852 const asm_output = @fieldParentPtr(ast.Node.AsmOutput, "base", base);1852 const asm_output = @fieldParentPtr(ast.Node.AsmOutput, "base", base);
18531853
1854 try stream.write("[");1854 try stream.write("[");
...@@ -1870,19 +1870,19 @@ fn renderExpression(...@@ -1870,19 +1870,19 @@ fn renderExpression(
1870 return renderToken(tree, stream, asm_output.lastToken(), indent, start_col, space); // )1870 return renderToken(tree, stream, asm_output.lastToken(), indent, start_col, space); // )
1871 },1871 },
18721872
1873 ast.Node.Id.EnumLiteral => {1873 .EnumLiteral => {
1874 const enum_literal = @fieldParentPtr(ast.Node.EnumLiteral, "base", base);1874 const enum_literal = @fieldParentPtr(ast.Node.EnumLiteral, "base", base);
18751875
1876 try renderToken(tree, stream, enum_literal.dot, indent, start_col, Space.None); // .1876 try renderToken(tree, stream, enum_literal.dot, indent, start_col, Space.None); // .
1877 return renderToken(tree, stream, enum_literal.name, indent, start_col, space); // name1877 return renderToken(tree, stream, enum_literal.name, indent, start_col, space); // name
1878 },1878 },
18791879
1880 ast.Node.Id.ContainerField,1880 .ContainerField,
1881 ast.Node.Id.Root,1881 .Root,
1882 ast.Node.Id.VarDecl,1882 .VarDecl,
1883 ast.Node.Id.Use,1883 .Use,
1884 ast.Node.Id.TestDecl,1884 .TestDecl,
1885 ast.Node.Id.ParamDecl,1885 .ParamDecl,
1886 => unreachable,1886 => unreachable,
1887 }1887 }
1888}1888}
...@@ -1951,7 +1951,7 @@ fn renderVarDecl(...@@ -1951,7 +1951,7 @@ fn renderVarDecl(
1951 }1951 }
19521952
1953 if (var_decl.init_node) |init_node| {1953 if (var_decl.init_node) |init_node| {
1954 const s = if (init_node.id == ast.Node.Id.MultilineStringLiteral) Space.None else Space.Space;1954 const s = if (init_node.id == .MultilineStringLiteral) Space.None else Space.Space;
1955 try renderToken(tree, stream, var_decl.eq_token, indent, start_col, s); // =1955 try renderToken(tree, stream, var_decl.eq_token, indent, start_col, s); // =
1956 try renderExpression(allocator, stream, tree, indent, start_col, init_node, Space.None);1956 try renderExpression(allocator, stream, tree, indent, start_col, init_node, Space.None);
1957 }1957 }
...@@ -1998,7 +1998,7 @@ fn renderStatement(...@@ -1998,7 +1998,7 @@ fn renderStatement(
1998 base: *ast.Node,1998 base: *ast.Node,
1999) (@typeOf(stream).Child.Error || Error)!void {1999) (@typeOf(stream).Child.Error || Error)!void {
2000 switch (base.id) {2000 switch (base.id) {
2001 ast.Node.Id.VarDecl => {2001 .VarDecl => {
2002 const var_decl = @fieldParentPtr(ast.Node.VarDecl, "base", base);2002 const var_decl = @fieldParentPtr(ast.Node.VarDecl, "base", base);
2003 try renderVarDecl(allocator, stream, tree, indent, start_col, var_decl);2003 try renderVarDecl(allocator, stream, tree, indent, start_col, var_decl);
2004 },2004 },
...@@ -2007,7 +2007,7 @@ fn renderStatement(...@@ -2007,7 +2007,7 @@ fn renderStatement(
2007 try renderExpression(allocator, stream, tree, indent, start_col, base, Space.None);2007 try renderExpression(allocator, stream, tree, indent, start_col, base, Space.None);
20082008
2009 const semicolon_index = tree.nextToken(base.lastToken());2009 const semicolon_index = tree.nextToken(base.lastToken());
2010 assert(tree.tokens.at(semicolon_index).id == Token.Id.Semicolon);2010 assert(tree.tokens.at(semicolon_index).id == .Semicolon);
2011 try renderToken(tree, stream, semicolon_index, indent, start_col, Space.Newline);2011 try renderToken(tree, stream, semicolon_index, indent, start_col, Space.Newline);
2012 } else {2012 } else {
2013 try renderExpression(allocator, stream, tree, indent, start_col, base, Space.Newline);2013 try renderExpression(allocator, stream, tree, indent, start_col, base, Space.Newline);
...@@ -2054,13 +2054,13 @@ fn renderTokenOffset(...@@ -2054,13 +2054,13 @@ fn renderTokenOffset(
2054 var next_token = tree.tokens.at(token_index + 1);2054 var next_token = tree.tokens.at(token_index + 1);
20552055
2056 if (space == Space.Comma) switch (next_token.id) {2056 if (space == Space.Comma) switch (next_token.id) {
2057 Token.Id.Comma => return renderToken(tree, stream, token_index + 1, indent, start_col, Space.Newline),2057 .Comma => return renderToken(tree, stream, token_index + 1, indent, start_col, Space.Newline),
2058 Token.Id.LineComment => {2058 .LineComment => {
2059 try stream.write(", ");2059 try stream.write(", ");
2060 return renderToken(tree, stream, token_index + 1, indent, start_col, Space.Newline);2060 return renderToken(tree, stream, token_index + 1, indent, start_col, Space.Newline);
2061 },2061 },
2062 else => {2062 else => {
2063 if (token_index + 2 < tree.tokens.len and tree.tokens.at(token_index + 2).id == Token.Id.MultilineStringLiteralLine) {2063 if (token_index + 2 < tree.tokens.len and tree.tokens.at(token_index + 2).id == .MultilineStringLiteralLine) {
2064 try stream.write(",");2064 try stream.write(",");
2065 return;2065 return;
2066 } else {2066 } else {
...@@ -2073,7 +2073,7 @@ fn renderTokenOffset(...@@ -2073,7 +2073,7 @@ fn renderTokenOffset(
20732073
2074 // Skip over same line doc comments2074 // Skip over same line doc comments
2075 var offset: usize = 1;2075 var offset: usize = 1;
2076 if (next_token.id == Token.Id.DocComment) {2076 if (next_token.id == .DocComment) {
2077 const loc = tree.tokenLocationPtr(token.end, next_token);2077 const loc = tree.tokenLocationPtr(token.end, next_token);
2078 if (loc.line == 0) {2078 if (loc.line == 0) {
2079 offset += 1;2079 offset += 1;
...@@ -2081,11 +2081,11 @@ fn renderTokenOffset(...@@ -2081,11 +2081,11 @@ fn renderTokenOffset(
2081 }2081 }
2082 }2082 }
20832083
2084 if (next_token.id != Token.Id.LineComment) blk: {2084 if (next_token.id != .LineComment) blk: {
2085 switch (space) {2085 switch (space) {
2086 Space.None, Space.NoNewline => return,2086 Space.None, Space.NoNewline => return,
2087 Space.Newline => {2087 Space.Newline => {
2088 if (next_token.id == Token.Id.MultilineStringLiteralLine) {2088 if (next_token.id == .MultilineStringLiteralLine) {
2089 return;2089 return;
2090 } else {2090 } else {
2091 try stream.write("\n");2091 try stream.write("\n");
...@@ -2094,7 +2094,7 @@ fn renderTokenOffset(...@@ -2094,7 +2094,7 @@ fn renderTokenOffset(
2094 }2094 }
2095 },2095 },
2096 Space.Space, Space.SpaceOrOutdent => {2096 Space.Space, Space.SpaceOrOutdent => {
2097 if (next_token.id == Token.Id.MultilineStringLiteralLine)2097 if (next_token.id == .MultilineStringLiteralLine)
2098 return;2098 return;
2099 try stream.writeByte(' ');2099 try stream.writeByte(' ');
2100 return;2100 return;
...@@ -2130,13 +2130,13 @@ fn renderTokenOffset(...@@ -2130,13 +2130,13 @@ fn renderTokenOffset(
2130 offset = 2;2130 offset = 2;
2131 token = next_token;2131 token = next_token;
2132 next_token = tree.tokens.at(token_index + offset);2132 next_token = tree.tokens.at(token_index + offset);
2133 if (next_token.id != Token.Id.LineComment) {2133 if (next_token.id != .LineComment) {
2134 switch (space) {2134 switch (space) {
2135 Space.None, Space.Space => {2135 Space.None, Space.Space => {
2136 try stream.writeByte('\n');2136 try stream.writeByte('\n');
2137 const after_comment_token = tree.tokens.at(token_index + offset);2137 const after_comment_token = tree.tokens.at(token_index + offset);
2138 const next_line_indent = switch (after_comment_token.id) {2138 const next_line_indent = switch (after_comment_token.id) {
2139 Token.Id.RParen, Token.Id.RBrace, Token.Id.RBracket => indent,2139 .RParen, .RBrace, .RBracket => indent,
2140 else => indent + indent_delta,2140 else => indent + indent_delta,
2141 };2141 };
2142 try stream.writeByteNTimes(' ', next_line_indent);2142 try stream.writeByteNTimes(' ', next_line_indent);
...@@ -2148,7 +2148,7 @@ fn renderTokenOffset(...@@ -2148,7 +2148,7 @@ fn renderTokenOffset(
2148 start_col.* = indent;2148 start_col.* = indent;
2149 },2149 },
2150 Space.Newline => {2150 Space.Newline => {
2151 if (next_token.id == Token.Id.MultilineStringLiteralLine) {2151 if (next_token.id == .MultilineStringLiteralLine) {
2152 return;2152 return;
2153 } else {2153 } else {
2154 try stream.write("\n");2154 try stream.write("\n");
...@@ -2174,10 +2174,10 @@ fn renderTokenOffset(...@@ -2174,10 +2174,10 @@ fn renderTokenOffset(
2174 offset += 1;2174 offset += 1;
2175 token = next_token;2175 token = next_token;
2176 next_token = tree.tokens.at(token_index + offset);2176 next_token = tree.tokens.at(token_index + offset);
2177 if (next_token.id != Token.Id.LineComment) {2177 if (next_token.id != .LineComment) {
2178 switch (space) {2178 switch (space) {
2179 Space.Newline => {2179 Space.Newline => {
2180 if (next_token.id == Token.Id.MultilineStringLiteralLine) {2180 if (next_token.id == .MultilineStringLiteralLine) {
2181 return;2181 return;
2182 } else {2182 } else {
2183 try stream.write("\n");2183 try stream.write("\n");
...@@ -2190,7 +2190,7 @@ fn renderTokenOffset(...@@ -2190,7 +2190,7 @@ fn renderTokenOffset(
21902190
2191 const after_comment_token = tree.tokens.at(token_index + offset);2191 const after_comment_token = tree.tokens.at(token_index + offset);
2192 const next_line_indent = switch (after_comment_token.id) {2192 const next_line_indent = switch (after_comment_token.id) {
2193 Token.Id.RParen, Token.Id.RBrace, Token.Id.RBracket => blk: {2193 .RParen, .RBrace, .RBracket => blk: {
2194 if (indent > indent_delta) {2194 if (indent > indent_delta) {
2195 break :blk indent - indent_delta;2195 break :blk indent - indent_delta;
2196 } else {2196 } else {
...@@ -2251,11 +2251,11 @@ fn renderDocComments(...@@ -2251,11 +2251,11 @@ fn renderDocComments(
22512251
2252fn nodeIsBlock(base: *const ast.Node) bool {2252fn nodeIsBlock(base: *const ast.Node) bool {
2253 return switch (base.id) {2253 return switch (base.id) {
2254 ast.Node.Id.Block,2254 .Block,
2255 ast.Node.Id.If,2255 .If,
2256 ast.Node.Id.For,2256 .For,
2257 ast.Node.Id.While,2257 .While,
2258 ast.Node.Id.Switch,2258 .Switch,
2259 => true,2259 => true,
2260 else => false,2260 else => false,
2261 };2261 };