feat: more pretty printing logic

This commit is contained in:
rvcas 2022-06-17 18:51:20 -04:00 committed by Lucas
parent 5a6ba40557
commit 7e86a71772
1 changed files with 21 additions and 20 deletions

View File

@ -6,7 +6,7 @@ impl Program<Name> {
pub fn to_pretty(&self) -> String { pub fn to_pretty(&self) -> String {
let mut w = Vec::new(); let mut w = Vec::new();
self.to_doc().render(20, &mut w).unwrap(); self.to_doc().render(100, &mut w).unwrap();
String::from_utf8(w).unwrap() String::from_utf8(w).unwrap()
} }
@ -17,7 +17,7 @@ impl Program<Name> {
RcDoc::text("(") RcDoc::text("(")
.append(RcDoc::text("program")) .append(RcDoc::text("program"))
.append(RcDoc::line()) .append(RcDoc::line())
.append(RcDoc::text(version)) .append(RcDoc::text(version).nest(2))
.append(RcDoc::line()) .append(RcDoc::line())
.append(self.term.to_doc()) .append(self.term.to_doc())
.append(RcDoc::line_()) .append(RcDoc::line_())
@ -30,31 +30,35 @@ impl Term<Name> {
match self { match self {
Term::Var(name) => RcDoc::text(format!("{}_{}", name.text, name.unique)), Term::Var(name) => RcDoc::text(format!("{}_{}", name.text, name.unique)),
Term::Delay(term) => RcDoc::text("(") Term::Delay(term) => RcDoc::text("(")
.append(RcDoc::line_()) .append(
.append(RcDoc::text("delay")) RcDoc::text("delay")
.append(RcDoc::line()) .append(RcDoc::line())
.append(term.to_doc()) .append(term.to_doc())
.append(RcDoc::line_()) .append(RcDoc::line_()),
)
.append(RcDoc::text(")")), .append(RcDoc::text(")")),
Term::Lambda { Term::Lambda {
parameter_name, parameter_name,
body, body,
} => RcDoc::text("(") } => RcDoc::text("(")
.append(RcDoc::line_()) .append(
.append(RcDoc::text(format!( RcDoc::text("lam")
"{}_{}", .append(RcDoc::line())
parameter_name.text, parameter_name.unique .append(RcDoc::text(format!(
))) "{}_{}",
.append(RcDoc::line()) parameter_name.text, parameter_name.unique
.append(body.to_doc()) )))
.append(RcDoc::line())
.append(body.to_doc()),
)
.append(RcDoc::line_()) .append(RcDoc::line_())
.append(RcDoc::text(")")), .append(RcDoc::text(")")),
Term::Apply { function, argument } => RcDoc::text("[") Term::Apply { function, argument } => RcDoc::text("[")
.append(RcDoc::line_()) .append(RcDoc::line())
.append(function.to_doc()) .append(function.to_doc())
.append(RcDoc::line()) .append(RcDoc::line())
.append(argument.to_doc()) .append(argument.to_doc())
.append(RcDoc::line_()) .append(RcDoc::line())
.append(RcDoc::text("]")), .append(RcDoc::text("]")),
Term::Constant(constant) => RcDoc::text("(") Term::Constant(constant) => RcDoc::text("(")
.append(RcDoc::text("con")) .append(RcDoc::text("con"))
@ -62,25 +66,22 @@ impl Term<Name> {
.append(constant.to_doc()) .append(constant.to_doc())
.append(RcDoc::text(")")), .append(RcDoc::text(")")),
Term::Force(term) => RcDoc::text("(") Term::Force(term) => RcDoc::text("(")
.append(RcDoc::line_())
.append(RcDoc::text("force")) .append(RcDoc::text("force"))
.append(RcDoc::line()) .append(RcDoc::line())
.append(term.to_doc()) .append(term.to_doc())
.append(RcDoc::line_()) .append(RcDoc::line_())
.append(RcDoc::text(")")), .append(RcDoc::text(")")),
Term::Error => RcDoc::text("(") Term::Error => RcDoc::text("(")
.append(RcDoc::line_())
.append(RcDoc::text("error")) .append(RcDoc::text("error"))
.append(RcDoc::line_())
.append(RcDoc::text(")")), .append(RcDoc::text(")")),
Term::Builtin(builtin) => RcDoc::text("(") Term::Builtin(builtin) => RcDoc::text("(")
.append(RcDoc::line_())
.append(RcDoc::text("builtin")) .append(RcDoc::text("builtin"))
.append(RcDoc::line()) .append(RcDoc::line())
.append(RcDoc::text(builtin.to_string())) .append(RcDoc::text(builtin.to_string()))
.append(RcDoc::line_()) .append(RcDoc::line_())
.append(RcDoc::text(")")), .append(RcDoc::text(")")),
} }
.nest(2)
} }
} }