Skip to content

Commit 24b04a4

Browse files
committed
fix(tree): Ensure alternate is passed down
1 parent 2cfb8f7 commit 24b04a4

File tree

1 file changed

+31
-4
lines changed

1 file changed

+31
-4
lines changed

crates/tree/src/lib.rs

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,26 +24,29 @@ impl<'a> CaseTreeExt for reflection::Case<'a> {
2424
}
2525
}
2626

27-
type CaseTreeInner = termtree::Tree<Box<dyn fmt::Display + Send + Sync>>;
27+
type CaseTreeInner = termtree::Tree<Displayable>;
2828

2929
fn convert(case: &reflection::Case<'_>) -> CaseTreeInner {
3030
let mut leaves: Vec<CaseTreeInner> = vec![];
3131

3232
leaves.extend(case.predicate().iter().flat_map(|pred| {
3333
pred.parameters().map(|item| {
34-
let root: Box<dyn fmt::Display + Send + Sync> = Box::new(item.to_string());
34+
let root = Displayable::new(&item);
3535
termtree::Tree::new(root).with_multiline(true)
3636
})
3737
}));
3838

3939
leaves.extend(case.products().map(|item| {
40-
let root: Box<dyn fmt::Display + Send + Sync> = Box::new(item.to_string());
40+
let root = Displayable::new(item);
4141
termtree::Tree::new(root).with_multiline(true)
4242
}));
4343

4444
leaves.extend(case.children().map(convert));
4545

46-
let root = Box::new(case.predicate().map(|p| p.to_string()).unwrap_or_default());
46+
let root = case
47+
.predicate()
48+
.map(|p| Displayable::new(&p))
49+
.unwrap_or_default();
4750
CaseTreeInner::new(root).with_leaves(leaves)
4851
}
4952

@@ -56,3 +59,27 @@ impl fmt::Display for CaseTree {
5659
self.0.fmt(f)
5760
}
5861
}
62+
63+
#[derive(Default)]
64+
struct Displayable {
65+
primary: String,
66+
alternate: String,
67+
}
68+
69+
impl Displayable {
70+
fn new(display: &dyn std::fmt::Display) -> Self {
71+
let primary = format!("{}", display);
72+
let alternate = format!("{:#}", display);
73+
Self { primary, alternate }
74+
}
75+
}
76+
77+
impl fmt::Display for Displayable {
78+
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
79+
if f.alternate() {
80+
self.alternate.fmt(f)
81+
} else {
82+
self.primary.fmt(f)
83+
}
84+
}
85+
}

0 commit comments

Comments
 (0)