Skip to content

Commit ffbdcc4

Browse files
authored
Merge pull request #137 from epage/fix
fix: Ensure colors are outputted
2 parents 4498eef + 24b04a4 commit ffbdcc4

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

crates/tree/src/lib.rs

+31-4
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+
}

src/str/difference.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ impl fmt::Display for DifferencePredicate {
6767
let palette = crate::Palette::new(f.alternate());
6868
write!(
6969
f,
70-
"{} {} {}",
70+
"{:#} {:#} {:#}",
7171
palette.description("diff"),
7272
palette.expected("original"),
7373
palette.var("var"),

0 commit comments

Comments
 (0)