Skip to main content

sherlock_io/patterns/
clojure.rs

1use regex::Regex;
2
3pub struct ClojurePatterns {
4    external_patterns: Vec<Regex>,
5    cache_patterns: Vec<Regex>,
6    extensions: Vec<String>,
7}
8
9impl ClojurePatterns {
10    pub fn new() -> Self {
11        let external_patterns = vec![
12            // Leiningen artifacts
13            Regex::new(r"target/").unwrap(),
14            Regex::new(r"\.lein-deps-sum").unwrap(),
15            Regex::new(r"\.lein-repl-history").unwrap(),
16            Regex::new(r"\.lein-failures").unwrap(),
17            Regex::new(r"\.nrepl-port").unwrap(),
18            
19            // Boot artifacts
20            Regex::new(r"\.boot/").unwrap(),
21            Regex::new(r"boot\.properties").unwrap(),
22            
23            // Clojure CLI/deps.edn artifacts
24            Regex::new(r"\.cpcache/").unwrap(),
25            
26            // Shadow-cljs artifacts
27            Regex::new(r"\.shadow-cljs/").unwrap(),
28            Regex::new(r"shadow-cljs\.edn").unwrap(),
29            
30            // Figwheel artifacts
31            Regex::new(r"figwheel_server\.log").unwrap(),
32            Regex::new(r"\.figwheel/").unwrap(),
33            
34            // ClojureScript artifacts
35            Regex::new(r"\.cljs_rhino_repl/").unwrap(),
36            Regex::new(r"out/").unwrap(),
37            Regex::new(r"resources/public/js/").unwrap(),
38            
39            // Java artifacts (common in Clojure projects)
40            Regex::new(r"\.class$").unwrap(),
41            Regex::new(r"\.jar$").unwrap(),
42            
43            // REPL artifacts
44            Regex::new(r"\.rebel_readline_history").unwrap(),
45            
46            // Temporary files
47            Regex::new(r"\.tmp/").unwrap(),
48            Regex::new(r"tmp/").unwrap(),
49            Regex::new(r"\.swp$").unwrap(),
50            Regex::new(r"\.swo$").unwrap(),
51            Regex::new(r"~$").unwrap(),
52        ];
53
54        let cache_patterns = vec![
55            // Leiningen cache
56            Regex::new(r"target/").unwrap(),
57            Regex::new(r"\.lein-").unwrap(),
58            
59            // Boot cache
60            Regex::new(r"\.boot/").unwrap(),
61            
62            // Clojure CLI cache
63            Regex::new(r"\.cpcache/").unwrap(),
64            
65            // Shadow-cljs cache
66            Regex::new(r"\.shadow-cljs/").unwrap(),
67            
68            // Figwheel cache
69            Regex::new(r"\.figwheel/").unwrap(),
70            
71            // ClojureScript cache
72            Regex::new(r"out/").unwrap(),
73        ];
74
75        let extensions = vec![
76            // Clojure source files
77            "clj".to_string(),
78            
79            // ClojureScript files
80            "cljs".to_string(),
81            
82            // Clojure/ClojureScript shared files
83            "cljc".to_string(),
84            
85            // EDN data files
86            "edn".to_string(),
87            
88            // Boot build files
89            "boot".to_string(),
90            
91            // Configuration files
92            "json".to_string(),
93            "yaml".to_string(),
94            "yml".to_string(),
95            
96            // Documentation
97            "md".to_string(),
98            "rst".to_string(),
99            "txt".to_string(),
100            
101            // Web files (for ClojureScript)
102            "html".to_string(),
103            "css".to_string(),
104            "js".to_string(),
105            
106            // Scripts
107            "sh".to_string(),
108            
109            // Java files (for interop)
110            "java".to_string(),
111        ];
112
113        Self {
114            external_patterns,
115            cache_patterns,
116            extensions,
117        }
118    }
119
120    pub fn get_external_patterns(&self) -> &[Regex] {
121        &self.external_patterns
122    }
123
124    pub fn get_cache_patterns(&self) -> &[Regex] {
125        &self.cache_patterns
126    }
127
128    pub fn get_extensions(&self) -> &[String] {
129        &self.extensions
130    }
131
132    pub fn get_script_names() -> Vec<&'static str> {
133        vec![
134            // Leiningen files
135            "project.clj", "profiles.clj",
136            
137            // Clojure CLI files
138            "deps.edn", "bb.edn",
139            
140            // Boot files
141            "build.boot", "boot.properties",
142            
143            // Shadow-cljs files
144            "shadow-cljs.edn",
145            
146            // Figwheel files
147            "figwheel.edn", "figwheel-main.edn",
148            
149            // Babashka files
150            "bb.edn", "babashka.edn",
151            
152            // Core files
153            "core.clj", "main.clj",
154            
155            // Test files
156            "test.clj", "tests.clj",
157            
158            // Build scripts
159            "Makefile", "makefile", "build.sh",
160            
161            // Documentation
162            "README.md", "CHANGELOG.md", "LICENSE",
163            
164            // CI/CD
165            ".github/workflows/clojure.yml",
166            ".travis.yml", "appveyor.yml",
167            "circle.yml", ".circleci/config.yml",
168            
169            // Git
170            ".gitignore", ".gitattributes",
171            
172            // Docker
173            "Dockerfile", "docker-compose.yml",
174            
175            // Environment
176            ".env", ".env.example",
177            
178            // REPL files
179            ".nrepl-port", ".rebel_readline_history",
180            
181            // Common namespace files
182            "user.clj", "dev.clj",
183            
184            // Web development
185            "handler.clj", "routes.clj", "middleware.clj",
186            
187            // Database
188            "db.clj", "schema.clj", "migrations.clj",
189            
190            // Configuration
191            "config.clj", "settings.clj",
192            
193            // Utilities
194            "utils.clj", "helpers.clj", "common.clj",
195            
196            // Examples
197            "example.clj", "examples.clj",
198            
199            // Benchmarks
200            "bench.clj", "benchmarks.clj",
201        ]
202    }
203}