authorgravatar for lachlan@lakebythewoods.xyzLachlan Easton <lachlan@lakebythewoods.xyz> 2020-08-31 23:39:30+10:00
committergravatar for lachlan@lakebythewoods.xyzLachlan Easton <lachlan@lakebythewoods.xyz> 2020-08-31 23:39:50+10:00
log5aca3baea62326dee301ec29c567dc224baa4a08
tree66897f2950cb209d463601c90cd37d02ee0d5280
parent50c8a53188bdd20321990b7a4999f534b9e613dd

zig fmt: Remove dynamic stack from auto-indenting-stream


7 files changed, 68 insertions(+), 82 deletions(-)

lib/std/io.zig+2-2
...@@ -191,10 +191,10 @@ pub const BufferedAtomicFile = @import("io/buffered_atomic_file.zig").BufferedAt...@@ -191,10 +191,10 @@ pub const BufferedAtomicFile = @import("io/buffered_atomic_file.zig").BufferedAt
191pub const StreamSource = @import("io/stream_source.zig").StreamSource;191pub const StreamSource = @import("io/stream_source.zig").StreamSource;
192192
193/// A Writer that doesn't write to anything.193/// A Writer that doesn't write to anything.
194pub var null_writer = @as(NullWriter, .{ .context = {} });194pub const null_writer = @as(NullWriter, .{ .context = {} });
195195
196/// Deprecated: use `null_writer`196/// Deprecated: use `null_writer`
197pub var null_out_stream = null_writer;197pub const null_out_stream = null_writer;
198198
199const NullWriter = Writer(void, error{}, dummyWrite);199const NullWriter = Writer(void, error{}, dummyWrite);
200/// Deprecated: use NullWriter200/// Deprecated: use NullWriter
lib/std/io/auto_indenting_stream.zig+22-36
...@@ -1,37 +1,31 @@...@@ -1,37 +1,31 @@
1const std = @import("../std.zig");1const std = @import("../std.zig");
2const io = std.io;2const io = std.io;
3const mem = std.mem;3const mem = std.mem;
4const Allocator = mem.Allocator;
5const ArrayList = std.ArrayList;
6const assert = std.debug.assert;4const assert = std.debug.assert;
75
8/// Automatically inserts indentation of written data by keeping6/// Automatically inserts indentation of written data by keeping
9/// track of the current indentation level7/// track of the current indentation level
10pub fn AutoIndentingStream(comptime indent_delta: usize, comptime WriterType: type) type {8pub fn AutoIndentingStream(comptime WriterType: type) type {
11 return struct {9 return struct {
12 const Self = @This();10 const Self = @This();
13 pub const Error = WriterType.Error;11 pub const Error = WriterType.Error;
14 pub const PushError = Allocator.Error;
15 pub const Writer = io.Writer(*Self, Error, write);12 pub const Writer = io.Writer(*Self, Error, write);
16 const Stack = ArrayList(usize);
1713
18 writer_pointer: *WriterType,14 writer_pointer: *WriterType,
19 indent_stack: Stack,
2015
16 indent_stack: usize = 0,
17 indent_delta: usize,
21 current_line_empty: bool = true,18 current_line_empty: bool = true,
22 indent_one_shot_count: usize = 0, // automatically popped when applied19 indent_one_shot_count: usize = 0, // automatically popped when applied
23 applied_indent: usize = 0, // the most recently applied indent20 applied_indent: usize = 0, // the most recently applied indent
24 indent_next_line: usize = 0, // not used until the next line21 indent_next_line: usize = 0, // not used until the next line
2522
26 pub fn init(writer_pointer: *WriterType, allocator: *Allocator) Self {23 pub fn init(indent_delta: usize, writer_pointer: *WriterType) Self {
27 var indent_stack = Stack.init(allocator);24 return Self{ .writer_pointer = writer_pointer, .indent_delta = indent_delta };
28 return Self{ .writer_pointer = writer_pointer, .indent_stack = indent_stack };
29 }25 }
3026
31 /// Release all allocated memory.27 /// Release all allocated memory.
32 pub fn deinit(self: Self) void {28 pub fn deinit(self: Self) void {}
33 self.indent_stack.deinit();
34 }
3529
36 pub fn writer(self: *Self) Writer {30 pub fn writer(self: *Self) Writer {
37 return .{ .context = self };31 return .{ .context = self };
...@@ -71,21 +65,16 @@ pub fn AutoIndentingStream(comptime indent_delta: usize, comptime WriterType: ty...@@ -71,21 +65,16 @@ pub fn AutoIndentingStream(comptime indent_delta: usize, comptime WriterType: ty
71 }65 }
7266
73 /// Push default indentation67 /// Push default indentation
74 pub fn pushIndent(self: *Self) PushError!void {68 pub fn pushIndent(self: *Self) void {
75 // Doesn't actually write any indentation.69 // Doesn't actually write any indentation.
76 // Just primes the stream to be able to write the correct indentation if it needs to.70 // Just primes the stream to be able to write the correct indentation if it needs to.
77 try self.pushIndentN(indent_delta);71 self.indent_stack += 1;
78 }
79
80 /// Push an indent of arbitrary width
81 pub fn pushIndentN(self: *Self, n: usize) PushError!void {
82 try self.indent_stack.append(n);
83 }72 }
8473
85 /// Push an indent that is automatically popped after being applied74 /// Push an indent that is automatically popped after being applied
86 pub fn pushIndentOneShot(self: *Self) PushError!void {75 pub fn pushIndentOneShot(self: *Self) void {
87 self.indent_one_shot_count += 1;76 self.indent_one_shot_count += 1;
88 try self.pushIndent();77 self.pushIndent();
89 }78 }
9079
91 /// Turns all one-shot indents into regular indents80 /// Turns all one-shot indents into regular indents
...@@ -97,15 +86,15 @@ pub fn AutoIndentingStream(comptime indent_delta: usize, comptime WriterType: ty...@@ -97,15 +86,15 @@ pub fn AutoIndentingStream(comptime indent_delta: usize, comptime WriterType: ty
97 }86 }
9887
99 /// Push an indent that should not take effect until the next line88 /// Push an indent that should not take effect until the next line
100 pub fn pushIndentNextLine(self: *Self) PushError!void {89 pub fn pushIndentNextLine(self: *Self) void {
101 self.indent_next_line += 1;90 self.indent_next_line += 1;
102 try self.pushIndent();91 self.pushIndent();
103 }92 }
10493
105 pub fn popIndent(self: *Self) void {94 pub fn popIndent(self: *Self) void {
106 assert(self.indent_stack.items.len != 0);95 assert(self.indent_stack != 0);
107 self.indent_stack.items.len -= 1;96 self.indent_stack -= 1;
108 self.indent_next_line = std.math.min(self.indent_stack.items.len, self.indent_next_line); // Tentative indent may have been popped before there was a newline97 self.indent_next_line = std.math.min(self.indent_stack, self.indent_next_line); // Tentative indent may have been popped before there was a newline
109 }98 }
11099
111 /// Writes ' ' bytes if the current line is empty100 /// Writes ' ' bytes if the current line is empty
...@@ -116,7 +105,7 @@ pub fn AutoIndentingStream(comptime indent_delta: usize, comptime WriterType: ty...@@ -116,7 +105,7 @@ pub fn AutoIndentingStream(comptime indent_delta: usize, comptime WriterType: ty
116 self.applied_indent = current_indent;105 self.applied_indent = current_indent;
117 }106 }
118107
119 self.indent_stack.items.len -= self.indent_one_shot_count;108 self.indent_stack -= self.indent_one_shot_count;
120 self.indent_one_shot_count = 0;109 self.indent_one_shot_count = 0;
121 self.current_line_empty = false;110 self.current_line_empty = false;
122 }111 }
...@@ -129,11 +118,9 @@ pub fn AutoIndentingStream(comptime indent_delta: usize, comptime WriterType: ty...@@ -129,11 +118,9 @@ pub fn AutoIndentingStream(comptime indent_delta: usize, comptime WriterType: ty
129118
130 fn currentIndent(self: *Self) usize {119 fn currentIndent(self: *Self) usize {
131 var indent_current: usize = 0;120 var indent_current: usize = 0;
132 if (self.indent_stack.items.len > 0) {121 if (self.indent_stack > 0) {
133 const stack_top = self.indent_stack.items.len - self.indent_next_line;122 const stack_top = self.indent_stack - self.indent_next_line;
134 for (self.indent_stack.items[0..stack_top]) |indent| {123 indent_current = stack_top * self.indent_delta;
135 indent_current += indent;
136 }
137 }124 }
138 return indent_current;125 return indent_current;
139 }126 }
...@@ -141,10 +128,9 @@ pub fn AutoIndentingStream(comptime indent_delta: usize, comptime WriterType: ty...@@ -141,10 +128,9 @@ pub fn AutoIndentingStream(comptime indent_delta: usize, comptime WriterType: ty
141}128}
142129
143pub fn autoIndentingStream(130pub fn autoIndentingStream(
144 comptime indent_delta: usize,131 indent_delta: usize,
145 underlying_stream: anytype,132 underlying_stream: anytype,
146 allocator: *Allocator,133) AutoIndentingStream(@TypeOf(underlying_stream).Child) {
147) AutoIndentingStream(indent_delta, @TypeOf(underlying_stream).Child) {
148 comptime assert(@typeInfo(@TypeOf(underlying_stream)) == .Pointer);134 comptime assert(@typeInfo(@TypeOf(underlying_stream)) == .Pointer);
149 return AutoIndentingStream(indent_delta, @TypeOf(underlying_stream).Child).init(underlying_stream, allocator);135 return AutoIndentingStream(@TypeOf(underlying_stream).Child).init(indent_delta, underlying_stream);
150}136}
lib/std/io/change_detection_stream.zig+2-2
...@@ -11,11 +11,11 @@ pub fn ChangeDetectionStream(comptime WriterType: type) type {...@@ -11,11 +11,11 @@ pub fn ChangeDetectionStream(comptime WriterType: type) type {
11 pub const Writer = io.Writer(*Self, Error, write);11 pub const Writer = io.Writer(*Self, Error, write);
1212
13 anything_changed: bool = false,13 anything_changed: bool = false,
14 writer_pointer: *WriterType,14 writer_pointer: *const WriterType,
15 source_index: usize,15 source_index: usize,
16 source: []const u8,16 source: []const u8,
1717
18 pub fn init(source: []const u8, writer_pointer: *WriterType) Self {18 pub fn init(source: []const u8, writer_pointer: *const WriterType) Self {
19 return Self{19 return Self{
20 .writer_pointer = writer_pointer,20 .writer_pointer = writer_pointer,
21 .source_index = 0,21 .source_index = 0,
lib/std/io/find_byte_out_stream.zig+2-2
...@@ -10,11 +10,11 @@ pub fn FindByteOutStream(comptime WriterType: type) type {...@@ -10,11 +10,11 @@ pub fn FindByteOutStream(comptime WriterType: type) type {
10 pub const Error = WriterType.Error;10 pub const Error = WriterType.Error;
11 pub const Writer = io.Writer(*Self, Error, write);11 pub const Writer = io.Writer(*Self, Error, write);
1212
13 writer_pointer: *WriterType,13 writer_pointer: *const WriterType,
14 byte_found: bool,14 byte_found: bool,
15 byte: u8,15 byte: u8,
1616
17 pub fn init(byte: u8, writer_pointer: *WriterType) Self {17 pub fn init(byte: u8, writer_pointer: *const WriterType) Self {
18 return Self{18 return Self{
19 .writer_pointer = writer_pointer,19 .writer_pointer = writer_pointer,
20 .byte = byte,20 .byte = byte,
lib/std/target.zig+1-1
...@@ -101,7 +101,7 @@ pub const Target = struct {...@@ -101,7 +101,7 @@ pub const Target = struct {
101101
102 /// Latest Windows version that the Zig Standard Library is aware of102 /// Latest Windows version that the Zig Standard Library is aware of
103 pub const latest = WindowsVersion.win10_20h1;103 pub const latest = WindowsVersion.win10_20h1;
104 104
105 pub const Range = struct {105 pub const Range = struct {
106 min: WindowsVersion,106 min: WindowsVersion,
107 max: WindowsVersion,107 max: WindowsVersion,
lib/std/zig/parser_test.zig+5-5
...@@ -2827,7 +2827,7 @@ test "zig fmt: inline asm" {...@@ -2827,7 +2827,7 @@ test "zig fmt: inline asm" {
2827 \\ return asm volatile ("syscall"2827 \\ return asm volatile ("syscall"
2828 \\ : [ret] "={rax}" (-> usize)2828 \\ : [ret] "={rax}" (-> usize)
2829 \\ : [number] "{rax}" (number),2829 \\ : [number] "{rax}" (number),
2830 \\ [arg1] "{rdi}" (arg1)2830 \\ [arg1] "{rdi}" (arg1)
2831 \\ : "rcx", "r11"2831 \\ : "rcx", "r11"
2832 \\ );2832 \\ );
2833 \\}2833 \\}
...@@ -2930,14 +2930,14 @@ test "zig fmt: inline asm parameter alignment" {...@@ -2930,14 +2930,14 @@ test "zig fmt: inline asm parameter alignment" {
2930 \\ \\ foo2930 \\ \\ foo
2931 \\ \\ bar2931 \\ \\ bar
2932 \\ : [_] "" (-> usize),2932 \\ : [_] "" (-> usize),
2933 \\ [_] "" (-> usize)2933 \\ [_] "" (-> usize)
2934 \\ );2934 \\ );
2935 \\ asm volatile (2935 \\ asm volatile (
2936 \\ \\ foo2936 \\ \\ foo
2937 \\ \\ bar2937 \\ \\ bar
2938 \\ :2938 \\ :
2939 \\ : [_] "" (0),2939 \\ : [_] "" (0),
2940 \\ [_] "" (0)2940 \\ [_] "" (0)
2941 \\ );2941 \\ );
2942 \\ asm volatile (2942 \\ asm volatile (
2943 \\ \\ foo2943 \\ \\ foo
...@@ -2950,9 +2950,9 @@ test "zig fmt: inline asm parameter alignment" {...@@ -2950,9 +2950,9 @@ test "zig fmt: inline asm parameter alignment" {
2950 \\ \\ foo2950 \\ \\ foo
2951 \\ \\ bar2951 \\ \\ bar
2952 \\ : [_] "" (-> usize),2952 \\ : [_] "" (-> usize),
2953 \\ [_] "" (-> usize)2953 \\ [_] "" (-> usize)
2954 \\ : [_] "" (0),2954 \\ : [_] "" (0),
2955 \\ [_] "" (0)2955 \\ [_] "" (0)
2956 \\ : "", ""2956 \\ : "", ""
2957 \\ );2957 \\ );
2958 \\}2958 \\}
lib/std/zig/render.zig+34-34
...@@ -24,7 +24,7 @@ pub fn render(allocator: *mem.Allocator, stream: anytype, tree: *ast.Tree) (meta...@@ -24,7 +24,7 @@ pub fn render(allocator: *mem.Allocator, stream: anytype, tree: *ast.Tree) (meta
2424
25 var s = stream.*;25 var s = stream.*;
26 var change_detection_stream = std.io.changeDetectionStream(tree.source, &s);26 var change_detection_stream = std.io.changeDetectionStream(tree.source, &s);
27 var auto_indenting_stream = std.io.autoIndentingStream(indent_delta, &change_detection_stream, allocator);27 var auto_indenting_stream = std.io.autoIndentingStream(indent_delta, &change_detection_stream);
28 defer auto_indenting_stream.deinit();28 defer auto_indenting_stream.deinit();
2929
30 try renderRoot(allocator, &auto_indenting_stream, tree);30 try renderRoot(allocator, &auto_indenting_stream, tree);
...@@ -389,11 +389,11 @@ fn renderExpression(...@@ -389,11 +389,11 @@ fn renderExpression(
389 }389 }
390390
391 if (block.statements.len == 0) {391 if (block.statements.len == 0) {
392 try stream.pushIndentNextLine();392 stream.pushIndentNextLine();
393 defer stream.popIndent();393 defer stream.popIndent();
394 try renderToken(tree, stream, block.lbrace, Space.None);394 try renderToken(tree, stream, block.lbrace, Space.None);
395 } else {395 } else {
396 try stream.pushIndentNextLine();396 stream.pushIndentNextLine();
397 defer stream.popIndent();397 defer stream.popIndent();
398398
399 try renderToken(tree, stream, block.lbrace, Space.Newline);399 try renderToken(tree, stream, block.lbrace, Space.Newline);
...@@ -463,7 +463,7 @@ fn renderExpression(...@@ -463,7 +463,7 @@ fn renderExpression(
463 try renderExpression(allocator, stream, tree, payload, Space.Space);463 try renderExpression(allocator, stream, tree, payload, Space.Space);
464 }464 }
465465
466 try stream.pushIndentOneShot();466 stream.pushIndentOneShot();
467 return renderExpression(allocator, stream, tree, infix_op_node.rhs, space);467 return renderExpression(allocator, stream, tree, infix_op_node.rhs, space);
468 },468 },
469469
...@@ -524,7 +524,7 @@ fn renderExpression(...@@ -524,7 +524,7 @@ fn renderExpression(
524 };524 };
525525
526 try renderToken(tree, stream, infix_op_node.op_token, after_op_space);526 try renderToken(tree, stream, infix_op_node.op_token, after_op_space);
527 try stream.pushIndentOneShot();527 stream.pushIndentOneShot();
528 return renderExpression(allocator, stream, tree, infix_op_node.rhs, space);528 return renderExpression(allocator, stream, tree, infix_op_node.rhs, space);
529 },529 },
530530
...@@ -718,7 +718,7 @@ fn renderExpression(...@@ -718,7 +718,7 @@ fn renderExpression(
718 }718 }
719719
720 {720 {
721 try stream.pushIndent();721 stream.pushIndent();
722 defer stream.popIndent();722 defer stream.popIndent();
723 try renderToken(tree, stream, lbrace, Space.None);723 try renderToken(tree, stream, lbrace, Space.None);
724 }724 }
...@@ -783,7 +783,7 @@ fn renderExpression(...@@ -783,7 +783,7 @@ fn renderExpression(
783783
784 // Null stream for counting the printed length of each expression784 // Null stream for counting the printed length of each expression
785 var counting_stream = std.io.countingOutStream(std.io.null_out_stream);785 var counting_stream = std.io.countingOutStream(std.io.null_out_stream);
786 var auto_indenting_stream = std.io.autoIndentingStream(indent_delta, &counting_stream, allocator);786 var auto_indenting_stream = std.io.autoIndentingStream(indent_delta, &counting_stream);
787 defer auto_indenting_stream.deinit();787 defer auto_indenting_stream.deinit();
788788
789 for (exprs) |expr, i| {789 for (exprs) |expr, i| {
...@@ -796,7 +796,7 @@ fn renderExpression(...@@ -796,7 +796,7 @@ fn renderExpression(
796 }796 }
797797
798 {798 {
799 try stream.pushIndentNextLine();799 stream.pushIndentNextLine();
800 defer stream.popIndent();800 defer stream.popIndent();
801 try renderToken(tree, stream, lbrace, Space.Newline);801 try renderToken(tree, stream, lbrace, Space.Newline);
802802
...@@ -880,7 +880,7 @@ fn renderExpression(...@@ -880,7 +880,7 @@ fn renderExpression(
880 }880 }
881881
882 {882 {
883 try stream.pushIndentNextLine();883 stream.pushIndentNextLine();
884 defer stream.popIndent();884 defer stream.popIndent();
885 try renderToken(tree, stream, lbrace, Space.None);885 try renderToken(tree, stream, lbrace, Space.None);
886 }886 }
...@@ -902,7 +902,7 @@ fn renderExpression(...@@ -902,7 +902,7 @@ fn renderExpression(
902 // render field expressions until a LF is found902 // render field expressions until a LF is found
903 for (field_inits) |field_init| {903 for (field_inits) |field_init| {
904 var find_stream = std.io.findByteOutStream('\n', &std.io.null_out_stream);904 var find_stream = std.io.findByteOutStream('\n', &std.io.null_out_stream);
905 var auto_indenting_stream = std.io.autoIndentingStream(indent_delta, &find_stream, allocator);905 var auto_indenting_stream = std.io.autoIndentingStream(indent_delta, &find_stream);
906 defer auto_indenting_stream.deinit();906 defer auto_indenting_stream.deinit();
907907
908 try renderExpression(allocator, &auto_indenting_stream, tree, field_init, Space.None);908 try renderExpression(allocator, &auto_indenting_stream, tree, field_init, Space.None);
...@@ -963,7 +963,7 @@ fn renderExpression(...@@ -963,7 +963,7 @@ fn renderExpression(
963 .node => |node| try renderExpression(allocator, stream, tree, node, Space.None),963 .node => |node| try renderExpression(allocator, stream, tree, node, Space.None),
964 }964 }
965965
966 try stream.pushIndentNextLine();966 stream.pushIndentNextLine();
967 defer stream.popIndent();967 defer stream.popIndent();
968968
969 try renderToken(tree, stream, lbrace, Space.Newline);969 try renderToken(tree, stream, lbrace, Space.Newline);
...@@ -1011,7 +1011,7 @@ fn renderExpression(...@@ -1011,7 +1011,7 @@ fn renderExpression(
10111011
1012 const params = call.params();1012 const params = call.params();
1013 for (params) |param_node, i| {1013 for (params) |param_node, i| {
1014 try stream.pushIndent();1014 stream.pushIndent();
1015 defer stream.popIndent();1015 defer stream.popIndent();
10161016
1017 if (i + 1 < params.len) {1017 if (i + 1 < params.len) {
...@@ -1031,7 +1031,7 @@ fn renderExpression(...@@ -1031,7 +1031,7 @@ fn renderExpression(
10311031
1032 const params = call.params();1032 const params = call.params();
1033 for (params) |param_node, i| {1033 for (params) |param_node, i| {
1034 if (param_node.*.tag == .MultilineStringLiteral) try stream.pushIndentOneShot();1034 if (param_node.*.tag == .MultilineStringLiteral) stream.pushIndentOneShot();
10351035
1036 try renderExpression(allocator, stream, tree, param_node, Space.None);1036 try renderExpression(allocator, stream, tree, param_node, Space.None);
10371037
...@@ -1058,7 +1058,7 @@ fn renderExpression(...@@ -1058,7 +1058,7 @@ fn renderExpression(
1058 {1058 {
1059 const new_space = if (ends_with_comment) Space.Newline else Space.None;1059 const new_space = if (ends_with_comment) Space.Newline else Space.None;
10601060
1061 try stream.pushIndent();1061 stream.pushIndent();
1062 defer stream.popIndent();1062 defer stream.popIndent();
1063 try renderExpression(allocator, stream, tree, suffix_op.index_expr, new_space);1063 try renderExpression(allocator, stream, tree, suffix_op.index_expr, new_space);
1064 }1064 }
...@@ -1194,7 +1194,7 @@ fn renderExpression(...@@ -1194,7 +1194,7 @@ fn renderExpression(
11941194
1195 try renderToken(tree, stream, grouped_expr.lparen, Space.None);1195 try renderToken(tree, stream, grouped_expr.lparen, Space.None);
1196 {1196 {
1197 try stream.pushIndentOneShot();1197 stream.pushIndentOneShot();
1198 try renderExpression(allocator, stream, tree, grouped_expr.expr, Space.None);1198 try renderExpression(allocator, stream, tree, grouped_expr.expr, Space.None);
1199 }1199 }
1200 return renderToken(tree, stream, grouped_expr.rparen, space);1200 return renderToken(tree, stream, grouped_expr.rparen, space);
...@@ -1254,7 +1254,7 @@ fn renderExpression(...@@ -1254,7 +1254,7 @@ fn renderExpression(
12541254
1255 if (container_decl.fields_and_decls_len == 0) {1255 if (container_decl.fields_and_decls_len == 0) {
1256 {1256 {
1257 try stream.pushIndentNextLine();1257 stream.pushIndentNextLine();
1258 defer stream.popIndent();1258 defer stream.popIndent();
1259 try renderToken(tree, stream, container_decl.lbrace_token, Space.None); // {1259 try renderToken(tree, stream, container_decl.lbrace_token, Space.None); // {
1260 }1260 }
...@@ -1289,7 +1289,7 @@ fn renderExpression(...@@ -1289,7 +1289,7 @@ fn renderExpression(
12891289
1290 if (src_has_trailing_comma or !src_has_only_fields) {1290 if (src_has_trailing_comma or !src_has_only_fields) {
1291 // One declaration per line1291 // One declaration per line
1292 try stream.pushIndentNextLine();1292 stream.pushIndentNextLine();
1293 defer stream.popIndent();1293 defer stream.popIndent();
1294 try renderToken(tree, stream, container_decl.lbrace_token, .Newline); // {1294 try renderToken(tree, stream, container_decl.lbrace_token, .Newline); // {
12951295
...@@ -1305,7 +1305,7 @@ fn renderExpression(...@@ -1305,7 +1305,7 @@ fn renderExpression(
1305 // their own line1305 // their own line
1306 try renderToken(tree, stream, container_decl.lbrace_token, .Newline); // {1306 try renderToken(tree, stream, container_decl.lbrace_token, .Newline); // {
13071307
1308 try stream.pushIndent();1308 stream.pushIndent();
1309 defer stream.popIndent();1309 defer stream.popIndent();
13101310
1311 for (fields_and_decls) |decl, i| {1311 for (fields_and_decls) |decl, i| {
...@@ -1361,7 +1361,7 @@ fn renderExpression(...@@ -1361,7 +1361,7 @@ fn renderExpression(
13611361
1362 if (src_has_trailing_comma) {1362 if (src_has_trailing_comma) {
1363 {1363 {
1364 try stream.pushIndent();1364 stream.pushIndent();
1365 defer stream.popIndent();1365 defer stream.popIndent();
13661366
1367 try renderToken(tree, stream, lbrace, Space.Newline); // {1367 try renderToken(tree, stream, lbrace, Space.Newline); // {
...@@ -1451,7 +1451,7 @@ fn renderExpression(...@@ -1451,7 +1451,7 @@ fn renderExpression(
1451 }1451 }
1452 } else {1452 } else {
1453 // one param per line1453 // one param per line
1454 try stream.pushIndent();1454 stream.pushIndent();
1455 defer stream.popIndent();1455 defer stream.popIndent();
1456 try renderToken(tree, stream, lparen, Space.Newline); // (1456 try renderToken(tree, stream, lparen, Space.Newline); // (
14571457
...@@ -1530,7 +1530,7 @@ fn renderExpression(...@@ -1530,7 +1530,7 @@ fn renderExpression(
1530 }1530 }
1531 } else {1531 } else {
1532 // one param per line1532 // one param per line
1533 try stream.pushIndent();1533 stream.pushIndent();
1534 defer stream.popIndent();1534 defer stream.popIndent();
1535 try renderToken(tree, stream, lparen, Space.Newline); // (1535 try renderToken(tree, stream, lparen, Space.Newline); // (
15361536
...@@ -1627,7 +1627,7 @@ fn renderExpression(...@@ -1627,7 +1627,7 @@ fn renderExpression(
1627 try renderToken(tree, stream, rparen, Space.Space); // )1627 try renderToken(tree, stream, rparen, Space.Space); // )
16281628
1629 {1629 {
1630 try stream.pushIndentNextLine();1630 stream.pushIndentNextLine();
1631 defer stream.popIndent();1631 defer stream.popIndent();
1632 try renderToken(tree, stream, lbrace, Space.Newline); // {1632 try renderToken(tree, stream, lbrace, Space.Newline); // {
16331633
...@@ -1711,7 +1711,7 @@ fn renderExpression(...@@ -1711,7 +1711,7 @@ fn renderExpression(
1711 if (same_line) {1711 if (same_line) {
1712 return renderExpression(allocator, stream, tree, else_node.body, space);1712 return renderExpression(allocator, stream, tree, else_node.body, space);
1713 } else {1713 } else {
1714 try stream.pushIndent();1714 stream.pushIndent();
1715 defer stream.popIndent();1715 defer stream.popIndent();
1716 return renderExpression(allocator, stream, tree, else_node.body, space);1716 return renderExpression(allocator, stream, tree, else_node.body, space);
1717 }1717 }
...@@ -1775,7 +1775,7 @@ fn renderExpression(...@@ -1775,7 +1775,7 @@ fn renderExpression(
1775 }1775 }
17761776
1777 {1777 {
1778 if (!body_is_block) try stream.pushIndent();1778 if (!body_is_block) stream.pushIndent();
1779 defer if (!body_is_block) stream.popIndent();1779 defer if (!body_is_block) stream.popIndent();
1780 try renderExpression(allocator, stream, tree, while_node.body, after_body_space);1780 try renderExpression(allocator, stream, tree, while_node.body, after_body_space);
1781 }1781 }
...@@ -1826,7 +1826,7 @@ fn renderExpression(...@@ -1826,7 +1826,7 @@ fn renderExpression(
1826 };1826 };
18271827
1828 {1828 {
1829 if (!body_on_same_line) try stream.pushIndent();1829 if (!body_on_same_line) stream.pushIndent();
1830 defer if (!body_on_same_line) stream.popIndent();1830 defer if (!body_on_same_line) stream.popIndent();
1831 try renderExpression(allocator, stream, tree, for_node.body, space_after_body); // { body }1831 try renderExpression(allocator, stream, tree, for_node.body, space_after_body); // { body }
1832 }1832 }
...@@ -1882,7 +1882,7 @@ fn renderExpression(...@@ -1882,7 +1882,7 @@ fn renderExpression(
1882 const else_is_block = nodeIsBlock(@"else".body);1882 const else_is_block = nodeIsBlock(@"else".body);
18831883
1884 {1884 {
1885 try stream.pushIndent();1885 stream.pushIndent();
1886 defer stream.popIndent();1886 defer stream.popIndent();
1887 try renderExpression(allocator, stream, tree, if_node.body, Space.Newline);1887 try renderExpression(allocator, stream, tree, if_node.body, Space.Newline);
1888 }1888 }
...@@ -1903,12 +1903,12 @@ fn renderExpression(...@@ -1903,12 +1903,12 @@ fn renderExpression(
1903 try renderExpression(allocator, stream, tree, payload, Space.Newline);1903 try renderExpression(allocator, stream, tree, payload, Space.Newline);
1904 }1904 }
19051905
1906 try stream.pushIndent();1906 stream.pushIndent();
1907 defer stream.popIndent();1907 defer stream.popIndent();
1908 return renderExpression(allocator, stream, tree, @"else".body, space);1908 return renderExpression(allocator, stream, tree, @"else".body, space);
1909 }1909 }
1910 } else {1910 } else {
1911 try stream.pushIndent();1911 stream.pushIndent();
1912 defer stream.popIndent();1912 defer stream.popIndent();
1913 return renderExpression(allocator, stream, tree, if_node.body, space);1913 return renderExpression(allocator, stream, tree, if_node.body, space);
1914 }1914 }
...@@ -1949,7 +1949,7 @@ fn renderExpression(...@@ -1949,7 +1949,7 @@ fn renderExpression(
1949 }1949 }
19501950
1951 asmblk: {1951 asmblk: {
1952 try stream.pushIndent();1952 stream.pushIndent();
1953 defer stream.popIndent();1953 defer stream.popIndent();
19541954
1955 if (asm_node.outputs.len == 0 and asm_node.inputs.len == 0 and asm_node.clobbers.len == 0) {1955 if (asm_node.outputs.len == 0 and asm_node.inputs.len == 0 and asm_node.clobbers.len == 0) {
...@@ -1968,7 +1968,7 @@ fn renderExpression(...@@ -1968,7 +1968,7 @@ fn renderExpression(
1968 } else blk: {1968 } else blk: {
1969 try renderToken(tree, stream, colon1, Space.Space); // :1969 try renderToken(tree, stream, colon1, Space.Space); // :
19701970
1971 try stream.pushIndentN(2);1971 stream.pushIndent();
1972 defer stream.popIndent();1972 defer stream.popIndent();
19731973
1974 for (asm_node.outputs) |*asm_output, i| {1974 for (asm_node.outputs) |*asm_output, i| {
...@@ -1999,7 +1999,7 @@ fn renderExpression(...@@ -1999,7 +1999,7 @@ fn renderExpression(
1999 break :blk tree.nextToken(colon2);1999 break :blk tree.nextToken(colon2);
2000 } else blk: {2000 } else blk: {
2001 try renderToken(tree, stream, colon2, Space.Space); // :2001 try renderToken(tree, stream, colon2, Space.Space); // :
2002 try stream.pushIndentN(2);2002 stream.pushIndent();
2003 defer stream.popIndent();2003 defer stream.popIndent();
2004 for (asm_node.inputs) |*asm_input, i| {2004 for (asm_node.inputs) |*asm_input, i| {
2005 if (i + 1 < asm_node.inputs.len) {2005 if (i + 1 < asm_node.inputs.len) {
...@@ -2025,7 +2025,7 @@ fn renderExpression(...@@ -2025,7 +2025,7 @@ fn renderExpression(
2025 };2025 };
20262026
2027 try renderToken(tree, stream, colon3, Space.Space); // :2027 try renderToken(tree, stream, colon3, Space.Space); // :
2028 try stream.pushIndentN(2);2028 stream.pushIndent();
2029 defer stream.popIndent();2029 defer stream.popIndent();
2030 for (asm_node.clobbers) |clobber_node, i| {2030 for (asm_node.clobbers) |clobber_node, i| {
2031 if (i + 1 >= asm_node.clobbers.len) {2031 if (i + 1 >= asm_node.clobbers.len) {
...@@ -2078,7 +2078,7 @@ fn renderArrayType(...@@ -2078,7 +2078,7 @@ fn renderArrayType(
2078 const new_space = if (ends_with_comment) Space.Newline else Space.None;2078 const new_space = if (ends_with_comment) Space.Newline else Space.None;
2079 {2079 {
2080 const do_indent = (starts_with_comment or ends_with_comment);2080 const do_indent = (starts_with_comment or ends_with_comment);
2081 if (do_indent) try stream.pushIndent();2081 if (do_indent) stream.pushIndent();
2082 defer if (do_indent) stream.popIndent();2082 defer if (do_indent) stream.popIndent();
20832083
2084 try renderToken(tree, stream, lbracket, Space.None); // [2084 try renderToken(tree, stream, lbracket, Space.None); // [
...@@ -2212,7 +2212,7 @@ fn renderVarDecl(...@@ -2212,7 +2212,7 @@ fn renderVarDecl(
2212 if (var_decl.getTrailer("init_node")) |init_node| {2212 if (var_decl.getTrailer("init_node")) |init_node| {
2213 const s = if (init_node.tag == .MultilineStringLiteral) Space.None else Space.Space;2213 const s = if (init_node.tag == .MultilineStringLiteral) Space.None else Space.Space;
2214 try renderToken(tree, stream, var_decl.getTrailer("eq_token").?, s); // =2214 try renderToken(tree, stream, var_decl.getTrailer("eq_token").?, s); // =
2215 try stream.pushIndentOneShot();2215 stream.pushIndentOneShot();
2216 try renderExpression(allocator, stream, tree, init_node, Space.None);2216 try renderExpression(allocator, stream, tree, init_node, Space.None);
2217 }2217 }
22182218