feature. See also
. The project being documented here (as the example) is the Zig library itself.
Render.renderSwitchCase
fn renderSwitchCase(
r: *Render,
switch_case: Ast.full.SwitchCase,
space: Space,
) Error!void
File
Code
fn renderSwitchCase(
r: *Render,
switch_case: Ast.full.SwitchCase,
space: Space,
) Error!void {
const ais = r.ais;
const tree = r.tree;
const trailing_comma = tree.tokenTag(switch_case.ast.arrow_token - 1) == .comma;
const has_comment_before_arrow = blk: {
if (switch_case.ast.values.len == 0) break :blk false;
break :blk hasComment(tree, tree.firstToken(switch_case.ast.values[0]), switch_case.ast.arrow_token);
};
if (switch_case.inline_token) |some| {
try renderToken(r, some, .maybe_space);
}
if (switch_case.ast.values.len == 0) {
try renderToken(r, switch_case.ast.arrow_token - 1, .space);
} else if (trailing_comma or has_comment_before_arrow) {
try ais.pushSpace(.comma);
try renderExpressions(r, switch_case.ast.values, .comma);
ais.popSpace();
} else {
for (switch_case.ast.values) |value_expr| {
try renderExpression(r, value_expr, .comma_maybe_space);
}
}
try renderToken(r, switch_case.ast.arrow_token, .maybe_space);
if (switch_case.payload_token) |payload_token| {
try renderToken(r, payload_token - 1, .none);
var ident = payload_token;
if (tree.tokenTag(ident) == .asterisk) {
try renderToken(r, payload_token, .none);
ident += 1;
}
try renderIdentifier(r, ident, .none, .preserve_when_shadowing);
if (tree.tokenTag(ident + 1) == .comma) {
ident += 2;
try renderToken(r, ident - 1, .space);
try renderIdentifier(r, ident, .none, .preserve_when_shadowing);
}
try renderToken(r, ident + 1, .maybe_space);
}
try renderExpression(r, switch_case.ast.target_expr, space);
}