mod file;
pub use file::load_config_file;
use crate::walker::WalkerConfig;
#[derive(Debug, Clone, Default)]
pub struct Config {
pub walker: WalkerConfig,
pub filter: FilterConfig,
pub output: OutputConfig,
}
#[derive(Debug, Clone, Default)]
pub struct FilterConfig {
pub excludes: Vec<String>,
pub includes: Vec<String>,
pub exclude_files: Vec<String>,
pub include_files: Vec<String>,
pub exclude_dirs: Vec<String>,
pub languages: Vec<String>,
pub min_lines: Option<usize>,
pub max_lines: Option<usize>,
pub smart_exclude: bool,
pub include_all: bool,
}
impl FilterConfig {
pub fn has_patterns(&self) -> bool {
!self.excludes.is_empty()
|| !self.includes.is_empty()
|| !self.exclude_files.is_empty()
|| !self.include_files.is_empty()
|| !self.exclude_dirs.is_empty()
|| !self.languages.is_empty()
}
}
#[derive(Debug, Clone)]
pub struct OutputConfig {
pub format: OutputFormatType,
pub file: Option<std::path::PathBuf>,
pub summary_only: bool,
pub sort_by: SortBy,
pub top_n: Option<usize>,
pub verbose: bool,
pub quiet: bool,
pub show_git_info: bool,
}
impl Default for OutputConfig {
fn default() -> Self {
Self {
format: OutputFormatType::Console,
file: None,
summary_only: false,
sort_by: SortBy::Lines,
top_n: None,
verbose: false,
quiet: false,
show_git_info: false,
}
}
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub enum OutputFormatType {
#[default]
Console,
Json,
Csv,
Markdown,
Html,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub enum SortBy {
#[default]
Lines,
Files,
Code,
Name,
Size,
}