use std::time::Instant;
mod cli;
mod fs;
mod lang;
#[global_allocator]
static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc;
fn main() {
let start = Instant::now();
let opt = cli::get_options();
let langs = match fs::visit_path_parallel(&opt.path, &opt.exclude) {
Ok(langs) => langs,
Err(e) => {
eprintln!("Error: {e}");
std::process::exit(1);
}
};
let total_num_files = langs.iter().map(|l| l.num_files).sum();
let total_num_lines = langs.iter().map(|l| l.num_lines).sum();
let end = start.elapsed();
let total_ms = (end.as_secs() * 1000) + end.subsec_millis() as u64;
let out = cli::Output {
languages: langs,
total_num_files,
total_num_lines,
elapsed_ms: opt.timing.then_some(total_ms),
};
cli::write_output(&out, opt.format);
}