Skip to content

Commit fb62e9d

Browse files
committed
added feature to disable info fields from showing in output
1 parent 40ae2bd commit fb62e9d

File tree

1 file changed

+134
-57
lines changed

1 file changed

+134
-57
lines changed

src/main.rs

+134-57
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use std::{
2626
result,
2727
str::FromStr,
2828
};
29+
use strum::{IntoEnumIterator, EnumCount};
2930

3031
type Result<T> = result::Result<T, Error>;
3132

@@ -45,6 +46,7 @@ struct Info {
4546
license: String,
4647
custom_logo: Language,
4748
custom_colors: Vec<String>,
49+
disable_fields: Vec<InfoFields>,
4850
}
4951

5052
impl fmt::Display for Info {
@@ -55,35 +57,43 @@ impl fmt::Display for Info {
5557
None => Color::White,
5658
};
5759

58-
writeln!(
59-
buffer,
60-
"{}{}",
61-
"Project: ".color(color).bold(),
62-
self.project_name
63-
)?;
60+
if !self.disable_fields.contains(&InfoFields::Project) {
61+
writeln!(
62+
buffer,
63+
"{}{}",
64+
"Project: ".color(color).bold(),
65+
self.project_name
66+
)?;
67+
}
6468

65-
writeln!(
66-
buffer,
67-
"{}{}",
68-
"HEAD: ".color(color).bold(),
69-
self.current_commit
70-
)?;
69+
if !self.disable_fields.contains(&InfoFields::HEAD) {
70+
writeln!(
71+
buffer,
72+
"{}{}",
73+
"HEAD: ".color(color).bold(),
74+
self.current_commit
75+
)?;
76+
}
7177

72-
writeln!(
73-
buffer,
74-
"{}{}",
75-
"Version: ".color(color).bold(),
76-
self.version
77-
)?;
78+
if !self.disable_fields.contains(&InfoFields::Version) {
79+
writeln!(
80+
buffer,
81+
"{}{}",
82+
"Version: ".color(color).bold(),
83+
self.version
84+
)?;
85+
}
7886

79-
writeln!(
80-
buffer,
81-
"{}{}",
82-
"Created: ".color(color).bold(),
83-
self.creation_date
84-
)?;
87+
if !self.disable_fields.contains(&InfoFields::Created) {
88+
writeln!(
89+
buffer,
90+
"{}{}",
91+
"Created: ".color(color).bold(),
92+
self.creation_date
93+
)?;
94+
}
8595

86-
if !self.languages.is_empty() {
96+
if !self.disable_fields.contains(&InfoFields::Languages) && !self.languages.is_empty() {
8797
if self.languages.len() > 1 {
8898
let title = "Languages: ";
8999
let pad = " ".repeat(title.len());
@@ -108,7 +118,7 @@ impl fmt::Display for Info {
108118
};
109119
}
110120

111-
if !self.authors.is_empty() {
121+
if !self.disable_fields.contains(&InfoFields::Authors) && !self.authors.is_empty() {
112122
let title = if self.authors.len() > 1 {
113123
"Authors: "
114124
} else {
@@ -124,38 +134,54 @@ impl fmt::Display for Info {
124134
}
125135
}
126136

127-
writeln!(
128-
buffer,
129-
"{}{}",
130-
"Last change: ".color(color).bold(),
131-
self.last_change
132-
)?;
137+
if !self.disable_fields.contains(&InfoFields::LastChange) {
138+
writeln!(
139+
buffer,
140+
"{}{}",
141+
"Last change: ".color(color).bold(),
142+
self.last_change
143+
)?;
144+
}
133145

134-
writeln!(buffer, "{}{}", "Repo: ".color(color).bold(), self.repo)?;
135-
writeln!(
136-
buffer,
137-
"{}{}",
138-
"Commits: ".color(color).bold(),
139-
self.commits
140-
)?;
141-
writeln!(
142-
buffer,
143-
"{}{}",
144-
"Lines of code: ".color(color).bold(),
145-
self.number_of_lines
146-
)?;
147-
writeln!(
148-
buffer,
149-
"{}{}",
150-
"Size: ".color(color).bold(),
151-
self.repo_size
152-
)?;
153-
writeln!(
154-
buffer,
155-
"{}{}",
156-
"License: ".color(color).bold(),
157-
self.license
158-
)?;
146+
if !self.disable_fields.contains(&InfoFields::Repo) {
147+
writeln!(buffer, "{}{}", "Repo: ".color(color).bold(), self.repo)?;
148+
}
149+
150+
if !self.disable_fields.contains(&InfoFields::Commits) {
151+
writeln!(
152+
buffer,
153+
"{}{}",
154+
"Commits: ".color(color).bold(),
155+
self.commits
156+
)?;
157+
}
158+
159+
if !self.disable_fields.contains(&InfoFields::LinesOfCode) {
160+
writeln!(
161+
buffer,
162+
"{}{}",
163+
"Lines of code: ".color(color).bold(),
164+
self.number_of_lines
165+
)?;
166+
}
167+
168+
if !self.disable_fields.contains(&InfoFields::Size) {
169+
writeln!(
170+
buffer,
171+
"{}{}",
172+
"Size: ".color(color).bold(),
173+
self.repo_size
174+
)?;
175+
}
176+
177+
if !self.disable_fields.contains(&InfoFields::License) {
178+
writeln!(
179+
buffer,
180+
"{}{}",
181+
"License: ".color(color).bold(),
182+
self.license
183+
)?;
184+
}
159185

160186
writeln!(
161187
buffer,
@@ -294,6 +320,24 @@ impl fmt::Display for CommitInfo {
294320
}
295321
}
296322

323+
#[derive(PartialEq, Eq, EnumString, EnumCount, EnumIter, IntoStaticStr)]
324+
#[strum(serialize_all = "snake_case")]
325+
enum InfoFields {
326+
Project,
327+
HEAD,
328+
Version,
329+
Created,
330+
Languages,
331+
Authors,
332+
LastChange,
333+
Repo,
334+
Commits,
335+
LinesOfCode,
336+
Size,
337+
License,
338+
UnrecognizedField,
339+
}
340+
297341
#[derive(PartialEq, Eq, Hash, Clone, EnumString)]
298342
#[strum(serialize_all = "lowercase")]
299343
enum Language {
@@ -400,6 +444,26 @@ fn main() -> Result<()> {
400444
.takes_value(true)
401445
.default_value("")
402446
.help("Overrides showing the dominant language ascii logo"))
447+
.arg(Arg::with_name("disable_field")
448+
.long("disable")
449+
.multiple(true)
450+
.takes_value(true)
451+
.case_insensitive(true)
452+
.possible_values(&InfoFields::iter()
453+
.take(InfoFields::count() - 1)
454+
.map(|field| field.into())
455+
.collect::<Vec<&str>>()
456+
.as_slice())
457+
.possible_value("")
458+
.hide_possible_values(true)
459+
.default_value("")
460+
.hide_default_value(true)
461+
.help(&format!("Disable fields to show\nPossible values: {:?}",
462+
&InfoFields::iter()
463+
.take(InfoFields::count() - 1)
464+
.map(|field| field.into())
465+
.collect::<Vec<&str>>()
466+
.as_slice())))
403467
.arg(Arg::with_name("colors")
404468
.short("c")
405469
.long("colors")
@@ -452,6 +516,18 @@ Possible values: [{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}]",
452516
.unwrap()
453517
.to_lowercase())
454518
.unwrap_or(Language::Unknown);
519+
let disable_fields: Vec<InfoFields> = if let Some(values) = matches.values_of("disable_field") {
520+
values
521+
.map(String::from)
522+
.filter_map(|field: String| {
523+
let item = InfoFields::from_str(field.to_lowercase().as_str())
524+
.unwrap_or(InfoFields::UnrecognizedField);
525+
if item == InfoFields::UnrecognizedField { None } else { Some(item) }
526+
})
527+
.collect()
528+
} else {
529+
Vec::new()
530+
};
455531

456532
let tokei_langs = project_languages(&dir);
457533
let languages_stat = get_languages_stat(&tokei_langs).ok_or(Error::SourceCodeNotFound)?;
@@ -489,6 +565,7 @@ Possible values: [{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}]",
489565
license: project_license(&dir)?,
490566
custom_logo,
491567
custom_colors,
568+
disable_fields,
492569
};
493570

494571
println!("{}", info);

0 commit comments

Comments
 (0)