Skip to main content

sherlock_io/patterns/
mod.rs

1pub mod nodejs;
2pub mod python;
3pub mod rust;
4pub mod java;
5pub mod cpp;
6pub mod web;
7pub mod general;
8pub mod dotnet;
9pub mod go;
10pub mod ruby;
11pub mod php;
12pub mod swift;
13pub mod kotlin;
14pub mod haskell;
15pub mod elixir;
16pub mod julia;
17pub mod lua;
18pub mod zig;
19pub mod clojure;
20pub mod erlang;
21pub mod dart;
22pub mod perl;
23pub mod r;
24pub mod matlab;
25
26use regex::Regex;
27use nodejs::NodejsPatterns;
28use python::PythonPatterns;
29use rust::RustPatterns;
30use java::JavaPatterns;
31use cpp::CppPatterns;
32use web::WebPatterns;
33use general::GeneralPatterns;
34use dotnet::DotnetPatterns;
35use go::GoPatterns;
36use ruby::RubyPatterns;
37use php::PhpPatterns;
38use swift::SwiftPatterns;
39use kotlin::KotlinPatterns;
40use haskell::HaskellPatterns;
41use elixir::ElixirPatterns;
42use julia::JuliaPatterns;
43use lua::LuaPatterns;
44use zig::ZigPatterns;
45use clojure::ClojurePatterns;
46use erlang::ErlangPatterns;
47use dart::DartPatterns;
48use perl::PerlPatterns;
49use r::RPatterns;
50use matlab::MatlabPatterns;
51
52pub struct ExternalPatterns {
53    patterns: Vec<Regex>,
54}
55
56impl ExternalPatterns {
57    pub fn new() -> Self {
58        let mut patterns = Vec::new();
59        
60        // Add patterns from each language/technology
61        let nodejs = NodejsPatterns::new();
62        patterns.extend(nodejs.get_external_patterns().iter().cloned());
63        
64        let python = PythonPatterns::new();
65        patterns.extend(python.get_external_patterns().iter().cloned());
66        
67        let rust = RustPatterns::new();
68        patterns.extend(rust.get_external_patterns().iter().cloned());
69        
70        let java = JavaPatterns::new();
71        patterns.extend(java.get_external_patterns().iter().cloned());
72        
73        let cpp = CppPatterns::new();
74        patterns.extend(cpp.get_external_patterns().iter().cloned());
75        
76        let web = WebPatterns::new();
77        patterns.extend(web.get_external_patterns().iter().cloned());
78        
79        let general = GeneralPatterns::new();
80        patterns.extend(general.get_external_patterns().iter().cloned());
81
82        // Add new ecosystems
83        let dotnet = DotnetPatterns::new();
84        patterns.extend(dotnet.get_external_patterns().iter().cloned());
85        
86        let go = GoPatterns::new();
87        patterns.extend(go.get_external_patterns().iter().cloned());
88        
89        let ruby = RubyPatterns::new();
90        patterns.extend(ruby.get_external_patterns().iter().cloned());
91        
92        let php = PhpPatterns::new();
93        patterns.extend(php.get_external_patterns().iter().cloned());
94        
95        let swift = SwiftPatterns::new();
96        patterns.extend(swift.get_external_patterns().iter().cloned());
97        
98        let kotlin = KotlinPatterns::new();
99        patterns.extend(kotlin.get_external_patterns().iter().cloned());
100        
101        let haskell = HaskellPatterns::new();
102        patterns.extend(haskell.get_external_patterns().iter().cloned());
103        
104        let elixir = ElixirPatterns::new();
105        patterns.extend(elixir.get_external_patterns().iter().cloned());
106        
107        let julia = JuliaPatterns::new();
108        patterns.extend(julia.get_external_patterns().iter().cloned());
109        
110        let lua = LuaPatterns::new();
111        patterns.extend(lua.get_external_patterns().iter().cloned());
112        
113        let zig = ZigPatterns::new();
114        patterns.extend(zig.get_external_patterns().iter().cloned());
115        
116        let clojure = ClojurePatterns::new();
117        patterns.extend(clojure.get_external_patterns().iter().cloned());
118        
119        let erlang = ErlangPatterns::new();
120        patterns.extend(erlang.get_external_patterns().iter().cloned());
121        
122        let dart = DartPatterns::new();
123        patterns.extend(dart.get_external_patterns().iter().cloned());
124        
125        let perl = PerlPatterns::new();
126        patterns.extend(perl.get_external_patterns().iter().cloned());
127        
128        let r = RPatterns::new();
129        patterns.extend(r.get_external_patterns().iter().cloned());
130        
131        let matlab = MatlabPatterns::new();
132        patterns.extend(matlab.get_external_patterns().iter().cloned());
133
134        Self { patterns }
135    }
136
137    pub fn matches(&self, path_str: &str) -> bool {
138        self.patterns.iter().any(|pattern| pattern.is_match(path_str))
139    }
140}
141
142pub struct CodeExtensions {
143    extensions: Vec<String>,
144}
145
146impl CodeExtensions {
147    pub fn new() -> Self {
148        let mut extensions = Vec::new();
149        
150        // Add extensions from each language/technology
151        let nodejs = NodejsPatterns::new();
152        extensions.extend(nodejs.get_extensions().iter().cloned());
153        
154        let python = PythonPatterns::new();
155        extensions.extend(python.get_extensions().iter().cloned());
156        
157        let rust = RustPatterns::new();
158        extensions.extend(rust.get_extensions().iter().cloned());
159        
160        let java = JavaPatterns::new();
161        extensions.extend(java.get_extensions().iter().cloned());
162        
163        let cpp = CppPatterns::new();
164        extensions.extend(cpp.get_extensions().iter().cloned());
165        
166        let web = WebPatterns::new();
167        extensions.extend(web.get_extensions().iter().cloned());
168        
169        let general = GeneralPatterns::new();
170        extensions.extend(general.get_extensions().iter().cloned());
171
172        // Add new ecosystems
173        let dotnet = DotnetPatterns::new();
174        extensions.extend(dotnet.get_extensions().iter().cloned());
175        
176        let go = GoPatterns::new();
177        extensions.extend(go.get_extensions().iter().cloned());
178        
179        let ruby = RubyPatterns::new();
180        extensions.extend(ruby.get_extensions().iter().cloned());
181        
182        let php = PhpPatterns::new();
183        extensions.extend(php.get_extensions().iter().cloned());
184        
185        let swift = SwiftPatterns::new();
186        extensions.extend(swift.get_extensions().iter().cloned());
187        
188        let kotlin = KotlinPatterns::new();
189        extensions.extend(kotlin.get_extensions().iter().cloned());
190        
191        let haskell = HaskellPatterns::new();
192        extensions.extend(haskell.get_extensions().iter().cloned());
193        
194        let elixir = ElixirPatterns::new();
195        extensions.extend(elixir.get_extensions().iter().cloned());
196        
197        let julia = JuliaPatterns::new();
198        extensions.extend(julia.get_extensions().iter().cloned());
199        
200        let lua = LuaPatterns::new();
201        extensions.extend(lua.get_extensions().iter().cloned());
202        
203        let zig = ZigPatterns::new();
204        extensions.extend(zig.get_extensions().iter().cloned());
205        
206        let clojure = ClojurePatterns::new();
207        extensions.extend(clojure.get_extensions().iter().cloned());
208        
209        let erlang = ErlangPatterns::new();
210        extensions.extend(erlang.get_extensions().iter().cloned());
211        
212        let dart = DartPatterns::new();
213        extensions.extend(dart.get_extensions().iter().cloned());
214        
215        let perl = PerlPatterns::new();
216        extensions.extend(perl.get_extensions().iter().cloned());
217        
218        let r = RPatterns::new();
219        extensions.extend(r.get_extensions().iter().cloned());
220        
221        let matlab = MatlabPatterns::new();
222        extensions.extend(matlab.get_extensions().iter().cloned());
223
224        Self { extensions }
225    }
226
227    pub fn contains(&self, extension: &str) -> bool {
228        self.extensions.contains(&extension.to_string())
229    }
230
231    pub fn get_script_names() -> Vec<&'static str> {
232        let mut script_names = Vec::new();
233        
234        script_names.extend(NodejsPatterns::get_script_names());
235        script_names.extend(PythonPatterns::get_script_names());
236        script_names.extend(RustPatterns::get_script_names());
237        script_names.extend(JavaPatterns::get_script_names());
238        script_names.extend(CppPatterns::get_script_names());
239        script_names.extend(WebPatterns::get_script_names());
240        script_names.extend(GeneralPatterns::get_script_names());
241        script_names.extend(DotnetPatterns::get_script_names());
242        script_names.extend(GoPatterns::get_script_names());
243        script_names.extend(RubyPatterns::get_script_names());
244        script_names.extend(PhpPatterns::get_script_names());
245        script_names.extend(SwiftPatterns::get_script_names());
246        script_names.extend(KotlinPatterns::get_script_names());
247        script_names.extend(HaskellPatterns::get_script_names());
248        script_names.extend(ElixirPatterns::get_script_names());
249        script_names.extend(JuliaPatterns::get_script_names());
250        script_names.extend(LuaPatterns::get_script_names());
251        script_names.extend(ZigPatterns::get_script_names());
252        script_names.extend(ClojurePatterns::get_script_names());
253        script_names.extend(ErlangPatterns::get_script_names());
254        script_names.extend(DartPatterns::get_script_names());
255        script_names.extend(PerlPatterns::get_script_names());
256        script_names.extend(RPatterns::get_script_names());
257        script_names.extend(MatlabPatterns::get_script_names());
258        
259        script_names
260    }
261}
262
263