@@ -8,6 +8,7 @@ use colored::*;
8
8
use git2:: Repository ;
9
9
use license:: License ;
10
10
use std:: {
11
+ cmp,
11
12
collections:: HashMap ,
12
13
convert:: From ,
13
14
ffi:: OsStr ,
@@ -58,12 +59,17 @@ impl fmt::Display for Info {
58
59
if !self . languages . is_empty ( ) {
59
60
if self . languages . len ( ) > 1 {
60
61
let title = "Languages: " ;
62
+ let pad = " " . repeat ( title. len ( ) ) ;
61
63
let mut s = String :: from ( "" ) ;
64
+ let mut cnt = 0 ;
62
65
for language in self . languages . iter ( ) {
63
- let formatted_number = format ! ( "{:.*}" , 1 , language. 1 ) ;
64
- s. push_str (
65
- & ( language. 0 . to_string ( ) + " (" + & formatted_number. to_string ( ) + "%) " ) ,
66
- ) ;
66
+ let formatted_number = format ! ( "{:.*}" , 2 , language. 1 ) ;
67
+ if cnt != 0 && cnt % 3 == 0 {
68
+ s = s + & format ! ( "\n {}{} ({} %) " , pad, language. 0 , formatted_number) ;
69
+ } else {
70
+ s = s + & format ! ( "{} ({} %) " , language. 0 , formatted_number) ;
71
+ }
72
+ cnt += 1 ;
67
73
}
68
74
writeln ! ( buffer, "{}{}" , title. color( color) . bold( ) , s) ?;
69
75
} else {
@@ -114,11 +120,17 @@ impl fmt::Display for Info {
114
120
) ?;
115
121
116
122
let logo = self . get_ascii ( ) ;
117
- let mut lines = buffer. lines ( ) ;
123
+ let mut logo_lines = logo. lines ( ) ;
124
+ let mut info_lines = buffer. lines ( ) ;
118
125
let left_pad = logo. lines ( ) . map ( |l| true_len ( l) ) . max ( ) . unwrap_or ( 0 ) ;
119
126
120
- for logo_line in logo. lines ( ) {
121
- let info_line = match lines. next ( ) {
127
+ for _ in 0 ..cmp:: max ( count_newlines ( logo) , count_newlines ( & buffer) ) {
128
+ let logo_line = match logo_lines. next ( ) {
129
+ Some ( line) => line,
130
+ None => "" ,
131
+ } ;
132
+
133
+ let info_line = match info_lines. next ( ) {
122
134
Some ( line) => line,
123
135
None => "" ,
124
136
} ;
@@ -137,6 +149,10 @@ impl fmt::Display for Info {
137
149
}
138
150
}
139
151
152
+ fn count_newlines ( s : & str ) -> usize {
153
+ s. as_bytes ( ) . iter ( ) . filter ( |& & c| c == b'\n' ) . count ( )
154
+ }
155
+
140
156
/// Transforms a string with color format into one with proper
141
157
/// escape characters for color display.
142
158
///
@@ -323,7 +339,7 @@ fn project_license() -> Result<String> {
323
339
. join ( ", " ) ;
324
340
325
341
if output == "" {
326
- Ok ( "Unknown " . into ( ) )
342
+ Ok ( "?? " . into ( ) )
327
343
} else {
328
344
Ok ( output)
329
345
}
0 commit comments