diff --git a/src/pretty.rs b/src/pretty.rs index bede489..b291f7a 100644 --- a/src/pretty.rs +++ b/src/pretty.rs @@ -1,6 +1,7 @@ mod basic; mod call; mod expr; +mod field; mod lit; mod program; mod table_constr; diff --git a/src/pretty/expr.rs b/src/pretty/expr.rs index bc8b2a8..161a8c7 100644 --- a/src/pretty/expr.rs +++ b/src/pretty/expr.rs @@ -27,7 +27,7 @@ impl<'a, D: DocAllocator<'a>> Pretty<'a, D> for Expr { match self { Self::Lit(lit) => lit.pretty(allocator), Self::Call(call) => call.pretty(allocator), - Self::Field(field) => allocator.text(""), + Self::Field(field) => field.pretty(allocator), Self::Var(var) => allocator.text(""), Self::TableConstr(constr) => constr.pretty(allocator), Self::TableDestr(destr) => allocator.text(""), diff --git a/src/pretty/field.rs b/src/pretty/field.rs new file mode 100644 index 0000000..ce5b28f --- /dev/null +++ b/src/pretty/field.rs @@ -0,0 +1,64 @@ +use pretty::{DocAllocator, DocBuilder, Pretty}; + +use crate::ast::Field; + +impl<'a, D: DocAllocator<'a>> Pretty<'a, D> for Field { + fn pretty(self, allocator: &'a D) -> DocBuilder<'a, D> { + match self { + Self::Access { + expr, + s0, + s1, + index, + s2, + span: _, + } => expr + .pretty(allocator) + .append(index.pretty(allocator).brackets()), + Self::Assign { + expr, + s0, + s1, + index, + s2, + s3, + s4, + value, + span: _, + } => expr + .pretty(allocator) + .append(index.pretty(allocator).brackets()) + .append(allocator.text(" = ")) + .append(value.pretty(allocator)), + Self::AccessIdent { + expr, + s0, + s1, + ident, + span: _, + } => expr + .pretty(allocator) + .append(allocator.line_()) + .append(allocator.text(".")) + .append(ident.pretty(allocator)) + .group(), + Self::AssignIdent { + expr, + s0, + s1, + ident, + s2, + s3, + value, + span: _, + } => expr + .pretty(allocator) + .append(allocator.line_()) + .append(allocator.text(".")) + .append(ident.pretty(allocator)) + .append(allocator.text(" = ")) + .append(value.pretty(allocator)) + .group(), + } + } +}