zig fmt: line comments in struct initializer
This commit is contained in:
parent
7c822869fe
commit
3a8dc4e90d
|
@ -1269,7 +1269,7 @@ pub const Node = struct {
|
||||||
ArrayAccess: &Node,
|
ArrayAccess: &Node,
|
||||||
Slice: SliceRange,
|
Slice: SliceRange,
|
||||||
ArrayInitializer: ArrayList(&Node),
|
ArrayInitializer: ArrayList(&Node),
|
||||||
StructInitializer: ArrayList(&FieldInitializer),
|
StructInitializer: ArrayList(&Node),
|
||||||
};
|
};
|
||||||
|
|
||||||
const CallInfo = struct {
|
const CallInfo = struct {
|
||||||
|
@ -1311,7 +1311,7 @@ pub const Node = struct {
|
||||||
i -= exprs.len;
|
i -= exprs.len;
|
||||||
},
|
},
|
||||||
Op.StructInitializer => |fields| {
|
Op.StructInitializer => |fields| {
|
||||||
if (i < fields.len) return &fields.at(i).base;
|
if (i < fields.len) return fields.at(i);
|
||||||
i -= fields.len;
|
i -= fields.len;
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -238,8 +238,8 @@ pub const Parser = struct {
|
||||||
|
|
||||||
ExprListItemOrEnd: ExprListCtx,
|
ExprListItemOrEnd: ExprListCtx,
|
||||||
ExprListCommaOrEnd: ExprListCtx,
|
ExprListCommaOrEnd: ExprListCtx,
|
||||||
FieldInitListItemOrEnd: ListSave(&ast.Node.FieldInitializer),
|
FieldInitListItemOrEnd: ListSave(&ast.Node),
|
||||||
FieldInitListCommaOrEnd: ListSave(&ast.Node.FieldInitializer),
|
FieldInitListCommaOrEnd: ListSave(&ast.Node),
|
||||||
FieldListCommaOrEnd: &ast.Node.ContainerDecl,
|
FieldListCommaOrEnd: &ast.Node.ContainerDecl,
|
||||||
FieldInitValue: OptionalCtx,
|
FieldInitValue: OptionalCtx,
|
||||||
ErrorTagListItemOrEnd: ListSave(&ast.Node),
|
ErrorTagListItemOrEnd: ListSave(&ast.Node),
|
||||||
|
@ -1510,6 +1510,10 @@ pub const Parser = struct {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
State.FieldInitListItemOrEnd => |list_state| {
|
State.FieldInitListItemOrEnd => |list_state| {
|
||||||
|
while (try self.eatLineComment(arena)) |line_comment| {
|
||||||
|
try list_state.list.append(&line_comment.base);
|
||||||
|
}
|
||||||
|
|
||||||
if (self.eatToken(Token.Id.RBrace)) |rbrace| {
|
if (self.eatToken(Token.Id.RBrace)) |rbrace| {
|
||||||
*list_state.ptr = rbrace;
|
*list_state.ptr = rbrace;
|
||||||
continue;
|
continue;
|
||||||
|
@ -1524,7 +1528,7 @@ pub const Parser = struct {
|
||||||
.name_token = undefined,
|
.name_token = undefined,
|
||||||
.expr = undefined,
|
.expr = undefined,
|
||||||
});
|
});
|
||||||
try list_state.list.append(node);
|
try list_state.list.append(&node.base);
|
||||||
|
|
||||||
stack.append(State { .FieldInitListCommaOrEnd = list_state }) catch unreachable;
|
stack.append(State { .FieldInitListCommaOrEnd = list_state }) catch unreachable;
|
||||||
try stack.append(State { .Expression = OptionalCtx{ .Required = &node.expr } });
|
try stack.append(State { .Expression = OptionalCtx{ .Required = &node.expr } });
|
||||||
|
@ -2346,7 +2350,7 @@ pub const Parser = struct {
|
||||||
.base = undefined,
|
.base = undefined,
|
||||||
.lhs = lhs,
|
.lhs = lhs,
|
||||||
.op = ast.Node.SuffixOp.Op {
|
.op = ast.Node.SuffixOp.Op {
|
||||||
.StructInitializer = ArrayList(&ast.Node.FieldInitializer).init(arena),
|
.StructInitializer = ArrayList(&ast.Node).init(arena),
|
||||||
},
|
},
|
||||||
.rtoken = undefined,
|
.rtoken = undefined,
|
||||||
}
|
}
|
||||||
|
@ -2354,7 +2358,7 @@ pub const Parser = struct {
|
||||||
stack.append(State { .CurlySuffixExpressionEnd = opt_ctx.toRequired() }) catch unreachable;
|
stack.append(State { .CurlySuffixExpressionEnd = opt_ctx.toRequired() }) catch unreachable;
|
||||||
try stack.append(State { .IfToken = Token.Id.LBrace });
|
try stack.append(State { .IfToken = Token.Id.LBrace });
|
||||||
try stack.append(State {
|
try stack.append(State {
|
||||||
.FieldInitListItemOrEnd = ListSave(&ast.Node.FieldInitializer) {
|
.FieldInitListItemOrEnd = ListSave(&ast.Node) {
|
||||||
.list = &node.op.StructInitializer,
|
.list = &node.op.StructInitializer,
|
||||||
.ptr = &node.rtoken,
|
.ptr = &node.rtoken,
|
||||||
}
|
}
|
||||||
|
@ -3452,7 +3456,6 @@ pub const Parser = struct {
|
||||||
Expression: &ast.Node,
|
Expression: &ast.Node,
|
||||||
VarDecl: &ast.Node.VarDecl,
|
VarDecl: &ast.Node.VarDecl,
|
||||||
Statement: &ast.Node,
|
Statement: &ast.Node,
|
||||||
FieldInitializer: &ast.Node.FieldInitializer,
|
|
||||||
PrintIndent,
|
PrintIndent,
|
||||||
Indent: usize,
|
Indent: usize,
|
||||||
PrintSameLineComment: ?&Token,
|
PrintSameLineComment: ?&Token,
|
||||||
|
@ -3584,12 +3587,6 @@ pub const Parser = struct {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
RenderState.FieldInitializer => |field_init| {
|
|
||||||
try stream.print(".{}", self.tokenizer.getTokenSlice(field_init.name_token));
|
|
||||||
try stream.print(" = ");
|
|
||||||
try stack.append(RenderState { .Expression = field_init.expr });
|
|
||||||
},
|
|
||||||
|
|
||||||
RenderState.VarDecl => |var_decl| {
|
RenderState.VarDecl => |var_decl| {
|
||||||
try stack.append(RenderState { .Text = ";" });
|
try stack.append(RenderState { .Text = ";" });
|
||||||
if (var_decl.init_node) |init_node| {
|
if (var_decl.init_node) |init_node| {
|
||||||
|
@ -3888,7 +3885,7 @@ pub const Parser = struct {
|
||||||
const field_init = field_inits.at(0);
|
const field_init = field_inits.at(0);
|
||||||
|
|
||||||
try stack.append(RenderState { .Text = " }" });
|
try stack.append(RenderState { .Text = " }" });
|
||||||
try stack.append(RenderState { .FieldInitializer = field_init });
|
try stack.append(RenderState { .Expression = field_init });
|
||||||
try stack.append(RenderState { .Text = "{ " });
|
try stack.append(RenderState { .Text = "{ " });
|
||||||
try stack.append(RenderState { .Expression = suffix_op.lhs });
|
try stack.append(RenderState { .Expression = suffix_op.lhs });
|
||||||
continue;
|
continue;
|
||||||
|
@ -3896,13 +3893,26 @@ pub const Parser = struct {
|
||||||
try stack.append(RenderState { .Text = "}"});
|
try stack.append(RenderState { .Text = "}"});
|
||||||
try stack.append(RenderState.PrintIndent);
|
try stack.append(RenderState.PrintIndent);
|
||||||
try stack.append(RenderState { .Indent = indent });
|
try stack.append(RenderState { .Indent = indent });
|
||||||
|
try stack.append(RenderState { .Text = "\n" });
|
||||||
var i = field_inits.len;
|
var i = field_inits.len;
|
||||||
while (i != 0) {
|
while (i != 0) {
|
||||||
i -= 1;
|
i -= 1;
|
||||||
const field_init = field_inits.at(i);
|
const field_init = field_inits.at(i);
|
||||||
try stack.append(RenderState { .Text = ",\n" });
|
if (field_init.id != ast.Node.Id.LineComment) {
|
||||||
try stack.append(RenderState { .FieldInitializer = field_init });
|
try stack.append(RenderState { .Text = "," });
|
||||||
|
}
|
||||||
|
try stack.append(RenderState { .Expression = field_init });
|
||||||
try stack.append(RenderState.PrintIndent);
|
try stack.append(RenderState.PrintIndent);
|
||||||
|
if (i != 0) {
|
||||||
|
try stack.append(RenderState { .Text = blk: {
|
||||||
|
const prev_node = field_inits.at(i - 1);
|
||||||
|
const loc = self.tokenizer.getTokenLocation(prev_node.lastToken().end, field_init.firstToken());
|
||||||
|
if (loc.line >= 2) {
|
||||||
|
break :blk "\n\n";
|
||||||
|
}
|
||||||
|
break :blk "\n";
|
||||||
|
}});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
try stack.append(RenderState { .Indent = indent + indent_delta });
|
try stack.append(RenderState { .Indent = indent + indent_delta });
|
||||||
try stack.append(RenderState { .Text = "{\n"});
|
try stack.append(RenderState { .Text = "{\n"});
|
||||||
|
|
|
@ -1,3 +1,44 @@
|
||||||
|
test "zig fmt: line comments in struct initializer" {
|
||||||
|
try testCanonical(
|
||||||
|
\\fn foo() void {
|
||||||
|
\\ return Self{
|
||||||
|
\\ .a = b,
|
||||||
|
\\
|
||||||
|
\\ // Initialize these two fields to buffer_size so that
|
||||||
|
\\ // in `readFn` we treat the state as being able to read
|
||||||
|
\\ .start_index = buffer_size,
|
||||||
|
\\ .end_index = buffer_size,
|
||||||
|
\\
|
||||||
|
\\ // middle
|
||||||
|
\\
|
||||||
|
\\ .a = b,
|
||||||
|
\\
|
||||||
|
\\ // end
|
||||||
|
\\ };
|
||||||
|
\\}
|
||||||
|
\\
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO
|
||||||
|
//test "zig fmt: same-line comptime" {
|
||||||
|
// try testCanonical(
|
||||||
|
// \\test "" {
|
||||||
|
// \\ comptime assert(@typeId(T) == builtin.TypeId.Int); // must pass an integer to absInt
|
||||||
|
// \\}
|
||||||
|
// \\
|
||||||
|
// );
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
//TODO
|
||||||
|
//test "zig fmt: number literals" {
|
||||||
|
// try testCanonical(
|
||||||
|
// \\pub const f64_true_min = 4.94065645841246544177e-324;
|
||||||
|
// \\
|
||||||
|
// );
|
||||||
|
//}
|
||||||
|
|
||||||
test "zig fmt: doc comments before struct field" {
|
test "zig fmt: doc comments before struct field" {
|
||||||
try testCanonical(
|
try testCanonical(
|
||||||
\\pub const Allocator = struct {
|
\\pub const Allocator = struct {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user