authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2019-06-27 02:00:30+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2019-06-27 02:00:30+03:00
logde369de312584c64ec162972ba14e95b7a17e531
tree7b8dc8634de72200b9c06498b4c06b615c8decc0
parent01ff0d4d629c3800ebac68edfd91edb570aeaa59
signaturelock-open Commit is signed but in an unrecognized format.

fix comments getting removed after empty comments


2 files changed, 32 insertions(+), 9 deletions(-)

std/zig/parser_test.zig+14
......@@ -2246,6 +2246,20 @@ test "zig fmt: if type expr" {
22462246 );
22472247}
22482248
2249test "zig fmt: comment after empty comment" {
2250 try testTransform(
2251 \\const x = true; //
2252 \\//
2253 \\//
2254 \\//a
2255 \\
2256 ,
2257 \\const x = true;
2258 \\//a
2259 \\
2260 );
2261}
2262
22492263const std = @import("std");
22502264const mem = std.mem;
22512265const warn = std.debug.warn;
std/zig/render.zig+18-9
......@@ -1941,15 +1941,24 @@ fn renderTokenOffset(
19411941 }
19421942 }
19431943
1944 const comment_is_empty = mem.trimRight(u8, tree.tokenSlicePtr(next_token), " ").len == 2;
1945 if (comment_is_empty) {
1946 switch (space) {
1947 Space.Newline => {
1948 try stream.writeByte('\n');
1949 start_col.* = 0;
1950 return;
1951 },
1952 else => {},
1944 while (true) {
1945 const comment_is_empty = mem.trimRight(u8, tree.tokenSlicePtr(next_token), " ").len == 2;
1946 if (comment_is_empty) {
1947 switch (space) {
1948 Space.Newline => {
1949 offset += 1;
1950 token = next_token;
1951 next_token = tree.tokens.at(token_index + offset);
1952 if (next_token.id != .LineComment) {
1953 try stream.writeByte('\n');
1954 start_col.* = 0;
1955 return;
1956 }
1957 },
1958 else => break,
1959 }
1960 } else {
1961 break;
19531962 }
19541963 }
19551964