From 0a390442d523e091f905709709dd9255a4dcca58 Mon Sep 17 00:00:00 2001 From: o2sh Date: Wed, 14 Oct 2020 22:02:32 +0200 Subject: [PATCH 1/4] takes into account language.children --- src/onefetch/language.rs | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/onefetch/language.rs b/src/onefetch/language.rs index f5d92794..2d292b49 100644 --- a/src/onefetch/language.rs +++ b/src/onefetch/language.rs @@ -168,11 +168,26 @@ impl Language { if sum_language_code == 0 { None } else { - for (k, v) in languages.iter() { - let code = v.code as f64; + for (language_type, language) in languages.iter() { + let mut code = language.code as usize; + + 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(*k), - (code / sum_language_code as f64) * 100.00, + Language::from(*language_type), + (code as f64 / sum_language_code as f64) * 100.00, ); } Some(stats) From e41f33ed077cdfa0ac9f42044d70c65163452047 Mon Sep 17 00:00:00 2001 From: o2sh Date: Wed, 14 Oct 2020 23:09:05 +0200 Subject: [PATCH 2/4] fix calculation of language distribution --- src/onefetch/language.rs | 45 ++++++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/src/onefetch/language.rs b/src/onefetch/language.rs index 2d292b49..32384824 100644 --- a/src/onefetch/language.rs +++ b/src/onefetch/language.rs @@ -163,33 +163,38 @@ 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 { - None - } else { - for (language_type, language) in languages.iter() { - let mut code = language.code as usize; + let has_children = !language.children.is_empty(); - 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 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; - } + if code == 0 { + continue; + } - stats.insert( - Language::from(*language_type), - (code as f64 / sum_language_code as f64) * 100.00, - ); + stats.insert(Language::from(*language_type), code as f64); + } + + let total: f64 = stats.iter().map(|(_, v)| v).sum(); + + let error_margin = f64::EPSILON; + + if (total - 0 as f64).abs() < error_margin { + None + } else { + for (_, val) in stats.iter_mut() { + *val /= total; + *val *= 100_f64; } + Some(stats) } } From 149ede083b7926c0df4b43be72142f343ff2efaa Mon Sep 17 00:00:00 2001 From: o2sh Date: Wed, 14 Oct 2020 23:21:05 +0200 Subject: [PATCH 3/4] small refacto --- src/onefetch/language.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/onefetch/language.rs b/src/onefetch/language.rs index 32384824..a6f4109b 100644 --- a/src/onefetch/language.rs +++ b/src/onefetch/language.rs @@ -185,9 +185,7 @@ impl Language { let total: f64 = stats.iter().map(|(_, v)| v).sum(); - let error_margin = f64::EPSILON; - - if (total - 0 as f64).abs() < error_margin { + if (total - 0 as f64).abs() < f64::EPSILON { None } else { for (_, val) in stats.iter_mut() { From 9bd6e89ceac828d4c66d2fd971ee5cf2cc670105 Mon Sep 17 00:00:00 2001 From: Ossama Hjaji Date: Thu, 15 Oct 2020 15:05:43 +0200 Subject: [PATCH 4/4] refacto total == 0 condition Co-authored-by: Spenser Black --- src/onefetch/language.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/onefetch/language.rs b/src/onefetch/language.rs index a6f4109b..289fdf41 100644 --- a/src/onefetch/language.rs +++ b/src/onefetch/language.rs @@ -185,7 +185,7 @@ impl Language { let total: f64 = stats.iter().map(|(_, v)| v).sum(); - if (total - 0 as f64).abs() < f64::EPSILON { + if total.abs() < f64::EPSILON { None } else { for (_, val) in stats.iter_mut() {