authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-07-05 15:09:22-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-07-05 15:09:22-04:00
log9471f16c799e0cc60a3d6465cc3bee0a13bd5617
tree248fd862235a82c5d09c4ec387c3477817a2c298
parent4f43a4b30f8a6dad7a9a35ccf1cef89b6d239997
signaturelock-open Commit is signed but in an unrecognized format.

zig fmt ignores "zig fmt: off" directive for whitespace fixes


2 files changed, 15 insertions(+), 3 deletions(-)

std/zig/parser_test.zig+4-1
...@@ -9,10 +9,13 @@ test "zig fmt: change use to usingnamespace" {...@@ -9,10 +9,13 @@ test "zig fmt: change use to usingnamespace" {
9}9}
1010
11test "zig fmt: whitespace fixes" {11test "zig fmt: whitespace fixes" {
12 try testTransform("test \"\" {\r\n\tconst hi = x;\r\n}",12 try testTransform("test \"\" {\r\n\tconst hi = x;\r\n}\n// zig fmt: off\ntest \"\"{\r\n\tconst a = b;}\r\n",
13 \\test "" {13 \\test "" {
14 \\ const hi = x;14 \\ const hi = x;
15 \\}15 \\}
16 \\// zig fmt: off
17 \\test ""{
18 \\ const a = b;}
16 \\19 \\
17 );20 );
18}21}
std/zig/render.zig+11-2
...@@ -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
2126fn 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}