zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit bb2929ba083d3c5d86cae1d83cba0abd43ffa3d5 (tree)
parent 8974cee5a1f67db42a83a0907d8b9e842b979072
Author: Philipp Lühmann <47984692+luehmann@users.noreply.github.com>
Date:   Tue, 28 Jun 2022 21:38:28 +0200

zig fmt: fix idempotency with newlines surrounding doc comment

Fixes: https://github.com/ziglang/zig/issues/11802

Diffstat:
Mlib/std/os/linux.zig | 1-
Mlib/std/zig/parser_test.zig | 35+++++++++++++++++++++++++++++++++++
Mlib/std/zig/render.zig | 12+++++++++++-
3 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig @@ -4683,7 +4683,6 @@ pub const prctl_mm_map = extern struct { }; pub const NETLINK = struct { - /// Routing/device hook pub const ROUTE = 0; diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig @@ -4154,6 +4154,41 @@ test "zig fmt: container doc comments" { ); } +test "zig fmt: remove newlines surrounding doc comment" { + try testTransform( + \\ + \\ + \\ + \\/// doc comment + \\ + \\fn foo() void {} + \\ + , + \\/// doc comment + \\fn foo() void {} + \\ + ); +} + +test "zig fmt: remove newlines surrounding doc comment within container decl" { + try testTransform( + \\const Foo = struct { + \\ + \\ + \\ /// doc comment + \\ + \\ fn foo() void {} + \\}; + \\ + , + \\const Foo = struct { + \\ /// doc comment + \\ fn foo() void {} + \\}; + \\ + ); +} + test "zig fmt: anytype struct field" { try testError( \\pub const Pointer = struct { diff --git a/lib/std/zig/render.zig b/lib/std/zig/render.zig @@ -2482,7 +2482,17 @@ fn renderDocComments(ais: *Ais, tree: Ast, end_token: Ast.TokenIndex) Error!void } const first_tok = tok; if (first_tok == end_token) return; - try renderExtraNewlineToken(ais, tree, first_tok); + + if (first_tok != 0) { + const prev_token_tag = token_tags[first_tok - 1]; + + // Prevent accidental use of `renderDocComments` for a function argument doc comment + assert(prev_token_tag != .l_paren); + + if (prev_token_tag != .l_brace) { + try renderExtraNewlineToken(ais, tree, first_tok); + } + } while (token_tags[tok] == .doc_comment) : (tok += 1) { try renderToken(ais, tree, tok, .newline);