Skip to content

Commit 8159b34

Browse files
committed
add cli flag to set maximum number of languages to be shown #863
1 parent 4958f48 commit 8159b34

File tree

3 files changed

+71
-8
lines changed

3 files changed

+71
-8
lines changed

src/cli.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,12 @@ pub struct Config {
8585
/// Hides the color palette
8686
#[arg(long)]
8787
pub no_color_palette: bool,
88-
/// NUM of authors to be shown
89-
#[arg(long, short, default_value_t = 3usize, value_name = "NUM")]
88+
/// Maximum NUM of authors to be shown
89+
#[arg(long, default_value_t = 3usize, value_name = "NUM")]
9090
pub number_of_authors: usize,
91+
/// Maximum NUM of languages to be shown
92+
#[arg(long, default_value_t = 6usize, value_name = "NUM")]
93+
pub number_of_languages: usize,
9194
/// Ignore all files & directories matching EXCLUDE
9295
#[arg(long, short, num_args = 1.., value_hint = ValueHint::AnyPath)]
9396
pub exclude: Vec<PathBuf>,
@@ -166,6 +169,7 @@ impl Default for Config {
166169
no_merges: Default::default(),
167170
no_color_palette: Default::default(),
168171
number_of_authors: 3,
172+
number_of_languages: 6,
169173
exclude: Default::default(),
170174
no_bots: Default::default(),
171175
languages: Default::default(),

src/info/langs/language.rs

Lines changed: 59 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,18 @@ pub struct LanguageWithPercentage {
1414

1515
pub struct LanguagesInfo {
1616
pub languages_with_percentage: Vec<LanguageWithPercentage>,
17-
pub true_color: bool,
18-
pub info_color: DynColors,
17+
true_color: bool,
18+
number_of_languages: usize,
19+
info_color: DynColors,
1920
}
2021

2122
impl LanguagesInfo {
22-
pub fn new(languages: Vec<(Language, f64)>, true_color: bool, info_color: DynColors) -> Self {
23+
pub fn new(
24+
languages: Vec<(Language, f64)>,
25+
true_color: bool,
26+
number_of_languages: usize,
27+
info_color: DynColors,
28+
) -> Self {
2329
let languages_with_percentage = languages
2430
.into_iter()
2531
.map(|(language, percentage)| LanguageWithPercentage {
@@ -30,6 +36,7 @@ impl LanguagesInfo {
3036
Self {
3137
languages_with_percentage,
3238
true_color,
39+
number_of_languages,
3340
info_color,
3441
}
3542
}
@@ -65,8 +72,11 @@ impl std::fmt::Display for LanguagesInfo {
6572
(language.to_string(), percentage, circle_color)
6673
},
6774
);
68-
if self.languages_with_percentage.len() > 6 {
69-
let mut languages = iter.by_ref().take(6).collect::<Vec<_>>();
75+
if self.languages_with_percentage.len() > self.number_of_languages {
76+
let mut languages = iter
77+
.by_ref()
78+
.take(self.number_of_languages)
79+
.collect::<Vec<_>>();
7080
let other_perc = iter.fold(0.0, |acc, x| acc + x.1);
7181
languages.push((
7282
"Other".to_string(),
@@ -144,6 +154,7 @@ mod test {
144154
percentage: 100_f64,
145155
}],
146156
true_color: false,
157+
number_of_languages: 6,
147158
info_color: DynColors::Ansi(AnsiColors::White),
148159
};
149160
let expected_languages_info = format!(
@@ -158,4 +169,47 @@ mod test {
158169

159170
assert_eq!(languages_info.value(), expected_languages_info);
160171
}
172+
173+
#[test]
174+
fn should_display_correct_number_of_languages() {
175+
let languages_info = LanguagesInfo {
176+
languages_with_percentage: vec![
177+
LanguageWithPercentage {
178+
language: Language::Go,
179+
percentage: 30_f64,
180+
},
181+
LanguageWithPercentage {
182+
language: Language::Erlang,
183+
percentage: 40_f64,
184+
},
185+
LanguageWithPercentage {
186+
language: Language::Java,
187+
percentage: 20_f64,
188+
},
189+
LanguageWithPercentage {
190+
language: Language::Rust,
191+
percentage: 10_f64,
192+
},
193+
],
194+
true_color: false,
195+
number_of_languages: 2,
196+
info_color: DynColors::Ansi(AnsiColors::White),
197+
};
198+
199+
assert!(languages_info.value().contains(
200+
&"Go (30.0 %)"
201+
.color(DynColors::Ansi(AnsiColors::White))
202+
.to_string()
203+
));
204+
assert!(languages_info.value().contains(
205+
&"Erlang (40.0 %)"
206+
.color(DynColors::Ansi(AnsiColors::White))
207+
.to_string()
208+
));
209+
assert!(languages_info.value().contains(
210+
&"Other (30.0 %)"
211+
.color(DynColors::Ansi(AnsiColors::White))
212+
.to_string()
213+
));
214+
}
161215
}

src/info/mod.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,12 @@ impl Info {
258258
config.email,
259259
)?;
260260
let created = CreatedInfo::new(config.iso_time, &commits);
261-
let languages = LanguagesInfo::new(languages, true_color, text_colors.info);
261+
let languages = LanguagesInfo::new(
262+
languages,
263+
true_color,
264+
config.number_of_languages,
265+
text_colors.info,
266+
);
262267
let dependencies = DependenciesInfo::new(manifest.as_ref());
263268
let authors = AuthorsInfo::new(text_colors.info, &mut commits);
264269
let last_change = LastChangeInfo::new(config.iso_time, &commits);

0 commit comments

Comments
 (0)