Commit 4e23fb7f06
Changed files (2)
std
std/zig/parser.zig
@@ -1517,8 +1517,15 @@ pub const Parser = struct {
continue;
}
- stack.append(State { .IdentifierListCommaOrEnd = list_state }) catch unreachable;
- try stack.append(State { .Identifier = OptionalCtx { .Required = try list_state.list.addOne() } });
+ const comments = try self.eatComments(arena);
+ const node_ptr = try list_state.list.addOne();
+
+ try stack.append(State { .AddComments = AddCommentsCtx {
+ .node_ptr = node_ptr,
+ .comments = comments,
+ }});
+ try stack.append(State { .IdentifierListCommaOrEnd = list_state });
+ try stack.append(State { .Identifier = OptionalCtx { .Required = node_ptr } });
continue;
},
State.IdentifierListCommaOrEnd => |list_state| {
@@ -2739,14 +2746,17 @@ pub const Parser = struct {
continue;
}
- const node = try self.createToCtxNode(arena, ctx.opt_ctx, ast.Node.ErrorSetDecl,
- ast.Node.ErrorSetDecl {
- .base = undefined,
- .error_token = ctx.error_token,
- .decls = ArrayList(&ast.Node).init(arena),
- .rbrace_token = undefined,
- }
- );
+ const node = try arena.construct(ast.Node.ErrorSetDecl {
+ .base = ast.Node {
+ .id = ast.Node.Id.ErrorSetDecl,
+ .before_comments = null,
+ .same_line_comment = null,
+ },
+ .error_token = ctx.error_token,
+ .decls = ArrayList(&ast.Node).init(arena),
+ .rbrace_token = undefined,
+ });
+ ctx.opt_ctx.store(&node.base);
stack.append(State {
.IdentifierListItemOrEnd = ListSave(&ast.Node) {
@@ -3337,6 +3347,7 @@ pub const Parser = struct {
PrintIndent,
Indent: usize,
PrintSameLineComment: ?&Token,
+ PrintComments: &ast.Node,
};
pub fn renderSource(self: &Parser, stream: var, root_node: &ast.Node.Root) !void {
@@ -3978,6 +3989,7 @@ pub const Parser = struct {
const node = decls[i];
try stack.append(RenderState { .Text = "," });
try stack.append(RenderState { .Expression = node });
+ try stack.append(RenderState { .PrintComments = node });
try stack.append(RenderState.PrintIndent);
try stack.append(RenderState {
.Text = blk: {
@@ -4466,6 +4478,10 @@ pub const Parser = struct {
const comment_token = maybe_comment ?? break :blk;
try stream.print(" {}", self.tokenizer.getTokenSlice(comment_token));
},
+
+ RenderState.PrintComments => |node| blk: {
+ try self.renderComments(stream, node, indent);
+ },
}
}
}
std/zig/parser_test.zig
@@ -1,3 +1,16 @@
+test "zig fmt: comments before error set decl" {
+ try testCanonical(
+ \\const UnexpectedError = error {
+ \\ /// The Operating System returned an undocumented error code.
+ \\ Unexpected,
+ \\
+ \\ // another
+ \\ Another,
+ \\};
+ \\
+ );
+}
+
test "zig fmt: comments before switch prong" {
try testCanonical(
\\test "" {