use anyhow::Result;
use clap::Parser;
mod check;
mod parallel;
#[derive(Parser)]
#[command(name = "similarity-py")]
#[command(about = "Python code similarity analyzer")]
#[command(version)]
struct Cli {
#[arg(default_value = ".")]
paths: Vec<String>,
#[arg(short, long)]
print: bool,
#[arg(short, long, default_value = "0.85")]
threshold: f64,
#[arg(short, long, value_delimiter = ',')]
extensions: Option<Vec<String>>,
#[arg(short, long, default_value = "3")]
min_lines: Option<u32>,
#[arg(long)]
min_tokens: Option<u32>,
#[arg(short, long, default_value = "0.3")]
rename_cost: f64,
#[arg(long)]
no_size_penalty: bool,
#[arg(long)]
filter_function: Option<String>,
#[arg(long)]
filter_function_body: Option<String>,
#[arg(long)]
no_fast: bool,
}
fn main() -> Result<()> {
let cli = Cli::parse();
println!("Analyzing Python code similarity...");
check::check_paths(
cli.paths,
cli.threshold,
cli.rename_cost,
cli.extensions.as_ref(),
cli.min_lines.unwrap_or(3),
cli.min_tokens,
cli.no_size_penalty,
cli.print,
!cli.no_fast,
cli.filter_function.as_ref(),
cli.filter_function_body.as_ref(),
)?;
Ok(())
}