Get some indenting right.
This commit is contained in:
@@ -7,35 +7,37 @@ impl Program {
|
||||
let mut result = allocator.nil();
|
||||
|
||||
for definition in self.structures.values() {
|
||||
result = result
|
||||
.append(allocator.text("struct"))
|
||||
let mut interior = allocator.nil();
|
||||
|
||||
for (name, ty) in definition.fields.iter() {
|
||||
let mut type_bit = allocator.nil();
|
||||
|
||||
if let Some(ty) = ty {
|
||||
type_bit = allocator
|
||||
.text(":")
|
||||
.append(allocator.space())
|
||||
.append(ty.pretty(allocator));
|
||||
}
|
||||
|
||||
interior = interior
|
||||
.append(name.original_name().to_string())
|
||||
.append(type_bit)
|
||||
.append(allocator.text(";"))
|
||||
.append(allocator.hardline());
|
||||
}
|
||||
|
||||
interior = interior.indent(9);
|
||||
|
||||
let start = allocator.text("struct")
|
||||
.append(allocator.space())
|
||||
.append(allocator.text(definition.name.original_name().to_string()))
|
||||
.append(allocator.space())
|
||||
.append(allocator.text("{"))
|
||||
.append(allocator.hardline())
|
||||
.append(
|
||||
allocator
|
||||
.concat(definition.fields.iter().map(|(name, ty)| {
|
||||
let mut type_bit = allocator.nil();
|
||||
.append(allocator.text("{"));
|
||||
|
||||
if let Some(ty) = ty {
|
||||
type_bit = allocator
|
||||
.text(":")
|
||||
.append(allocator.space())
|
||||
.append(ty.pretty(allocator));
|
||||
}
|
||||
|
||||
allocator
|
||||
.text(name.original_name().to_string())
|
||||
.append(type_bit)
|
||||
.append(allocator.text(";"))
|
||||
.append(allocator.hardline())
|
||||
}))
|
||||
.nest(2),
|
||||
)
|
||||
.append(allocator.text("}"))
|
||||
let conclusion = allocator.text("}")
|
||||
.append(allocator.hardline());
|
||||
|
||||
result = result.append(start.append(interior).append(conclusion));
|
||||
}
|
||||
|
||||
for definition in self.functions.values() {
|
||||
@@ -111,8 +113,7 @@ impl TopLevel {
|
||||
.append(type_bit)
|
||||
.append(allocator.text(";"))
|
||||
.append(allocator.hardline())
|
||||
}))
|
||||
.nest(2),
|
||||
})).indent(2)
|
||||
)
|
||||
.append(allocator.text("}"))
|
||||
.append(allocator.hardline()),
|
||||
@@ -127,6 +128,8 @@ impl Expression {
|
||||
Expression::Constructor(_, name, fields) => allocator
|
||||
.text(name.to_string())
|
||||
.append(allocator.space())
|
||||
.append(allocator.text("{"))
|
||||
.append(allocator.hardline())
|
||||
.append(
|
||||
allocator
|
||||
.concat(fields.iter().map(|(n, e)| {
|
||||
@@ -138,9 +141,9 @@ impl Expression {
|
||||
.append(allocator.text(";"))
|
||||
.append(allocator.hardline())
|
||||
}))
|
||||
.nest(2)
|
||||
.braces(),
|
||||
),
|
||||
.indent(2)
|
||||
)
|
||||
.append(allocator.text("}")),
|
||||
Expression::Reference(var) => allocator.text(var.to_string()),
|
||||
Expression::FieldRef(_, val, field) => val
|
||||
.pretty(allocator)
|
||||
@@ -152,27 +155,55 @@ impl Expression {
|
||||
.append(e.pretty(allocator)),
|
||||
Expression::Primitive(_, op) => allocator.text(op.original_name().to_string()),
|
||||
Expression::Call(_, fun, args) => {
|
||||
let args = args.iter().map(|x| x.pretty(allocator));
|
||||
let comma_sepped_args = allocator.intersperse(args, allocator.text(","));
|
||||
fun.pretty(allocator).append(comma_sepped_args.parens())
|
||||
let mut args = args.iter().map(|x| x.pretty(allocator)).collect::<Vec<_>>();
|
||||
|
||||
match fun.as_ref() {
|
||||
Expression::Primitive(_, name) if ["/", "*", "+", "-"].contains(&name.current_name()) && args.len() == 2 => {
|
||||
let second = args.pop().unwrap();
|
||||
args.pop()
|
||||
.unwrap()
|
||||
.append(allocator.space())
|
||||
.append(allocator.text(name.current_name().to_string()))
|
||||
.append(allocator.space())
|
||||
.append(second)
|
||||
.parens()
|
||||
}
|
||||
|
||||
Expression::Primitive(_, name) if ["negate"].contains(&name.current_name()) && args.len() == 1 =>
|
||||
allocator.text("-").append(args.pop().unwrap()),
|
||||
|
||||
Expression::Primitive(_, name) if ["print"].contains(&&name.current_name()) && args.len() == 1 =>
|
||||
allocator.text("print")
|
||||
.append(allocator.space())
|
||||
.append(args.pop().unwrap()),
|
||||
|
||||
_ => {
|
||||
let comma_sepped_args = allocator.intersperse(args, allocator.text(","));
|
||||
fun.pretty(allocator).append(comma_sepped_args.parens())
|
||||
}
|
||||
}
|
||||
}
|
||||
Expression::Block(_, stmts) => match stmts.split_last() {
|
||||
None => allocator.text("()"),
|
||||
Some((last, &[])) => last.pretty(allocator),
|
||||
Some((last, start)) => {
|
||||
let mut result = allocator.text("{").append(allocator.hardline());
|
||||
let beginning = allocator.text("{").append(allocator.hardline());
|
||||
let mut inner = allocator.nil();
|
||||
|
||||
for stmt in start.iter() {
|
||||
result = result
|
||||
inner = inner
|
||||
.append(stmt.pretty(allocator))
|
||||
.append(allocator.text(";"))
|
||||
.append(allocator.hardline());
|
||||
}
|
||||
|
||||
result
|
||||
inner = inner
|
||||
.append(last.pretty(allocator))
|
||||
.append(allocator.hardline())
|
||||
.append(allocator.text("}"))
|
||||
.append(allocator.hardline());
|
||||
|
||||
inner = inner.indent(2);
|
||||
|
||||
beginning.append(inner).append(allocator.text("}"))
|
||||
}
|
||||
},
|
||||
Expression::Binding(_, var, expr) => allocator
|
||||
|
||||
Reference in New Issue
Block a user