| ... | @@ -108,14 +108,15 @@ fn renderRoot( | ... | @@ -108,14 +108,15 @@ fn renderRoot( |
| 108 | Token.Id.LineComment => {}, | 108 | Token.Id.LineComment => {}, |
| 109 | Token.Id.Eof => { | 109 | Token.Id.Eof => { |
| 110 | const start = tree.tokens.at(start_token_index + 1).start; | 110 | const start = tree.tokens.at(start_token_index + 1).start; |
| 111 | try stream.write(tree.source[start..]); | 111 | try copyFixingWhitespace(stream, tree.source[start..]); |
| 112 | return; | 112 | return; |
| 113 | }, | 113 | }, |
| 114 | else => continue, | 114 | else => continue, |
| 115 | } | 115 | } |
| 116 | if (mem.eql(u8, mem.trim(u8, tree.tokenSlicePtr(end_token)[2..], " "), "zig fmt: on")) { | 116 | if (mem.eql(u8, mem.trim(u8, tree.tokenSlicePtr(end_token)[2..], " "), "zig fmt: on")) { |
| 117 | const start = tree.tokens.at(start_token_index + 1).start; | 117 | const start = tree.tokens.at(start_token_index + 1).start; |
| 118 | try stream.print("{}\n", tree.source[start..end_token.end]); | 118 | try copyFixingWhitespace(stream, tree.source[start..end_token.end]); |
| | 119 | try stream.writeByte('\n'); |
| 119 | while (tree.tokens.at(decl.firstToken()).start < end_token.end) { | 120 | while (tree.tokens.at(decl.firstToken()).start < end_token.end) { |
| 120 | decl = (it.next() orelse return).*; | 121 | decl = (it.next() orelse return).*; |
| 121 | } | 122 | } |
| ... | @@ -2121,3 +2122,11 @@ const FindByteOutStream = struct { | ... | @@ -2121,3 +2122,11 @@ const FindByteOutStream = struct { |
| 2121 | }; | 2122 | }; |
| 2122 | } | 2123 | } |
| 2123 | }; | 2124 | }; |
| | 2125 | |
| | 2126 | fn copyFixingWhitespace(stream: var, slice: []const u8) @typeOf(stream).Child.Error!void { |
| | 2127 | for (slice) |byte| switch (byte) { |
| | 2128 | '\t' => try stream.write(" "), |
| | 2129 | '\r' => {}, |
| | 2130 | else => try stream.writeByte(byte), |
| | 2131 | }; |
| | 2132 | } |