|
|
|
|
@ -163,18 +163,36 @@ impl Language {
@@ -163,18 +163,36 @@ impl Language {
|
|
|
|
|
fn get_languages_stat(languages: &tokei::Languages) -> Option<HashMap<Language, f64>> { |
|
|
|
|
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) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|