#![allow(missing_docs)]
mod cli;
mod config;
mod counter;
mod display;
mod export;
mod extractors;
mod language;
mod models;
use clap::Parser;
use colored::Colorize;
use std::process;
fn main() {
let mut args = cli::Args::parse();
if args.func_analysis {
args.functions = true;
}
let config = match counter::ScanConfig::from_args(&args) {
Ok(c) => c,
Err(e) => {
eprintln!("{} {}", "[ERROR]".red().bold(), e);
process::exit(1);
}
};
let result = match counter::run_scan(&config) {
Ok(r) => r,
Err(e) => {
eprintln!("{} {}", "[ERROR]".red().bold(), e);
process::exit(1);
}
};
display::display_results(
&result,
&config.target_dir,
args.detailed,
args.binary,
args.tree,
config.warn_size,
config.extract_functions,
);
if args.func_analysis {
display::display_function_analysis(&result, &config.target_dir);
}
if let Some(ref output_file) = args.export
&& let Err(e) = export::export(&result, output_file, config.extract_functions)
{
eprintln!("{} {}", "[ERROR]".red().bold(), e);
process::exit(1);
}
}