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:
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);