diff --git a/src/onefetch/language.rs b/src/onefetch/language.rs index f5d92794..289fdf41 100644 --- a/src/onefetch/language.rs +++ b/src/onefetch/language.rs @@ -163,18 +163,36 @@ impl Language { fn get_languages_stat(languages: &tokei::Languages) -> Option> { let mut stats = HashMap::new(); - let sum_language_code: usize = languages.iter().map(|(_, v)| v.code).sum(); + for (language_type, language) in languages.iter() { + let mut code = language.code; - if sum_language_code == 0 { + let has_children = !language.children.is_empty(); + + if has_children { + for reports in language.children.values() { + for stats in reports.iter().map(|r| r.stats.summarise()) { + code += stats.code; + } + } + } + + if code == 0 { + continue; + } + + stats.insert(Language::from(*language_type), code as f64); + } + + let total: f64 = stats.iter().map(|(_, v)| v).sum(); + + if total.abs() < f64::EPSILON { None } else { - for (k, v) in languages.iter() { - let code = v.code as f64; - stats.insert( - Language::from(*k), - (code / sum_language_code as f64) * 100.00, - ); + for (_, val) in stats.iter_mut() { + *val /= total; + *val *= 100_f64; } + Some(stats) } }