diff --git a/src/cli.rs b/src/cli.rs index e80dda3..f8f43ab 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -20,6 +20,7 @@ pub struct Cli<'a> { pub print_languages: bool, pub sort: Option, pub types: Option>, + pub compact: bool, pub number_format: num_format::CustomFormat, pub verbose: u64, } @@ -83,6 +84,8 @@ impl<'a> Cli<'a> { (@arg types: -t --type +takes_value "Filters output by language type, seperated by a comma. i.e. -t=Rust,Markdown") + (@arg compact: -C --compact + "Do not print statistics about embedded languages.") (@arg num_format_style: -n --("num-format") possible_values(NumberFormatStyle::all()) conflicts_with[output] @@ -106,6 +109,7 @@ impl<'a> Cli<'a> { let no_ignore_vcs = matches.is_present("no_ignore_vcs"); let print_languages = matches.is_present("languages"); let verbose = matches.occurrences_of("verbose"); + let compact = matches.is_present("compact"); let types = matches.value_of("types").map(|e| { e.split(',') .map(|t| t.parse::()) @@ -151,6 +155,7 @@ impl<'a> Cli<'a> { types, verbose, number_format, + compact, }; debug!("CLI Config: {:#?}", cli); diff --git a/src/cli_utils.rs b/src/cli_utils.rs index e6d3559..3e52ec8 100644 --- a/src/cli_utils.rs +++ b/src/cli_utils.rs @@ -293,18 +293,18 @@ impl Printer { Ok(()) } - pub fn print_results<'a, I>(&mut self, languages: I) -> io::Result<()> + pub fn print_results<'a, I>(&mut self, languages: I, compact: bool) -> io::Result<()> where I: Iterator, { let (a, b): (Vec<_>, Vec<_>) = languages .filter(|(_, v)| !v.is_empty()) - .partition(|(_, l)| l.children.is_empty()); + .partition(|(_, l)| compact || l.children.is_empty()); let mut first = true; for languages in &[&a, &b] { for &(name, language) in *languages { - let has_children = !language.children.is_empty(); + let has_children = !(compact || language.children.is_empty()); if first { first = false; } else if has_children || self.list_files { diff --git a/src/main.rs b/src/main.rs index ffa3911..f30da3c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -86,9 +86,9 @@ fn main() -> Result<(), Box> { Sort::Lines => languages.sort_by(|a, b| b.1.lines().cmp(&a.1.lines())), } - printer.print_results(languages.into_iter())? + printer.print_results(languages.into_iter(), cli.compact)? } else { - printer.print_results(languages.iter())? + printer.print_results(languages.iter(), cli.compact)? } printer.print_total(languages)?;