Skip to main content

codelens_core/config/
mod.rs

1//! Configuration management.
2
3mod file;
4
5pub use file::load_config_file;
6
7use crate::walker::WalkerConfig;
8
9/// Main configuration structure.
10#[derive(Debug, Clone, Default)]
11pub struct Config {
12    /// Walker configuration.
13    pub walker: WalkerConfig,
14    /// Filter configuration.
15    pub filter: FilterConfig,
16    /// Output configuration.
17    pub output: OutputConfig,
18}
19
20/// Filter configuration.
21#[derive(Debug, Clone, Default)]
22pub struct FilterConfig {
23    /// Glob patterns to exclude.
24    pub excludes: Vec<String>,
25    /// Glob patterns to include.
26    pub includes: Vec<String>,
27    /// Regex patterns to exclude files.
28    pub exclude_files: Vec<String>,
29    /// Regex patterns to include files.
30    pub include_files: Vec<String>,
31    /// Regex patterns to exclude directories.
32    pub exclude_dirs: Vec<String>,
33    /// Target languages (empty = all).
34    pub languages: Vec<String>,
35    /// Minimum line count filter.
36    pub min_lines: Option<usize>,
37    /// Maximum line count filter.
38    pub max_lines: Option<usize>,
39    /// Use smart directory exclusion.
40    pub smart_exclude: bool,
41    /// Include all files (including dependencies).
42    pub include_all: bool,
43}
44
45impl FilterConfig {
46    /// Check if any patterns are configured.
47    pub fn has_patterns(&self) -> bool {
48        !self.excludes.is_empty()
49            || !self.includes.is_empty()
50            || !self.exclude_files.is_empty()
51            || !self.include_files.is_empty()
52            || !self.exclude_dirs.is_empty()
53            || !self.languages.is_empty()
54    }
55}
56
57/// Output configuration.
58#[derive(Debug, Clone)]
59pub struct OutputConfig {
60    /// Output format.
61    pub format: OutputFormatType,
62    /// Output file path.
63    pub file: Option<std::path::PathBuf>,
64    /// Show only summary.
65    pub summary_only: bool,
66    /// Sort order.
67    pub sort_by: SortBy,
68    /// Limit results to top N.
69    pub top_n: Option<usize>,
70    /// Show verbose output.
71    pub verbose: bool,
72    /// Quiet mode (no output).
73    pub quiet: bool,
74    /// Show git information.
75    pub show_git_info: bool,
76}
77
78impl Default for OutputConfig {
79    fn default() -> Self {
80        Self {
81            format: OutputFormatType::Console,
82            file: None,
83            summary_only: false,
84            sort_by: SortBy::Lines,
85            top_n: None,
86            verbose: false,
87            quiet: false,
88            show_git_info: false,
89        }
90    }
91}
92
93/// Output format type.
94#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
95pub enum OutputFormatType {
96    #[default]
97    Console,
98    Json,
99    Csv,
100    Markdown,
101    Html,
102}
103
104/// Sort order for results.
105#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
106pub enum SortBy {
107    #[default]
108    Lines,
109    Files,
110    Code,
111    Name,
112    Size,
113}