From aa3b2c557fe443b2dd55725b237d8e3ac804e414 Mon Sep 17 00:00:00 2001 From: taoqy <845767657@qq.com> Date: Thu, 27 Aug 2026 09:11:42 +0800 Subject: [PATCH] zig fmt: fix error set indent close #36616 --- lib/std/zig/Ast/Render.zig | 38 +++++++++++++------------- lib/std/zig/parser_test.zig | 53 +++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 19 deletions(-) diff --git a/lib/std/zig/Ast/Render.zig b/lib/std/zig/Ast/Render.zig index 605f3752a78e8908539d294300f3f0a1047b2315..8de1e4074f788649f0f9934370335bfdb4fcace5 100644 --- a/lib/std/zig/Ast/Render.zig +++ b/lib/std/zig/Ast/Render.zig @@ -728,17 +728,7 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void { try renderToken(r, error_token, .none); - if (lbrace + 1 == rbrace) { - // There is nothing between the braces so render condensed: `error{}` - try renderToken(r, lbrace, .none); - return renderToken(r, rbrace, space); - } else if (lbrace + 2 == rbrace and tree.tokenTag(lbrace + 1) == .identifier) { - // There is exactly one member and no trailing comma or - // comments, so render without surrounding spaces: `error{Foo}` - try renderToken(r, lbrace, .none); - try renderIdentifier(r, lbrace + 1, .none, .eagerly_unquote); // identifier - return renderToken(r, rbrace, space); - } else if (!isOneLineErrorSetDecl(tree, lbrace, rbrace)) { + if (!isOneLineErrorSetDecl(tree, lbrace, rbrace)) { // Render each member on a new line. try ais.pushIndent(.normal); try renderToken(r, lbrace, .newline); @@ -763,14 +753,24 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void { ais.popIndent(); return renderToken(r, rbrace, space); } else { - // Render each member on one line. - try renderToken(r, lbrace, .space); - var i = lbrace + 1; - while (i < rbrace) : (i += 1) { - switch (tree.tokenTag(i)) { - .identifier => try renderIdentifier(r, i, .comma_space, .eagerly_unquote), - .comma => {}, - else => unreachable, + if (lbrace + 1 == rbrace) { + // There is nothing between the braces so render condensed: `error{}` + try renderToken(r, lbrace, .none); + } else if (lbrace + 2 == rbrace) { + // There is exactly one member and no trailing comma or + // comments, so render without surrounding spaces: `error{Foo}` + try renderToken(r, lbrace, .none); + try renderIdentifier(r, lbrace + 1, .none, .eagerly_unquote); // identifier + } else { + // Render each member on one line. + try renderToken(r, lbrace, .space); + var i = lbrace + 1; + while (i < rbrace) : (i += 1) { + switch (tree.tokenTag(i)) { + .identifier => try renderIdentifier(r, i, .comma_space, .eagerly_unquote), + .comma => {}, + else => unreachable, + } } } return renderToken(r, rbrace, space); diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig index 7e149d14fdee9105ac1b17c9e70f46197c81f638..e458527194c68c9f61770b65d12462efebb2b6fd 100644 --- a/lib/std/zig/parser_test.zig +++ b/lib/std/zig/parser_test.zig @@ -6821,6 +6821,59 @@ test "zig fmt: error set with extra newline before comma" { ); } +test "zig fmt: error set with only comment" { + try testCanonical( + \\const E = error{ + \\ // line comment + \\}; + \\ + ); +} + +test "zig fmt: error set with only one identifier and one comment" { + try testTransform( + \\const A = error{ + \\ // line comment + \\ X, + \\}; + \\ + \\const B = error{ + \\// line comment + \\X}; + \\ + \\const C = error{ + \\ /// doc comment + \\ X, + \\}; + \\ + \\const D = error{ + \\/// doc comment + \\X}; + \\ + , + \\const A = error{ + \\ // line comment + \\ X, + \\}; + \\ + \\const B = error{ + \\ // line comment + \\ X, + \\}; + \\ + \\const C = error{ + \\ /// doc comment + \\ X, + \\}; + \\ + \\const D = error{ + \\ /// doc comment + \\ X, + \\}; + \\ + ); +} + test "zig fmt: extern container in tuple" { try testCanonical( \\const T = struct { -- 2.54.0