Skip to main content

sniff/
config.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4pub struct ThresholdsConfig {
5    #[serde(default = "default_max_loc")]
6    pub max_loc: usize,
7    #[serde(default = "default_max_nesting")]
8    pub max_nesting: usize,
9    #[serde(default = "default_max_params")]
10    pub max_params: usize,
11    #[serde(default = "default_max_methods_per_file")]
12    pub max_methods_per_file: usize,
13}
14
15impl Default for ThresholdsConfig {
16    fn default() -> Self {
17        ThresholdsConfig {
18            max_loc: default_max_loc(),
19            max_nesting: default_max_nesting(),
20            max_params: default_max_params(),
21            max_methods_per_file: default_max_methods_per_file(),
22        }
23    }
24}
25
26fn default_max_loc() -> usize {
27    100
28}
29fn default_max_nesting() -> usize {
30    6
31}
32fn default_max_params() -> usize {
33    6
34}
35fn default_max_methods_per_file() -> usize {
36    20
37}
38
39#[derive(Debug, Clone, Default, Serialize, Deserialize)]
40pub struct LLMConfig {
41    #[serde(default)]
42    pub system_context: String,
43    #[serde(default)]
44    pub endpoint: String,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct ResolvedConfig {
49    #[serde(default)]
50    pub thresholds: ThresholdsConfig,
51    #[serde(default = "default_ignore")]
52    pub ignore: Vec<String>,
53    #[serde(default = "default_generic_names")]
54    pub generic_names: Vec<String>,
55    #[serde(default = "default_generic_file_names")]
56    pub generic_file_names: Vec<String>,
57    #[serde(default = "default_model")]
58    pub model: String,
59    #[serde(default)]
60    pub llm: LLMConfig,
61}
62
63impl Default for ResolvedConfig {
64    fn default() -> Self {
65        ResolvedConfig {
66            thresholds: ThresholdsConfig::default(),
67            ignore: default_ignore(),
68            generic_names: default_generic_names(),
69            generic_file_names: default_generic_file_names(),
70            model: default_model(),
71            llm: LLMConfig::default(),
72        }
73    }
74}
75
76fn default_ignore() -> Vec<String> {
77    vec![
78        "node_modules".into(),
79        ".next".into(),
80        ".turbo".into(),
81        ".cache".into(),
82        "dist".into(),
83        "build".into(),
84        "out".into(),
85        "output".into(),
86        "screenshots".into(),
87        ".git".into(),
88        "coverage".into(),
89        "__pycache__".into(),
90        ".venv".into(),
91        "vendor".into(),
92        "target".into(),
93    ]
94}
95
96fn default_generic_names() -> Vec<String> {
97    vec![
98        "handle*".into(),
99        "process*".into(),
100        "do*".into(),
101        "manage*".into(),
102        "get*".into(),
103        "set*".into(),
104        "update*".into(),
105        "data".into(),
106        "temp".into(),
107        "result".into(),
108        "info".into(),
109        "stuff".into(),
110        "misc".into(),
111    ]
112}
113
114fn default_generic_file_names() -> Vec<String> {
115    vec![
116        "utils".into(),
117        "helpers".into(),
118        "misc".into(),
119        "common".into(),
120        "shared".into(),
121        "tools".into(),
122    ]
123}
124
125fn default_model() -> String {
126    String::new()
127}