feature. See also
. The project being documented here (as the example) is the Zig library itself.
Render.renderStructInit
fn renderStructInit(
r: *Render,
struct_node: Ast.Node.Index,
struct_init: Ast.full.StructInit,
space: Space,
) Error!void
File
Code
fn renderStructInit(
r: *Render,
struct_node: Ast.Node.Index,
struct_init: Ast.full.StructInit,
space: Space,
) Error!void {
const tree = r.tree;
const ais = r.ais;
if (struct_init.ast.type_expr.unwrap()) |type_expr| {
try renderExpression(r, type_expr, .none);
} else {
try renderToken(r, struct_init.ast.lbrace - 1, .none);
}
if (struct_init.ast.fields.len == 0) {
try ais.pushIndent(.normal);
try renderToken(r, struct_init.ast.lbrace, .none);
ais.popIndent();
return renderToken(r, struct_init.ast.lbrace + 1, space);
}
const rbrace = tree.lastToken(struct_node);
const trailing_comma = tree.tokenTag(rbrace - 1) == .comma;
if (trailing_comma or hasComment(tree, struct_init.ast.lbrace, rbrace)) {
try ais.pushIndent(.normal);
try renderToken(r, struct_init.ast.lbrace, .newline);
for (0.., struct_init.ast.fields) |i, field_init| {
const init_token = tree.firstToken(field_init);
if (i != 0)
try renderExtraNewlineToken(r, init_token - 3);
try renderToken(r, init_token - 3, .none);
try renderIdentifier(r, init_token - 2, .space, .eagerly_unquote);
try renderToken(r, init_token - 1, .maybe_space);
try ais.pushSpace(.comma);
try renderExpressionFixup(r, field_init, .comma);
ais.popSpace();
}
ais.popIndent();
} else {
try renderToken(r, struct_init.ast.lbrace, .space);
for (struct_init.ast.fields) |field_init| {
const init_token = tree.firstToken(field_init);
try renderToken(r, init_token - 3, .none);
try renderIdentifier(r, init_token - 2, .space, .eagerly_unquote);
try renderToken(r, init_token - 1, .maybe_space);
try renderExpressionFixup(r, field_init, .comma_space);
}
}
return renderToken(r, rbrace, space);
}