diff --git a/src/pretty.rs b/src/pretty.rs index 4fe06c6..f29ec0e 100644 --- a/src/pretty.rs +++ b/src/pretty.rs @@ -1,2 +1,3 @@ mod basic; +mod expr; mod program; diff --git a/src/pretty/expr.rs b/src/pretty/expr.rs new file mode 100644 index 0000000..57b186a --- /dev/null +++ b/src/pretty/expr.rs @@ -0,0 +1,48 @@ +use pretty::RcDoc; + +use crate::ast::Expr; + +impl Expr { + pub fn to_doc(&self) -> RcDoc { + match self { + Expr::Lit(lit) => RcDoc::text(""), + Expr::Call(call) => RcDoc::text(""), + Expr::Field(field) => RcDoc::text(""), + Expr::Var(var) => RcDoc::text(""), + Expr::TableConstr(constr) => RcDoc::text(""), + Expr::TableDestr(destr) => RcDoc::text(""), + Expr::FuncDef(def) => RcDoc::text(""), + Expr::Paren { + s0, + inner, + s1, + span: _, + } => RcDoc::text("(").append(inner.to_doc()).append(")"), + + // TODO Check whether parentheses are necessary + Expr::Neg { + minus: _, + s0, + expr, + span: _, + } => RcDoc::text("-").append(expr.to_doc()), + + // TODO Check whether parentheses are necessary + Expr::Not { + not: _, + s0, + expr, + span: _, + } => RcDoc::text("not ").append(expr.to_doc()), + + Expr::BinOp { + left, + s0, + op, + s1, + right, + span: _, + } => RcDoc::text(""), + } + } +} diff --git a/src/pretty/program.rs b/src/pretty/program.rs index 6af1ac4..9d34494 100644 --- a/src/pretty/program.rs +++ b/src/pretty/program.rs @@ -10,7 +10,7 @@ impl Program { expr, s1, span: _, - } => RcDoc::text(""), + } => expr.to_doc(), Program::Module { s0, s1,