in starlark/src/syntax/ast.rs [401:479]
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Expr::Tuple(e) => {
f.write_str("(")?;
comma_separated_fmt(f, e, |x, f| write!(f, "{}", x.node), true)?;
f.write_str(")")
}
Expr::Dot(e, s) => write!(f, "{}.{}", e.node, s.node),
Expr::Lambda(params, e, _payload) => {
f.write_str("(lambda ")?;
comma_separated_fmt(f, params, |x, f| write!(f, "{}", x.node), false)?;
f.write_str(": ")?;
write!(f, "{}", e.node)?;
f.write_str(")")
}
Expr::Call(e, args) => {
write!(f, "{}(", e.node)?;
for (i, x) in args.iter().enumerate() {
if i != 0 {
f.write_str(", ")?;
}
write!(f, "{}", x.node)?;
}
f.write_str(")")
}
Expr::ArrayIndirection(box (e, i)) => write!(f, "{}[{}]", e.node, i.node),
Expr::Slice(e, i1, i2, i3) => {
write!(f, "{}[]", e.node)?;
if let Some(x) = i1 {
write!(f, "{}:", x.node)?
} else {
f.write_str(":")?
}
if let Some(x) = i2 {
write!(f, "{}", x.node)?
}
if let Some(x) = i3 {
write!(f, ":{}", x.node)?
}
Ok(())
}
Expr::Identifier(s, _) => write!(f, "{}", s.node),
Expr::Not(e) => write!(f, "(not {})", e.node),
Expr::Minus(e) => write!(f, "-{}", e.node),
Expr::Plus(e) => write!(f, "+{}", e.node),
Expr::BitNot(e) => write!(f, "~{}", e.node),
Expr::Op(l, op, r) => write!(f, "({}{}{})", l.node, op, r.node),
Expr::If(box (cond, v1, v2)) => {
write!(f, "({} if {} else {})", v1.node, cond.node, v2.node)
}
Expr::List(v) => {
f.write_str("[")?;
comma_separated_fmt(f, v, |x, f| write!(f, "{}", x.node), false)?;
f.write_str("]")
}
Expr::Dict(v) => {
f.write_str("{")?;
comma_separated_fmt(f, v, |x, f| write!(f, "{}: {}", x.0.node, x.1.node), false)?;
f.write_str("}")
}
Expr::ListComprehension(e, for_, c) => {
write!(f, "[{}", e.node)?;
write!(f, "{}", for_)?;
for x in c {
write!(f, "{}", x)?;
}
f.write_str("]")
}
Expr::DictComprehension(box (k, v), for_, c) => {
write!(f, "{{{}: {}", k.node, v.node)?;
write!(f, "{}", for_)?;
for x in c {
write!(f, "{}", x)?;
}
f.write_str("}}")
}
Expr::Literal(x) => write!(f, "{}", x),
}
}