@@ -1128,6 +1128,7 @@ pub fn diff(
1128
1128
#[ derive( Debug ) ]
1129
1129
struct Garbage {
1130
1130
items : Vec < ir:: Id > ,
1131
+ limit : usize ,
1131
1132
}
1132
1133
1133
1134
impl traits:: Emit for Garbage {
@@ -1139,7 +1140,7 @@ impl traits::Emit for Garbage {
1139
1140
( Align :: Left , "Garbage Item" . to_string( ) ) ,
1140
1141
] ) ;
1141
1142
1142
- for & id in & self . items {
1143
+ for & id in self . items . iter ( ) . take ( self . limit ) {
1143
1144
let item = & items[ id] ;
1144
1145
let size = item. size ( ) ;
1145
1146
let size_percent = ( f64:: from ( size) ) / ( f64:: from ( items. size ( ) ) ) * 100.0 ;
@@ -1150,6 +1151,20 @@ impl traits::Emit for Garbage {
1150
1151
] ) ;
1151
1152
}
1152
1153
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
+ let total_size: u32 = self . items . iter ( ) . map ( |& id| items[ id] . size ( ) ) . sum ( ) ;
1162
+ let total_percent = ( f64:: from ( total_size) ) / ( f64:: from ( items. size ( ) ) ) * 100.0 ;
1163
+ table. add_row ( vec ! [
1164
+ total_size. to_string( ) ,
1165
+ format!( "{:.2}%" , total_percent) ,
1166
+ "Ξ£" . to_string( ) ,
1167
+ ] ) ;
1153
1168
write ! ( dest, "{}" , & table) ?;
1154
1169
Ok ( ( ) )
1155
1170
}
@@ -1158,7 +1173,7 @@ impl traits::Emit for Garbage {
1158
1173
fn emit_json ( & self , items : & ir:: Items , dest : & mut io:: Write ) -> Result < ( ) , traits:: Error > {
1159
1174
let mut arr = json:: array ( dest) ?;
1160
1175
1161
- for & id in & self . items {
1176
+ for & id in self . items . iter ( ) . take ( self . limit ) {
1162
1177
let item = & items[ id] ;
1163
1178
1164
1179
let mut obj = arr. object ( ) ?;
@@ -1197,12 +1212,12 @@ pub fn garbage(items: &ir::Items, opts: &opt::Garbage) -> Result<Box<traits::Emi
1197
1212
. collect ( ) ;
1198
1213
1199
1214
unreachable_items. sort_by ( |a, b| b. size ( ) . cmp ( & a. size ( ) ) ) ;
1200
- unreachable_items. truncate ( opts. max_items ( ) as usize ) ;
1201
1215
1202
1216
let unreachable_items: Vec < _ > = unreachable_items. iter ( ) . map ( |item| item. id ( ) ) . collect ( ) ;
1203
1217
1204
1218
let garbage_items = Garbage {
1205
1219
items : unreachable_items,
1220
+ limit : opts. max_items ( ) as usize ,
1206
1221
} ;
1207
1222
1208
1223
Ok ( Box :: new ( garbage_items) as Box < traits:: Emit > )
0 commit comments