use std::path::PathBuf;
use clap::{Parser, ValueEnum};
use crate::count::Tokenizer;
use crate::report::SortBy;
use crate::units::{Depth, Lines, Tokens};
#[derive(Clone, Copy, Debug, ValueEnum)]
pub enum Format {
Table,
Json,
Md,
Github,
Sarif,
}
#[derive(Parser, Debug)]
#[command(version)]
pub struct Args {
#[arg(default_value = ".")]
pub path: PathBuf,
#[arg(short, long, value_enum, default_value_t = Format::Table)]
pub format: Format,
#[arg(short, long, value_enum, default_value_t = SortBy::Tokens)]
pub sort: SortBy,
#[arg(short = 'n', long, default_value_t = 20)]
pub top: usize,
#[arg(short, long, value_enum, default_value_t = Tokenizer::O200k)]
pub tokenizer: Tokenizer,
#[arg(long)]
pub max_file_tokens: Option<Tokens>,
#[arg(long)]
pub max_file_lines: Option<Lines>,
#[arg(long)]
pub max_fn_lines: Option<Lines>,
#[arg(long)]
pub max_fn_tokens: Option<Tokens>,
#[arg(long)]
pub max_fn_depth: Option<Depth>,
#[arg(long)]
pub dirs: bool,
#[arg(long, value_name = "FILE")]
pub config: Option<PathBuf>,
#[arg(long, value_name = "FILE")]
pub baseline: Option<PathBuf>,
#[arg(long, value_name = "REV")]
pub changed_since: Option<String>,
#[arg(long)]
pub no_functions: bool,
#[arg(short, long)]
pub include: Vec<String>,
#[arg(short, long)]
pub exclude: Vec<String>,
#[arg(long)]
pub hidden: bool,
#[arg(long)]
pub no_default_excludes: bool,
#[arg(long)]
pub fail_on_warn: bool,
#[arg(long, value_name = "PATH")]
pub json_out: Option<PathBuf>,
}