| ... | @@ -75,7 +75,7 @@ fn renderRoot( | ... | @@ -75,7 +75,7 @@ fn renderRoot( |
| 75 | | 75 | |
| 76 | // render all the line comments at the beginning of the file | 76 | // 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( |
| 193 | fn renderExtraNewline(tree: *ast.Tree, stream: var, start_col: *usize, node: *ast.Node) @typeOf(stream).Child.Error!void { | 193 | fn 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 |
| 206 | | 206 | |
| 207 | fn renderTopLevelDecl(allocator: *mem.Allocator, stream: var, tree: *ast.Tree, indent: usize, start_col: *usize, decl: *ast.Node) (@typeOf(stream).Child.Error || Error)!void { | 207 | fn 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); |
| 211 | | 211 | |
| 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 | }, |
| 222 | | 222 | |
| 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); |
| 225 | | 225 | |
| 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 | }, |
| 233 | | 233 | |
| 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); |
| 236 | | 236 | |
| 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 | }, |
| 240 | | 240 | |
| 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); |
| 243 | | 243 | |
| 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 | }, |
| 249 | | 249 | |
| 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); |
| 252 | | 252 | |
| 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 | }, |
| 297 | | 297 | |
| 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 | }, |
| 302 | | 302 | |
| 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); |
| 333 | | 333 | |
| 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); |
| 362 | | 362 | |
| 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); |
| 368 | | 368 | |
| 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 | }, |
| 372 | | 372 | |
| 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); |
| 375 | | 375 | |
| 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 | }, |
| 383 | | 383 | |
| 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); |
| 386 | | 386 | |
| 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( |
| 397 | | 397 | |
| 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 and | 399 | 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 | }, |
| 415 | | 415 | |
| 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); |
| 418 | | 418 | |
| 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 | }, |
| 479 | | 479 | |
| 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 | }, |
| 526 | | 526 | |
| 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 | }, |
| 563 | | 563 | |
| 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 | }, |
| 575 | | 575 | |
| 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); |
| 578 | | 578 | |
| 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( |
| 593 | | 593 | |
| 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 | }; |
| 598 | | 598 | |
| 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().?; |
| 606 | | 606 | |
| 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 | }, |
| 640 | | 640 | |
| 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()); |
| 644 | | 644 | |
| ... | @@ -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 | }, |
| 661 | | 661 | |
| 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 | }, |
| 666 | | 666 | |
| 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 | }, |
| 672 | | 672 | |
| 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); |
| 675 | | 675 | |
| 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 | }, |
| 692 | | 692 | |
| 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( |
| 707 | | 707 | |
| 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 | }; |
| 712 | | 712 | |
| 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).?; |
| 732 | | 732 | |
| 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 | }, |
| 803 | | 803 | |
| 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 line | 850 | // 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 1 | 856 | break :blk 1; // force row size 1 |
| ... | @@ -891,7 +891,7 @@ fn renderExpression( | ... | @@ -891,7 +891,7 @@ fn renderExpression( |
| 891 | | 891 | |
| 892 | var new_indent = indent + indent_delta; | 892 | var new_indent = indent + indent_delta; |
| 893 | | 893 | |
| 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; |
| 921 | | 921 | |
| 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 | } |
| 927 | | 927 | |
| 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 | }, |
| 959 | | 959 | |
| 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); |
| 962 | | 962 | |
| 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); // break | 966 | 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); // label | 977 | 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); |
| 982 | | 982 | |
| 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 | }, |
| 1005 | | 1005 | |
| 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); |
| 1008 | | 1008 | |
| 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 | }, |
| 1013 | | 1013 | |
| 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); |
| 1016 | | 1016 | |
| 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 | }, |
| 1024 | | 1024 | |
| 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); |
| 1027 | | 1027 | |
| 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 | }, |
| 1043 | | 1043 | |
| 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); |
| 1046 | | 1046 | |
| 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 | }, |
| 1051 | | 1051 | |
| 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); |
| 1054 | | 1054 | |
| 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 | }, |
| 1060 | | 1060 | |
| 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); |
| 1099 | | 1099 | |
| 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 | }, |
| 1161 | | 1161 | |
| 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); |
| 1164 | | 1164 | |
| 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 | }, |
| 1211 | | 1211 | |
| 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); |
| 1214 | | 1214 | |
| 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); // name | 1216 | return renderToken(tree, stream, tag.name_token, indent, start_col, space); // name |
| 1217 | }, | 1217 | }, |
| 1218 | | 1218 | |
| 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 removed | 1221 | // 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); |
| 1223 | | 1223 | |
| 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 | }, |
| 1245 | | 1245 | |
| 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); |
| 1248 | | 1248 | |
| 1249 | try renderToken(tree, stream, builtin_call.builtin_token, indent, start_col, Space.None); // @name | 1249 | 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 | }, |
| 1263 | | 1263 | |
| 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); |
| 1266 | | 1266 | |
| 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); |
| 1270 | | 1270 | |
| 1271 | try renderToken(tree, stream, visib_token_index, indent, start_col, Space.Space); // pub | 1271 | 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 | }, |
| 1365 | | 1365 | |
| 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); |
| 1368 | | 1368 | |
| 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 | }, |
| 1377 | | 1377 | |
| 1378 | ast.Node.Id.DocComment => unreachable, // doc comments are attached to nodes | 1378 | .DocComment => unreachable, // doc comments are attached to nodes |
| 1379 | | 1379 | |
| 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); |
| 1382 | | 1382 | |
| 1383 | try renderToken(tree, stream, switch_node.switch_token, indent, start_col, Space.Space); // switch | 1383 | 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 | }, |
| 1416 | | 1416 | |
| 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); |
| 1419 | | 1419 | |
| 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 | }; |
| 1426 | | 1426 | |
| 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( |
| 1464 | | 1464 | |
| 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); |
| 1473 | | 1473 | |
| 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 | }, |
| 1493 | | 1493 | |
| 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); |
| 1496 | | 1496 | |
| 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 | }, |
| 1568 | | 1568 | |
| 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); |
| 1571 | | 1571 | |
| 1572 | if (for_node.label) |label| { | 1572 | if (for_node.label) |label| { |
| ... | @@ -1584,7 +1584,7 @@ fn renderExpression( | ... | @@ -1584,7 +1584,7 @@ fn renderExpression( |
| 1584 | | 1584 | |
| 1585 | const rparen = tree.nextToken(for_node.array_expr.lastToken()); | 1585 | const rparen = tree.nextToken(for_node.array_expr.lastToken()); |
| 1586 | | 1586 | |
| 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; |
| 1590 | | 1590 | |
| ... | @@ -1616,7 +1616,7 @@ fn renderExpression( | ... | @@ -1616,7 +1616,7 @@ fn renderExpression( |
| 1616 | } | 1616 | } |
| 1617 | }, | 1617 | }, |
| 1618 | | 1618 | |
| 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); |
| 1621 | | 1621 | |
| 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( |
| 1627 | | 1627 | |
| 1628 | try renderExpression(allocator, stream, tree, indent, start_col, if_node.condition, Space.None); // condition | 1628 | try renderExpression(allocator, stream, tree, indent, start_col, if_node.condition, Space.None); // condition |
| 1629 | | 1629 | |
| 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); |
| 1632 | | 1632 | |
| 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 | }, |
| 1712 | | 1712 | |
| 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); |
| 1715 | | 1715 | |
| 1716 | try renderToken(tree, stream, asm_node.asm_token, indent, start_col, Space.Space); // asm | 1716 | 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( |
| 1731 | | 1731 | |
| 1732 | const indent_once = indent + indent_delta; | 1732 | const indent_once = indent + indent_delta; |
| 1733 | | 1733 | |
| 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 is | 1735 | // After rendering a multiline string literal the cursor is |
| 1736 | // already offset by indent | 1736 | // 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 | }, |
| 1838 | | 1838 | |
| 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); |
| 1841 | | 1841 | |
| 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 | }, |
| 1850 | | 1850 | |
| 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); |
| 1853 | | 1853 | |
| 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 | }, |
| 1872 | | 1872 | |
| 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); |
| 1875 | | 1875 | |
| 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); // name | 1877 | return renderToken(tree, stream, enum_literal.name, indent, start_col, space); // name |
| 1878 | }, | 1878 | }, |
| 1879 | | 1879 | |
| 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 | } |
| 1952 | | 1952 | |
| 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); |
| 2008 | | 2008 | |
| 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); |
| 2055 | | 2055 | |
| 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( |
| 2073 | | 2073 | |
| 2074 | // Skip over same line doc comments | 2074 | // 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 | } |
| 2083 | | 2083 | |
| 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( |
| 2190 | | 2190 | |
| 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( |
| 2251 | | 2251 | |
| 2252 | fn nodeIsBlock(base: *const ast.Node) bool { | 2252 | fn 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 | }; |