@@ -61,7 +61,9 @@ impl fmt::Display for Info {
61
61
let mut s = String :: from ( "" ) ;
62
62
for language in self . languages . iter ( ) {
63
63
let formatted_number = format ! ( "{:.*}" , 1 , language. 1 ) ;
64
- s. push_str ( & ( language. 0 . to_string ( ) + " " + & formatted_number. to_string ( ) + "% " ) ) ;
64
+ s. push_str (
65
+ & ( language. 0 . to_string ( ) + " (" + & formatted_number. to_string ( ) + "%) " ) ,
66
+ ) ;
65
67
}
66
68
writeln ! ( buffer, "{}{}" , title. color( color) . bold( ) , s) ?;
67
69
} else {
@@ -146,10 +148,10 @@ impl fmt::Display for Info {
146
148
/// which comes from the added escape characters.
147
149
fn colorize_str ( line : & str , colors : Vec < Color > ) -> ( String , usize ) {
148
150
// Extract colors from string coded with {n}
149
- let mut colors_in_str: Vec < Color > = line. split ( "{" ) . fold ( Vec :: new ( ) , |mut acc, s| {
151
+ let mut colors_in_str: Vec < Color > = line. split ( '{' ) . fold ( Vec :: new ( ) , |mut acc, s| {
150
152
if s. len ( ) > 2 {
151
153
let i = s. chars ( ) . nth ( 0 ) . unwrap_or ( '0' ) . to_digit ( 10 ) . unwrap_or ( 0 ) ;
152
- acc. push ( * colors. iter ( ) . nth ( i as usize ) . unwrap_or ( & Color :: White ) ) ;
154
+ acc. push ( * colors. get ( i as usize ) . unwrap_or ( & Color :: White ) ) ;
153
155
}
154
156
acc
155
157
} ) ;
@@ -163,7 +165,7 @@ fn colorize_str(line: &str, colors: Vec<Color>) -> (String, usize) {
163
165
164
166
let mut colors_iter = colors_in_str. iter ( ) ;
165
167
166
- let out_str = line. split ( "{" ) . fold ( String :: new ( ) , |mut acc, s| {
168
+ let out_str = line. split ( '{' ) . fold ( String :: new ( ) , |mut acc, s| {
167
169
if s. len ( ) > 2 {
168
170
let s: String = s. chars ( ) . skip ( 2 ) . collect ( ) ;
169
171
let c = match colors_iter. next ( ) {
@@ -180,7 +182,7 @@ fn colorize_str(line: &str, colors: Vec<Color>) -> (String, usize) {
180
182
/// Returns the true length of a string after substracting the {n}
181
183
/// color declarations.
182
184
fn true_len ( line : & str ) -> usize {
183
- line. split ( "{" )
185
+ line. split ( '{' )
184
186
. fold ( String :: new ( ) , |mut acc, s| {
185
187
if s. len ( ) > 2 {
186
188
acc. push_str ( & s. chars ( ) . skip ( 2 ) . collect :: < String > ( ) ) ;
@@ -245,7 +247,7 @@ fn main() -> Result<()> {
245
247
}
246
248
247
249
let tokei_langs = project_languages ( ) ;
248
- let languages_stat = get_languages_stat ( & tokei_langs) ;
250
+ let languages_stat = get_languages_stat ( & tokei_langs) . ok_or ( Error :: SourceCodeNotFound ) ? ;
249
251
let mut languages_stat_vec: Vec < ( _ , _ ) > = languages_stat. into_iter ( ) . collect ( ) ;
250
252
languages_stat_vec. sort_by ( |a, b| a. 1 . partial_cmp ( & b. 1 ) . unwrap ( ) . reverse ( ) ) ;
251
253
let dominant_language = languages_stat_vec[ 0 ] . 0 . clone ( ) ;
@@ -278,22 +280,23 @@ fn project_languages() -> tokei::Languages {
278
280
languages
279
281
}
280
282
281
- fn get_languages_stat ( languages : & tokei:: Languages ) -> HashMap < Language , f64 > {
283
+ fn get_languages_stat ( languages : & tokei:: Languages ) -> Option < HashMap < Language , f64 > > {
282
284
let mut stats = HashMap :: new ( ) ;
283
285
284
- let sum_language_code: usize = languages
285
- . remove_empty ( )
286
- . iter ( )
287
- . map ( |( _, v) | v. code ) . sum ( ) ;
288
-
289
- for ( k, v) in languages. remove_empty ( ) . iter ( ) {
290
- let code = v. code as f64 ;
291
- stats. insert (
292
- Language :: from ( * * k) ,
293
- ( code / sum_language_code as f64 ) * 100.00 ,
294
- ) ;
286
+ let sum_language_code: usize = languages. remove_empty ( ) . iter ( ) . map ( |( _, v) | v. code ) . sum ( ) ;
287
+
288
+ if sum_language_code == 0 {
289
+ None
290
+ } else {
291
+ for ( k, v) in languages. remove_empty ( ) . iter ( ) {
292
+ let code = v. code as f64 ;
293
+ stats. insert (
294
+ Language :: from ( * * k) ,
295
+ ( code / sum_language_code as f64 ) * 100.00 ,
296
+ ) ;
297
+ }
298
+ Some ( stats)
295
299
}
296
- stats
297
300
}
298
301
299
302
fn project_license ( ) -> Result < String > {
0 commit comments