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 {...@@ -728,17 +728,7 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {
728728
729 try renderToken(r, error_token, .none);729 try renderToken(r, error_token, .none);
730730
731 if (lbrace + 1 == rbrace) {731 if (!isOneLineErrorSetDecl(tree, lbrace, 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)) {
742 // Render each member on a new line.732 // Render each member on a new line.
743 try ais.pushIndent(.normal);733 try ais.pushIndent(.normal);
744 try renderToken(r, lbrace, .newline);734 try renderToken(r, lbrace, .newline);
...@@ -763,14 +753,24 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {...@@ -763,14 +753,24 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {
763 ais.popIndent();753 ais.popIndent();
764 return renderToken(r, rbrace, space);754 return renderToken(r, rbrace, space);
765 } else {755 } else {
766 // Render each member on one line.756 if (lbrace + 1 == rbrace) {
767 try renderToken(r, lbrace, .space);757 // There is nothing between the braces so render condensed: `error{}`
768 var i = lbrace + 1;758 try renderToken(r, lbrace, .none);
769 while (i < rbrace) : (i += 1) {759 } else if (lbrace + 2 == rbrace) {
770 switch (tree.tokenTag(i)) {760 // There is exactly one member and no trailing comma or
771 .identifier => try renderIdentifier(r, i, .comma_space, .eagerly_unquote),761 // comments, so render without surrounding spaces: `error{Foo}`
772 .comma => {},762 try renderToken(r, lbrace, .none);
773 else => unreachable,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 }
774 }774 }
775 }775 }
776 return renderToken(r, rbrace, space);776 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" {...@@ -6821,6 +6821,59 @@ test "zig fmt: error set with extra newline before comma" {
6821 );6821 );
6822}6822}
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
6824test "zig fmt: extern container in tuple" {6877test "zig fmt: extern container in tuple" {
6825 try testCanonical(6878 try testCanonical(
6826 \\const T = struct {6879 \\const T = struct {