Skip to content

Commit e41f33e

Browse files
committed
fix calculation of language distribution
1 parent 0a39044 commit e41f33e

File tree

1 file changed

+25
-20
lines changed

1 file changed

+25
-20
lines changed

Diff for: src/onefetch/language.rs

+25-20
Original file line numberDiff line numberDiff line change
@@ -163,33 +163,38 @@ impl Language {
163163
fn get_languages_stat(languages: &tokei::Languages) -> Option<HashMap<Language, f64>> {
164164
let mut stats = HashMap::new();
165165

166-
let sum_language_code: usize = languages.iter().map(|(_, v)| v.code).sum();
166+
for (language_type, language) in languages.iter() {
167+
let mut code = language.code;
167168

168-
if sum_language_code == 0 {
169-
None
170-
} else {
171-
for (language_type, language) in languages.iter() {
172-
let mut code = language.code as usize;
169+
let has_children = !language.children.is_empty();
173170

174-
let has_children = !language.children.is_empty();
175-
176-
if has_children {
177-
for reports in language.children.values() {
178-
for stats in reports.iter().map(|r| r.stats.summarise()) {
179-
code += stats.code;
180-
}
171+
if has_children {
172+
for reports in language.children.values() {
173+
for stats in reports.iter().map(|r| r.stats.summarise()) {
174+
code += stats.code;
181175
}
182176
}
177+
}
183178

184-
if code == 0 {
185-
continue;
186-
}
179+
if code == 0 {
180+
continue;
181+
}
187182

188-
stats.insert(
189-
Language::from(*language_type),
190-
(code as f64 / sum_language_code as f64) * 100.00,
191-
);
183+
stats.insert(Language::from(*language_type), code as f64);
184+
}
185+
186+
let total: f64 = stats.iter().map(|(_, v)| v).sum();
187+
188+
let error_margin = f64::EPSILON;
189+
190+
if (total - 0 as f64).abs() < error_margin {
191+
None
192+
} else {
193+
for (_, val) in stats.iter_mut() {
194+
*val /= total;
195+
*val *= 100_f64;
192196
}
197+
193198
Some(stats)
194199
}
195200
}

0 commit comments

Comments
 (0)