Browse Source

refacto languageInfo fmt method

pull/1198/head
o2sh 2 years ago
parent
commit
9b54c9b9b6
No known key found for this signature in database
GPG Key ID: C2414BD0092379D8
  1. 141
      src/info/langs/language.rs

141
src/info/langs/language.rs

@ -62,8 +62,6 @@ impl LanguagesInfo { @@ -62,8 +62,6 @@ impl LanguagesInfo {
impl std::fmt::Display for LanguagesInfo {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
let mut languages_info = String::new();
let pad = self.title().len() + 2;
let color_palette = [
DynColors::Ansi(AnsiColors::Red),
DynColors::Ansi(AnsiColors::Green),
@ -73,43 +71,9 @@ impl std::fmt::Display for LanguagesInfo { @@ -73,43 +71,9 @@ impl std::fmt::Display for LanguagesInfo {
DynColors::Ansi(AnsiColors::Cyan),
];
let languages: Vec<(String, f64, DynColors)> = {
let mut iter = self.languages_with_percentage.iter().enumerate().map(
|(
i,
&LanguageWithPercentage {
language,
percentage,
},
)| {
let circle_color = if self.true_color {
language.get_circle_color()
} else {
color_palette[i % color_palette.len()]
};
(language.to_string(), percentage, circle_color)
},
);
if self.languages_with_percentage.len() > self.number_of_languages {
let mut languages = iter
.by_ref()
.take(self.number_of_languages)
.collect::<Vec<_>>();
let other_perc = iter.fold(0.0, |acc, x| acc + x.1);
languages.push((
"Other".to_string(),
other_perc,
DynColors::Ansi(AnsiColors::White),
));
languages
} else {
iter.collect()
}
};
let language_bar: String = build_language_bar(&languages);
let languages: Vec<(String, f64, DynColors)> = prepare_languages(self, &color_palette);
languages_info.push_str(&language_bar);
let mut languages_info = build_language_bar(&languages);
for (i, (language, perc, circle_color)) in languages.iter().enumerate() {
let formatted_number = format!("{:.*}", 1, perc);
@ -125,16 +89,59 @@ impl std::fmt::Display for LanguagesInfo { @@ -125,16 +89,59 @@ impl std::fmt::Display for LanguagesInfo {
"\n{:<width$}{}",
"",
language_str,
width = pad
)?;
width = self.title().len() + 2
)
.unwrap();
} else {
languages_info.push_str(language_str.trim_end());
}
}
write!(f, "{languages_info}")
}
}
fn prepare_languages(
languages_info: &LanguagesInfo,
color_palette: &[DynColors],
) -> Vec<(String, f64, DynColors)> {
let mut iter = languages_info
.languages_with_percentage
.iter()
.enumerate()
.map(
|(
i,
&LanguageWithPercentage {
language,
percentage,
},
)| {
let circle_color = if languages_info.true_color {
language.get_circle_color()
} else {
color_palette[i % color_palette.len()]
};
(language.to_string(), percentage, circle_color)
},
);
if languages_info.languages_with_percentage.len() > languages_info.number_of_languages {
let mut languages = iter
.by_ref()
.take(languages_info.number_of_languages)
.collect::<Vec<_>>();
let other_perc = iter.fold(0.0, |acc, x| acc + x.1);
languages.push((
"Other".to_string(),
other_perc,
DynColors::Ansi(AnsiColors::White),
));
languages
} else {
iter.collect()
}
}
fn build_language_bar(languages: &[(String, f64, DynColors)]) -> String {
languages
.iter()
@ -286,4 +293,58 @@ mod test { @@ -286,4 +293,58 @@ mod test {
assert_eq!(result, expected_result);
}
#[test]
fn test_prepare_languages() {
let languages_info = LanguagesInfo {
languages_with_percentage: vec![
LanguageWithPercentage {
language: Language::Go,
percentage: 40_f64,
},
LanguageWithPercentage {
language: Language::Erlang,
percentage: 30_f64,
},
LanguageWithPercentage {
language: Language::Java,
percentage: 20_f64,
},
LanguageWithPercentage {
language: Language::Rust,
percentage: 10_f64,
},
],
true_color: false,
number_of_languages: 2,
info_color: DynColors::Ansi(AnsiColors::White),
};
let color_palette = [
DynColors::Ansi(AnsiColors::Red),
DynColors::Ansi(AnsiColors::Green),
];
let result = prepare_languages(&languages_info, &color_palette);
let expected_result = vec![
(
Language::Go.to_string(),
40_f64,
DynColors::Ansi(AnsiColors::Red),
),
(
Language::Erlang.to_string(),
30_f64,
DynColors::Ansi(AnsiColors::Green),
),
(
"Other".to_string(),
30_f64,
DynColors::Ansi(AnsiColors::White),
),
];
assert_eq!(result, expected_result);
}
}

Loading…
Cancel
Save