renderParamList
Function parameters
Parameters
Type definitions in this namespace
Types
Functions in this namespace
Functions
Error sets in this namespace
Error Sets
Source
Implementation
fn renderParamList(
r: *Render,
lparen: Ast.TokenIndex,
params: []const Ast.Node.Index,
space: Space,
) Error!void {
const tree = r.tree;
const ais = r.ais;
if (params.len == 0) {
try ais.pushIndent(.normal);
try renderToken(r, lparen, .none);
ais.popIndent();
return renderToken(r, lparen + 1, space); // )
}
const last_param = params[params.len - 1];
const after_last_param_tok = tree.lastToken(last_param) + 1;
if (tree.tokenTag(after_last_param_tok) == .comma) {
try ais.pushIndent(.normal);
try renderToken(r, lparen, .newline); // (
for (params, 0..) |param_node, i| {
if (i + 1 < params.len) {
try renderExpression(r, param_node, .none);
const comma = tree.lastToken(param_node) + 1;
try renderToken(r, comma, .newline); // ,
try renderExtraNewline(r, params[i + 1]);
} else {
try ais.pushSpace(.comma);
try renderExpression(r, param_node, .comma);
ais.popSpace();
}
}
ais.popIndent();
return renderToken(r, after_last_param_tok + 1, space); // )
}
try ais.pushIndent(.normal);
try renderToken(r, lparen, .none); // (
for (params, 0..) |param_node, i| {
try renderExpression(r, param_node, .none);
if (i + 1 < params.len) {
const comma = tree.lastToken(param_node) + 1;
const next_multiline_string =
tree.tokenTag(tree.firstToken(params[i + 1])) == .multiline_string_literal_line;
const comma_space: Space = if (next_multiline_string) .none else .space;
try renderToken(r, comma, comma_space);
}
}
ais.popIndent();
return renderToken(r, after_last_param_tok, space); // )
}