Pretty print program elements
This commit is contained in:
parent
200b653e61
commit
23796e53a9
3 changed files with 48 additions and 2 deletions
|
|
@ -1 +1,2 @@
|
||||||
|
mod basic;
|
||||||
mod program;
|
mod program;
|
||||||
|
|
|
||||||
38
src/pretty/basic.rs
Normal file
38
src/pretty/basic.rs
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
use pretty::RcDoc;
|
||||||
|
|
||||||
|
use crate::ast::Separated;
|
||||||
|
|
||||||
|
impl<E, S1, S2> Separated<E, S1, S2> {
|
||||||
|
pub fn to_doc<FE, FS1, FS2>(
|
||||||
|
&self,
|
||||||
|
elem_to_doc: FE,
|
||||||
|
separator_to_doc: FS1,
|
||||||
|
trailing_separator_to_doc: FS2,
|
||||||
|
) -> RcDoc
|
||||||
|
where
|
||||||
|
FE: Fn(&E) -> RcDoc,
|
||||||
|
FS1: Fn(&S1) -> RcDoc,
|
||||||
|
FS2: Fn(&S2) -> RcDoc,
|
||||||
|
{
|
||||||
|
match self {
|
||||||
|
Separated::Empty(_) => RcDoc::nil(),
|
||||||
|
Separated::NonEmpty {
|
||||||
|
first_elem,
|
||||||
|
last_elems,
|
||||||
|
trailing,
|
||||||
|
span: _span,
|
||||||
|
} => elem_to_doc(first_elem)
|
||||||
|
.append(RcDoc::concat(
|
||||||
|
last_elems
|
||||||
|
.iter()
|
||||||
|
.map(|(s, e)| separator_to_doc(s).append(elem_to_doc(e))),
|
||||||
|
))
|
||||||
|
.append(
|
||||||
|
trailing
|
||||||
|
.as_ref()
|
||||||
|
.map(trailing_separator_to_doc)
|
||||||
|
.unwrap_or_else(RcDoc::nil),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -10,14 +10,21 @@ impl Program {
|
||||||
expr,
|
expr,
|
||||||
s1,
|
s1,
|
||||||
span: _,
|
span: _,
|
||||||
} => RcDoc::nil(),
|
} => RcDoc::text("<expr>"),
|
||||||
Program::Module {
|
Program::Module {
|
||||||
s0,
|
s0,
|
||||||
s1,
|
s1,
|
||||||
elems,
|
elems,
|
||||||
s2,
|
s2,
|
||||||
span: _,
|
span: _,
|
||||||
} => RcDoc::text("module"),
|
} => RcDoc::text("module")
|
||||||
|
.append(RcDoc::line())
|
||||||
|
.append(RcDoc::line())
|
||||||
|
.append(elems.to_doc(
|
||||||
|
|e| RcDoc::text("<elem>"),
|
||||||
|
|(s0, s1)| RcDoc::text(",").append(RcDoc::line()),
|
||||||
|
|s| RcDoc::text(","),
|
||||||
|
)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue