Skip to content

Commit edf5287

Browse files
committed
Print summary of garbage
It's not obvious that twiggy prints only first 10 unreachable items by default.
1 parent 48bfe4a commit edf5287

File tree

3 files changed

+23
-3
lines changed

3 files changed

+23
-3
lines changed

β€Žanalyze/analyze.rs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1128,6 +1128,7 @@ pub fn diff(
11281128
#[derive(Debug)]
11291129
struct Garbage {
11301130
items: Vec<ir::Id>,
1131+
limit: usize,
11311132
}
11321133

11331134
impl traits::Emit for Garbage {
@@ -1139,7 +1140,7 @@ impl traits::Emit for Garbage {
11391140
(Align::Left, "Garbage Item".to_string()),
11401141
]);
11411142

1142-
for &id in &self.items {
1143+
for &id in self.items.iter().take(self.limit) {
11431144
let item = &items[id];
11441145
let size = item.size();
11451146
let size_percent = (f64::from(size)) / (f64::from(items.size())) * 100.0;
@@ -1150,6 +1151,22 @@ impl traits::Emit for Garbage {
11501151
]);
11511152
}
11521153

1154+
if self.items.len() > self.limit {
1155+
table.add_row(vec![
1156+
"...".to_string(),
1157+
"...".to_string(),
1158+
format!("... and {} more", self.items.len() - self.limit),
1159+
]);
1160+
}
1161+
1162+
let total_size: u32 = self.items.iter().map(|&id| items[id].size()).sum();
1163+
let total_percent = (f64::from(total_size)) / (f64::from(items.size())) * 100.0;
1164+
table.add_row(vec![
1165+
total_size.to_string(),
1166+
format!("{:.2}%", total_percent),
1167+
"Ξ£".to_string(),
1168+
]);
1169+
11531170
write!(dest, "{}", &table)?;
11541171
Ok(())
11551172
}
@@ -1158,7 +1175,7 @@ impl traits::Emit for Garbage {
11581175
fn emit_json(&self, items: &ir::Items, dest: &mut io::Write) -> Result<(), traits::Error> {
11591176
let mut arr = json::array(dest)?;
11601177

1161-
for &id in &self.items {
1178+
for &id in self.items.iter().take(self.limit) {
11621179
let item = &items[id];
11631180

11641181
let mut obj = arr.object()?;
@@ -1197,12 +1214,12 @@ pub fn garbage(items: &ir::Items, opts: &opt::Garbage) -> Result<Box<traits::Emi
11971214
.collect();
11981215

11991216
unreachable_items.sort_by(|a, b| b.size().cmp(&a.size()));
1200-
unreachable_items.truncate(opts.max_items() as usize);
12011217

12021218
let unreachable_items: Vec<_> = unreachable_items.iter().map(|item| item.id()).collect();
12031219

12041220
let garbage_items = Garbage {
12051221
items: unreachable_items,
1222+
limit: opts.max_items() as usize,
12061223
};
12071224

12081225
Ok(Box::new(garbage_items) as Box<traits::Emit>)

β€Žtwiggy/tests/expectations/garbage

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@
99
1 β”Š 0.51% β”Š func[0]
1010
1 β”Š 0.51% β”Š func[1]
1111
1 β”Š 0.51% β”Š func[2]
12+
43 β”Š 21.83% β”Š Ξ£

β€Žtwiggy/tests/expectations/garbage_top_2

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@
22
───────┼────────┼──────────────────────
33
11 β”Š 5.58% β”Š unusedAddThreeNumbers
44
8 β”Š 4.06% β”Š unusedAddOne
5+
... β”Š ... β”Š ... and 7 more
6+
43 β”Š 21.83% β”Š Ξ£

0 commit comments

Comments
Β (0)