Zig 0.17.0-dev (Split by item)

This is an example of documentation generated by ZigDoc, an alternative to Zig's built-in Auto Doc feature. See also examples in other modes/formats. The project being documented here (as the example) is the Zig library itself.

renderArrayInit

ast.renderArrayInit
fn renderArrayInit(c: *Context, lhs: NodeIndex, inits: []const Node) !NodeIndex

File

Code

fn renderArrayInit(c: *Context, lhs: NodeIndex, inits: []const Node) !NodeIndex {
    const l_brace = try c.addToken(.l_brace, "{");
    var rendered = try c.gpa.alloc(NodeIndex, inits.len);
    defer c.gpa.free(rendered);

    for (inits, 0..) |init, i| {
        rendered[i] = try renderNode(c, init);
        _ = try c.addToken(.comma, ",");
    }
    _ = try c.addToken(.r_brace, "}");
    switch (inits.len) {
        0 => return c.addNode(.{
            .tag = .struct_init_one,
            .main_token = l_brace,
            .data = .{ .node_and_opt_node = .{
                lhs, .none,
            } },
        }),
        1 => return c.addNode(.{
            .tag = .array_init_one_comma,
            .main_token = l_brace,
            .data = .{ .node_and_node = .{
                lhs, rendered[0],
            } },
        }),
        else => return c.addNode(.{
            .tag = .array_init_comma,
            .main_token = l_brace,
            .data = .{ .node_and_extra = .{
                lhs,
                try c.addExtra(try c.listToSpan(rendered)),
            } },
        }),
    }
}