zig fmt: fix idempotency with newlines surrounding doc comment

Fixes: https://github.com/ziglang/zig/issues/11802
This commit is contained in:
Philipp Lühmann 2022-06-28 21:38:28 +02:00 committed by GitHub
parent 8974cee5a1
commit bb2929ba08
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 46 additions and 2 deletions

View File

@ -4683,7 +4683,6 @@ pub const prctl_mm_map = extern struct {
};
pub const NETLINK = struct {
/// Routing/device hook
pub const ROUTE = 0;

View File

@ -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 {

View File

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