authorgravatar for 845767657@qq.comtaoqy <845767657@qq.com> 2026-08-27 09:11:42+08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-08-27 21:19:09+02:00
logaa3b2c557fe443b2dd55725b237d8e3ac804e414
tree5fc9b7eb6d6c085d978618305e13db720007ae3c
parentc6204ba3c2e83772e076c7c79095f4093dad0f94

zig fmt: fix error set indent

close #36616

2 files changed, 72 insertions(+), 19 deletions(-)

lib/std/zig/Ast/Render.zig+19-19
......@@ -728,17 +728,7 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {
728728
729729 try renderToken(r, error_token, .none);
730730
731 if (lbrace + 1 == rbrace) {
732 // There is nothing between the braces so render condensed: `error{}`
733 try renderToken(r, lbrace, .none);
734 return renderToken(r, rbrace, space);
735 } else if (lbrace + 2 == rbrace and tree.tokenTag(lbrace + 1) == .identifier) {
736 // There is exactly one member and no trailing comma or
737 // comments, so render without surrounding spaces: `error{Foo}`
738 try renderToken(r, lbrace, .none);
739 try renderIdentifier(r, lbrace + 1, .none, .eagerly_unquote); // identifier
740 return renderToken(r, rbrace, space);
741 } else if (!isOneLineErrorSetDecl(tree, lbrace, rbrace)) {
731 if (!isOneLineErrorSetDecl(tree, lbrace, rbrace)) {
742732 // Render each member on a new line.
743733 try ais.pushIndent(.normal);
744734 try renderToken(r, lbrace, .newline);
......@@ -763,14 +753,24 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {
763753 ais.popIndent();
764754 return renderToken(r, rbrace, space);
765755 } else {
766 // Render each member on one line.
767 try renderToken(r, lbrace, .space);
768 var i = lbrace + 1;
769 while (i < rbrace) : (i += 1) {
770 switch (tree.tokenTag(i)) {
771 .identifier => try renderIdentifier(r, i, .comma_space, .eagerly_unquote),
772 .comma => {},
773 else => unreachable,
756 if (lbrace + 1 == rbrace) {
757 // There is nothing between the braces so render condensed: `error{}`
758 try renderToken(r, lbrace, .none);
759 } else if (lbrace + 2 == rbrace) {
760 // There is exactly one member and no trailing comma or
761 // comments, so render without surrounding spaces: `error{Foo}`
762 try renderToken(r, lbrace, .none);
763 try renderIdentifier(r, lbrace + 1, .none, .eagerly_unquote); // identifier
764 } else {
765 // Render each member on one line.
766 try renderToken(r, lbrace, .space);
767 var i = lbrace + 1;
768 while (i < rbrace) : (i += 1) {
769 switch (tree.tokenTag(i)) {
770 .identifier => try renderIdentifier(r, i, .comma_space, .eagerly_unquote),
771 .comma => {},
772 else => unreachable,
773 }
774774 }
775775 }
776776 return renderToken(r, rbrace, space);
lib/std/zig/parser_test.zig+53
......@@ -6821,6 +6821,59 @@ test "zig fmt: error set with extra newline before comma" {
68216821 );
68226822}
68236823
6824test "zig fmt: error set with only comment" {
6825 try testCanonical(
6826 \\const E = error{
6827 \\ // line comment
6828 \\};
6829 \\
6830 );
6831}
6832
6833test "zig fmt: error set with only one identifier and one comment" {
6834 try testTransform(
6835 \\const A = error{
6836 \\ // line comment
6837 \\ X,
6838 \\};
6839 \\
6840 \\const B = error{
6841 \\// line comment
6842 \\X};
6843 \\
6844 \\const C = error{
6845 \\ /// doc comment
6846 \\ X,
6847 \\};
6848 \\
6849 \\const D = error{
6850 \\/// doc comment
6851 \\X};
6852 \\
6853 ,
6854 \\const A = error{
6855 \\ // line comment
6856 \\ X,
6857 \\};
6858 \\
6859 \\const B = error{
6860 \\ // line comment
6861 \\ X,
6862 \\};
6863 \\
6864 \\const C = error{
6865 \\ /// doc comment
6866 \\ X,
6867 \\};
6868 \\
6869 \\const D = error{
6870 \\ /// doc comment
6871 \\ X,
6872 \\};
6873 \\
6874 );
6875}
6876
68246877test "zig fmt: extern container in tuple" {
68256878 try testCanonical(
68266879 \\const T = struct {