@@ -341,20 +341,30 @@ fn print_macro_stats(ecx: &ExtCtxt<'_>) {
341
341
}
342
342
for ( bytes, lines, uses, name, kind) in macro_stats {
343
343
let mut name = ExpnKind :: Macro ( kind, * name) . descr ( ) ;
344
+ let uses_with_underscores = thousands:: usize_with_underscores ( uses) ;
344
345
let avg_lines = lines as f64 / uses as f64 ;
345
346
let avg_bytes = bytes as f64 / uses as f64 ;
346
- if name. len ( ) >= name_w {
347
- // If the name is long, print it on a line by itself, then
348
- // set the name to empty and print things normally, to show the
349
- // stats on the next line.
347
+
348
+ // Ensure the "Macro Name" and "Uses" columns are as compact as possible.
349
+ let mut uses_w = uses_w;
350
+ if name. len ( ) + uses_with_underscores. len ( ) >= name_w + uses_w {
351
+ // The name would abut or overlap the uses value. Print the name
352
+ // on a line by itself, then set the name to empty and print things
353
+ // normally, to show the stats on the next line.
350
354
_ = writeln ! ( s, "{prefix} {:<name_w$}" , name) ;
351
355
name = String :: new ( ) ;
352
- }
356
+ } else if name. len ( ) >= name_w {
357
+ // The name won't abut or overlap with the uses value, but it does
358
+ // overlap with the empty part of the uses column. Shrink the width
359
+ // of the uses column to account for the excess name length.
360
+ uses_w = uses_with_underscores. len ( ) + 1
361
+ } ;
362
+
353
363
_ = writeln ! (
354
364
s,
355
365
"{prefix} {:<name_w$}{:>uses_w$}{:>lines_w$}{:>avg_lines_w$}{:>bytes_w$}{:>avg_bytes_w$}" ,
356
366
name,
357
- thousands :: usize_with_underscores ( uses ) ,
367
+ uses_with_underscores ,
358
368
thousands:: usize_with_underscores( lines) ,
359
369
thousands:: f64p1_with_underscores( avg_lines) ,
360
370
thousands:: usize_with_underscores( bytes) ,
0 commit comments