in starlark/src/syntax/ast.rs [550:605]
fn fmt_with_tab(&self, f: &mut Formatter<'_>, tab: String) -> fmt::Result {
match self {
Stmt::Break => writeln!(f, "{}break", tab),
Stmt::Continue => writeln!(f, "{}continue", tab),
Stmt::Pass => writeln!(f, "{}pass", tab),
Stmt::Return(Some(e)) => writeln!(f, "{}return {}", tab, e.node),
Stmt::Return(None) => writeln!(f, "{}return", tab),
Stmt::Expression(e) => writeln!(f, "{}{}", tab, e.node),
Stmt::Assign(l, r) => writeln!(f, "{}{} = {}", tab, l.node, r.node),
Stmt::AssignModify(l, op, r) => writeln!(f, "{}{}{}{}", tab, l.node, op, r.node),
Stmt::Statements(v) => {
for s in v {
s.node.fmt_with_tab(f, tab.clone())?;
}
Ok(())
}
Stmt::If(cond, box suite) => {
writeln!(f, "{}if {}:", tab, cond.node)?;
suite.node.fmt_with_tab(f, tab + " ")
}
Stmt::IfElse(cond, box (suite1, suite2)) => {
writeln!(f, "{}if {}:", tab, cond.node)?;
suite1.node.fmt_with_tab(f, tab.clone() + " ")?;
writeln!(f, "{}else:", tab)?;
suite2.node.fmt_with_tab(f, tab + " ")
}
Stmt::For(bind, box (coll, suite)) => {
writeln!(f, "{}for {} in {}:", tab, bind.node, coll.node)?;
suite.node.fmt_with_tab(f, tab + " ")
}
Stmt::Def(name, params, return_type, suite, _payload) => {
write!(f, "{}def {}(", tab, name.node)?;
comma_separated_fmt(f, params, |x, f| write!(f, "{}", x.node), false)?;
f.write_str(")")?;
if let Some(rt) = return_type {
write!(f, " -> {}", rt.node)?;
}
f.write_str(":\n")?;
suite.node.fmt_with_tab(f, tab + " ")
}
Stmt::Load(load) => {
write!(f, "{}load(", tab)?;
fmt_string_literal(f, &load.node.module.node)?;
comma_separated_fmt(
f,
&load.node.args,
|x, f| {
write!(f, "{} = ", x.0.node)?;
fmt_string_literal(f, &(x.1.node))
},
false,
)?;
f.write_str(")\n")
}
}
}