renderVarDeclWithoutFixups
Function parameters
Parameters
Type definitions in this namespace
Types
Functions in this namespace
Functions
Error sets in this namespace
Error Sets
Source
Implementation
fn renderVarDeclWithoutFixups(
r: *Render,
var_decl: Ast.full.VarDecl,
/// Destructures intentionally ignore leading `comptime` tokens.
ignore_comptime_token: bool,
/// `comma_space` and `space` are used for destructure LHS decls.
space: Space,
) Error!void {
const tree = r.tree;
const ais = r.ais;
if (var_decl.visib_token) |visib_token| {
try renderToken(r, visib_token, Space.space); // pub
}
if (var_decl.extern_export_token) |extern_export_token| {
try renderToken(r, extern_export_token, Space.space); // extern
if (var_decl.lib_name) |lib_name| {
try renderToken(r, lib_name, Space.space); // "lib"
}
}
if (var_decl.threadlocal_token) |thread_local_token| {
try renderToken(r, thread_local_token, Space.space); // threadlocal
}
if (!ignore_comptime_token) {
if (var_decl.comptime_token) |comptime_token| {
try renderToken(r, comptime_token, Space.space); // comptime
}
}
try renderToken(r, var_decl.ast.mut_token, .space); // var
if (var_decl.ast.type_node != .none or var_decl.ast.align_node != .none or
var_decl.ast.addrspace_node != .none or var_decl.ast.section_node != .none or
var_decl.ast.init_node != .none)
{
const name_space = if (var_decl.ast.type_node == .none and
(var_decl.ast.align_node != .none or
var_decl.ast.addrspace_node != .none or
var_decl.ast.section_node != .none or
var_decl.ast.init_node != .none))
Space.space
else
Space.none;
try renderIdentifier(r, var_decl.ast.mut_token + 1, name_space, .preserve_when_shadowing); // name
} else {
return renderIdentifier(r, var_decl.ast.mut_token + 1, space, .preserve_when_shadowing); // name
}
if (var_decl.ast.type_node.unwrap()) |type_node| {
try renderToken(r, var_decl.ast.mut_token + 2, Space.space); // :
if (var_decl.ast.align_node != .none or var_decl.ast.addrspace_node != .none or
var_decl.ast.section_node != .none or var_decl.ast.init_node != .none)
{
try renderExpression(r, type_node, .space);
} else {
return renderExpression(r, type_node, space);
}
}
if (var_decl.ast.align_node.unwrap()) |align_node| {
const lparen = tree.firstToken(align_node) - 1;
const align_kw = lparen - 1;
const rparen = tree.lastToken(align_node) + 1;
try renderToken(r, align_kw, Space.none); // align
try renderToken(r, lparen, Space.none); // (
try renderExpression(r, align_node, Space.none);
if (var_decl.ast.addrspace_node != .none or var_decl.ast.section_node != .none or
var_decl.ast.init_node != .none)
{
try renderToken(r, rparen, .space); // )
} else {
return renderToken(r, rparen, space); // )
}
}
if (var_decl.ast.addrspace_node.unwrap()) |addrspace_node| {
const lparen = tree.firstToken(addrspace_node) - 1;
const addrspace_kw = lparen - 1;
const rparen = tree.lastToken(addrspace_node) + 1;
try renderToken(r, addrspace_kw, Space.none); // addrspace
try renderToken(r, lparen, Space.none); // (
try renderExpression(r, addrspace_node, Space.none);
if (var_decl.ast.section_node != .none or var_decl.ast.init_node != .none) {
try renderToken(r, rparen, .space); // )
} else {
try renderToken(r, rparen, .none); // )
return renderToken(r, rparen + 1, Space.newline); // ;
}
}
if (var_decl.ast.section_node.unwrap()) |section_node| {
const lparen = tree.firstToken(section_node) - 1;
const section_kw = lparen - 1;
const rparen = tree.lastToken(section_node) + 1;
try renderToken(r, section_kw, Space.none); // linksection
try renderToken(r, lparen, Space.none); // (
try renderExpression(r, section_node, Space.none);
if (var_decl.ast.init_node != .none) {
try renderToken(r, rparen, .space); // )
} else {
return renderToken(r, rparen, space); // )
}
}
const init_node = var_decl.ast.init_node.unwrap().?;
const eq_token = tree.firstToken(init_node) - 1;
const eq_space: Space = if (tree.tokensOnSameLine(eq_token, eq_token + 1)) .space else .newline;
try ais.pushIndent(.after_equals);
try renderToken(r, eq_token, eq_space); // =
try renderExpression(r, init_node, space); // ;
ais.popIndent();
}