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}