extern crate clap;
use clap::{Arg,App};
mod files;
use files::get_files;
mod counting;
use counting::{Stats, Counter, get_counters, get_stats};
fn show_stats(stats: &Stats) {
println!("Total files: {}", stats.files_count);
println!("Total loc: {}", stats.total_loc);
println!("Empty loc: {}", stats.empty_loc);
}
fn show_counters(counters: &Vec<Counter>) {
const SHOW_COUNT: usize = 10;
let len = counters.len();
let max = if len < SHOW_COUNT {
len
}
else{
SHOW_COUNT
};
if max > 0 {
println!("{} biggest files:", max);
}
let mut i = 0;
while i < max {
println!("{position}. {total_loc} loc in {file_name}",
position = (i + 1),
total_loc = counters[i].total_loc,
file_name = counters[i].file);
i += 1;
}
}
fn main() {
println!("Source lines of code program...");
let matches = App::new("Source lines of code")
.version("1.0")
.author("hejack0207 <hejack0207@sina.com>")
.about("Source lines of codes program")
.arg(Arg::with_name("summary")
.short("s")
.long("summary")
.help("Display only summary one line")
.takes_value(false))
.get_matches();
let onlysummary = false;
let mut files: Vec<String> = Vec::new();
get_files(".", &mut files);
let counters = get_counters(files);
let stats = get_stats(&counters);
if ! onlysummary {
show_counters(&counters);
}
show_stats(&stats);
}
#[test]
fn get_files_test() {
let mut files: Vec<String> = Vec::new();
get_files("./test_data/", &mut files);
assert_eq!(2, files.len());
}
#[test]
fn get_counters_test() {
let mut files: Vec<String> = Vec::new();
get_files("./test_data/", &mut files);
let counters = get_counters(files);
assert_eq!(2, counters.len());
}
#[test]
fn get_stats_test(){
let mut files: Vec<String> = Vec::new();
get_files("./test_data/", &mut files);
let counters = get_counters(files);
let stats = get_stats(&counters);
assert_eq!(2, stats.files_count);
assert_eq!(10, stats.total_loc);
assert_eq!(12, stats.empty_loc);
}