@@ -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,22 @@ 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
+
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
+
1153
1170
write ! ( dest, "{}" , & table) ?;
1154
1171
Ok ( ( ) )
1155
1172
}
@@ -1158,7 +1175,7 @@ impl traits::Emit for Garbage {
1158
1175
fn emit_json ( & self , items : & ir:: Items , dest : & mut io:: Write ) -> Result < ( ) , traits:: Error > {
1159
1176
let mut arr = json:: array ( dest) ?;
1160
1177
1161
- for & id in & self . items {
1178
+ for & id in self . items . iter ( ) . take ( self . limit ) {
1162
1179
let item = & items[ id] ;
1163
1180
1164
1181
let mut obj = arr. object ( ) ?;
@@ -1197,12 +1214,12 @@ pub fn garbage(items: &ir::Items, opts: &opt::Garbage) -> Result<Box<traits::Emi
1197
1214
. collect ( ) ;
1198
1215
1199
1216
unreachable_items. sort_by ( |a, b| b. size ( ) . cmp ( & a. size ( ) ) ) ;
1200
- unreachable_items. truncate ( opts. max_items ( ) as usize ) ;
1201
1217
1202
1218
let unreachable_items: Vec < _ > = unreachable_items. iter ( ) . map ( |item| item. id ( ) ) . collect ( ) ;
1203
1219
1204
1220
let garbage_items = Garbage {
1205
1221
items : unreachable_items,
1222
+ limit : opts. max_items ( ) as usize ,
1206
1223
} ;
1207
1224
1208
1225
Ok ( Box :: new ( garbage_items) as Box < traits:: Emit > )
0 commit comments