Skip to content

Commit d36cbe3

Browse files
committed
zig fmt: seperate errors in error sets with comments
1 parent ce71c29 commit d36cbe3

2 files changed

Lines changed: 74 additions & 30 deletions

File tree

lib/std/zig/parser_test.zig

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6107,6 +6107,37 @@ test "zig fmt: indentation of comments within catch, else, orelse" {
61076107
);
61086108
}
61096109

6110+
test "zig fmt: seperate errors in error sets with comments" {
6111+
try testTransform(
6112+
\\error{
6113+
\\ /// This error is very bad!
6114+
\\ A, B}
6115+
\\
6116+
,
6117+
\\error{
6118+
\\ /// This error is very bad!
6119+
\\ A,
6120+
\\ B,
6121+
\\}
6122+
\\
6123+
);
6124+
6125+
try testTransform(
6126+
\\error{
6127+
\\ A, B
6128+
\\ // something important
6129+
\\}
6130+
\\
6131+
,
6132+
\\error{
6133+
\\ A,
6134+
\\ B,
6135+
\\ // something important
6136+
\\}
6137+
\\
6138+
);
6139+
}
6140+
61106141
test "recovery: top level" {
61116142
try testError(
61126143
\\test "" {inline}

lib/std/zig/render.zig

Lines changed: 43 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -753,39 +753,52 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {
753753
try renderToken(r, lbrace, .none);
754754
try renderIdentifier(r, lbrace + 1, .none, .eagerly_unquote); // identifier
755755
return renderToken(r, rbrace, space);
756-
} else if (tree.tokenTag(rbrace - 1) == .comma) {
757-
// There is a trailing comma so render each member on a new line.
758-
try ais.pushIndent(.normal);
759-
try renderToken(r, lbrace, .newline);
760-
var i = lbrace + 1;
761-
while (i < rbrace) : (i += 1) {
762-
if (i > lbrace + 1) try renderExtraNewlineToken(r, i);
763-
switch (tree.tokenTag(i)) {
764-
.doc_comment => try renderToken(r, i, .newline),
765-
.identifier => {
766-
try ais.pushSpace(.comma);
767-
try renderIdentifier(r, i, .comma, .eagerly_unquote);
768-
ais.popSpace();
769-
},
770-
.comma => {},
771-
else => unreachable,
772-
}
773-
}
774-
ais.popIndent();
775-
return renderToken(r, rbrace, space);
776756
} else {
777-
// There is no trailing comma so render everything on one line.
778-
try renderToken(r, lbrace, .space);
779-
var i = lbrace + 1;
780-
while (i < rbrace) : (i += 1) {
781-
switch (tree.tokenTag(i)) {
782-
.doc_comment => unreachable, // TODO
783-
.identifier => try renderIdentifier(r, i, .comma_space, .eagerly_unquote),
784-
.comma => {},
785-
else => unreachable,
757+
// If there is a trailing comma, comment, or document comment, then render each
758+
// item on its own line.
759+
const multi_line = tree.tokenTag(rbrace - 1) == .comma or
760+
hasComment(tree, lbrace, rbrace) or
761+
blk: {
762+
var i = lbrace + 1;
763+
break :blk while (i < rbrace) : (i += 1) {
764+
if (tree.tokenTag(i) == .doc_comment)
765+
break true;
766+
} else false;
767+
};
768+
769+
if (multi_line) {
770+
// There is a trailing comma so render each member on a new line.
771+
try ais.pushIndent(.normal);
772+
try renderToken(r, lbrace, .newline);
773+
var i = lbrace + 1;
774+
while (i < rbrace) : (i += 1) {
775+
if (i > lbrace + 1) try renderExtraNewlineToken(r, i);
776+
switch (tree.tokenTag(i)) {
777+
.doc_comment => try renderToken(r, i, .newline),
778+
.identifier => {
779+
try ais.pushSpace(.comma);
780+
try renderIdentifier(r, i, .comma, .eagerly_unquote);
781+
ais.popSpace();
782+
},
783+
.comma => {},
784+
else => unreachable,
785+
}
786786
}
787+
ais.popIndent();
788+
return renderToken(r, rbrace, space);
789+
} else {
790+
// There is no trailing comma so render everything on one line.
791+
try renderToken(r, lbrace, .space);
792+
var i = lbrace + 1;
793+
while (i < rbrace) : (i += 1) {
794+
switch (tree.tokenTag(i)) {
795+
.identifier => try renderIdentifier(r, i, .comma_space, .eagerly_unquote),
796+
.comma => {},
797+
else => unreachable,
798+
}
799+
}
800+
return renderToken(r, rbrace, space);
787801
}
788-
return renderToken(r, rbrace, space);
789802
}
790803
},
791804

0 commit comments

Comments
 (0)