diff --git a/std/zig/parser_test.zig b/std/zig/parser_test.zig index ab56b89f2757806d4e845c80c20c61b878d918a2..c601e6e8bfe8928ae6880d07bfd64de33d52c3e8 100644 --- a/std/zig/parser_test.zig +++ b/std/zig/parser_test.zig @@ -2375,7 +2375,6 @@ test "zig fmt: if type expr" { \\ ); } - test "zig fmt: file ends with struct field" { try testTransform( \\a: bool @@ -2385,6 +2384,20 @@ test "zig fmt: file ends with struct field" { ); } +test "zig fmt: comment after empty comment" { + try testTransform( + \\const x = true; // + \\// + \\// + \\//a + \\ + , + \\const x = true; + \\//a + \\ + ); +} + test "zig fmt: comments at several places in struct init" { try testTransform( \\var bar = Bar{ diff --git a/std/zig/render.zig b/std/zig/render.zig index 42ca071e5f68414d80436d4c58ff3e9d64d8b2ef..5695e8801f5161033746c905180abd1d08b377ca 100644 --- a/std/zig/render.zig +++ b/std/zig/render.zig @@ -1994,15 +1994,24 @@ fn renderTokenOffset( } } - const comment_is_empty = mem.trimRight(u8, tree.tokenSlicePtr(next_token), " ").len == 2; - if (comment_is_empty) { - switch (space) { - Space.Newline => { - try stream.writeByte('\n'); - start_col.* = 0; - return; - }, - else => {}, + while (true) { + const comment_is_empty = mem.trimRight(u8, tree.tokenSlicePtr(next_token), " ").len == 2; + if (comment_is_empty) { + switch (space) { + Space.Newline => { + offset += 1; + token = next_token; + next_token = tree.tokens.at(token_index + offset); + if (next_token.id != .LineComment) { + try stream.writeByte('\n'); + start_col.* = 0; + return; + } + }, + else => break, + } + } else { + break; } }