renderSlice
Function parameters
Parameters
Type definitions in this namespace
Types
Functions in this namespace
Functions
Error sets in this namespace
Error Sets
Source
Implementation
fn renderSlice(
r: *Render,
slice_node: Ast.Node.Index,
slice: Ast.full.Slice,
space: Space,
) Error!void {
const tree = r.tree;
const after_start_space_bool = nodeCausesSliceOpSpace(tree.nodeTag(slice.ast.start)) or
if (slice.ast.end.unwrap()) |end| nodeCausesSliceOpSpace(tree.nodeTag(end)) else false;
const after_start_space = if (after_start_space_bool) Space.space else Space.none;
const after_dots_space = if (slice.ast.end != .none)
after_start_space
else if (slice.ast.sentinel != .none) Space.space else Space.none;
try renderExpression(r, slice.ast.sliced, .none);
try renderToken(r, slice.ast.lbracket, .none); // lbracket
const start_last = tree.lastToken(slice.ast.start);
try renderExpression(r, slice.ast.start, after_start_space);
try renderToken(r, start_last + 1, after_dots_space); // ellipsis2 ("..")
if (slice.ast.end.unwrap()) |end| {
const after_end_space = if (slice.ast.sentinel != .none) Space.space else Space.none;
try renderExpression(r, end, after_end_space);
}
if (slice.ast.sentinel.unwrap()) |sentinel| {
try renderToken(r, tree.firstToken(sentinel) - 1, .none); // colon
try renderExpression(r, sentinel, .none);
}
try renderToken(r, tree.lastToken(slice_node), space); // rbracket
}