Skip to main content

sherlock_io/patterns/
rust.rs

1use regex::Regex;
2
3pub struct RustPatterns {
4    external_patterns: Vec<Regex>,
5    cache_patterns: Vec<Regex>,
6    extensions: Vec<String>,
7}
8
9impl RustPatterns {
10    pub fn new() -> Self {
11        let external_patterns = vec![
12            // Build artifacts
13            Regex::new(r"target/").unwrap(),
14            Regex::new(r"Cargo\.lock").unwrap(),
15            
16            // Cargo directories
17            Regex::new(r"\.cargo/").unwrap(),
18            Regex::new(r"registry/").unwrap(),
19            Regex::new(r"git/").unwrap(),
20            
21            // Dependencies and caches
22            Regex::new(r"deps/").unwrap(),
23            Regex::new(r"incremental/").unwrap(),
24            Regex::new(r"fingerprint/").unwrap(),
25            
26            // Cross-compilation targets
27            Regex::new(r"target/debug/").unwrap(),
28            Regex::new(r"target/release/").unwrap(),
29            Regex::new(r"target/x86_64-").unwrap(),
30            Regex::new(r"target/aarch64-").unwrap(),
31            Regex::new(r"target/armv7-").unwrap(),
32            Regex::new(r"target/i686-").unwrap(),
33            Regex::new(r"target/wasm32-").unwrap(),
34            Regex::new(r"target/thumbv").unwrap(),
35            
36            // Platform-specific builds
37            Regex::new(r"target/.*-linux-").unwrap(),
38            Regex::new(r"target/.*-windows-").unwrap(),
39            Regex::new(r"target/.*-darwin").unwrap(),
40            Regex::new(r"target/.*-android").unwrap(),
41            Regex::new(r"target/.*-ios").unwrap(),
42            
43            // Generated binaries
44            Regex::new(r"\.exe$").unwrap(),
45            Regex::new(r"\.dll$").unwrap(),
46            Regex::new(r"\.so$").unwrap(),
47            Regex::new(r"\.dylib$").unwrap(),
48            Regex::new(r"\.a$").unwrap(),
49            Regex::new(r"\.lib$").unwrap(),
50            Regex::new(r"\.rlib$").unwrap(),
51            Regex::new(r"\.pdb$").unwrap(),
52        ];
53
54        let cache_patterns = vec![
55            // Build caches
56            Regex::new(r"target/debug").unwrap(),
57            Regex::new(r"target/release").unwrap(),
58            Regex::new(r"target/doc").unwrap(),
59            Regex::new(r"target/tmp").unwrap(),
60            Regex::new(r"target/\.rustc_info\.json").unwrap(),
61            
62            // Cargo caches
63            Regex::new(r"\.cargo/bin/").unwrap(),
64            Regex::new(r"\.cargo/registry/").unwrap(),
65            Regex::new(r"\.cargo/git/").unwrap(),
66            Regex::new(r"\.cargo/\.crates\.toml").unwrap(),
67            Regex::new(r"\.cargo/\.crates2\.json").unwrap(),
68            
69            // Toolchain caches
70            Regex::new(r"\.rustup/").unwrap(),
71            Regex::new(r"\.rustc_info\.json").unwrap(),
72            
73            // IDE and editor caches
74            Regex::new(r"\.vscode/").unwrap(),
75            Regex::new(r"\.idea/").unwrap(),
76            Regex::new(r"rust-project\.json").unwrap(),
77            
78            // Testing and benchmarking
79            Regex::new(r"target/criterion/").unwrap(),
80            Regex::new(r"target/coverage/").unwrap(),
81            Regex::new(r"target/tarpaulin/").unwrap(),
82            
83            // Documentation
84            Regex::new(r"target/doc/").unwrap(),
85            Regex::new(r"target/package/").unwrap(),
86            
87            // Profiling and debugging
88            Regex::new(r"target/profdata/").unwrap(),
89            Regex::new(r"target/llvm-cov/").unwrap(),
90            Regex::new(r"flamegraph\.svg").unwrap(),
91            Regex::new(r"perf\.data").unwrap(),
92            
93            // WebAssembly specific
94            Regex::new(r"pkg/").unwrap(),
95            Regex::new(r"wasm-pack\.log").unwrap(),
96            
97            // Embedded development
98            Regex::new(r"\.gdb_history").unwrap(),
99            Regex::new(r"openocd\.log").unwrap(),
100            
101            // Temporary files
102            Regex::new(r"\.tmp").unwrap(),
103            Regex::new(r"\.swp").unwrap(),
104            Regex::new(r"\.swo").unwrap(),
105            Regex::new(r"~$").unwrap(),
106        ];
107
108        let extensions = vec![
109            // Rust source files
110            "rs".to_string(),
111            
112            // Configuration files
113            "toml".to_string(),
114            
115            // WebAssembly
116            "wat".to_string(), "wast".to_string(),
117            
118            // Embedded and low-level
119            "s".to_string(), "asm".to_string(),
120            
121            // Linker scripts
122            "ld".to_string(), "x".to_string(),
123        ];
124
125        Self {
126            external_patterns,
127            cache_patterns,
128            extensions,
129        }
130    }
131
132    pub fn get_external_patterns(&self) -> &[Regex] {
133        &self.external_patterns
134    }
135
136    pub fn get_cache_patterns(&self) -> &[Regex] {
137        &self.cache_patterns
138    }
139
140    pub fn get_extensions(&self) -> &[String] {
141        &self.extensions
142    }
143
144    pub fn get_script_names() -> Vec<&'static str> {
145        vec![
146            // Core Cargo files
147            "Cargo.toml", "Cargo.lock",
148            
149            // Entry points
150            "main.rs", "lib.rs", "mod.rs",
151            
152            // Build scripts
153            "build.rs", "build.sh", "build.bat",
154            
155            // Code formatting and linting
156            "rustfmt.toml", ".rustfmt.toml",
157            "clippy.toml", ".clippy.toml",
158            
159            // Documentation
160            "README.md", "CHANGELOG.md", "CONTRIBUTING.md",
161            "LICENSE", "LICENSE-MIT", "LICENSE-APACHE",
162            
163            // CI/CD
164            ".github/workflows/rust.yml", ".github/workflows/ci.yml",
165            ".gitlab-ci.yml", "azure-pipelines.yml",
166            "Jenkinsfile", "buildkite.yml",
167            
168            // Testing
169            "tests/", "benches/", "examples/",
170            "criterion.toml", "proptest-regressions/",
171            
172            // Cross-compilation
173            "Cross.toml", ".cross.toml",
174            "rust-toolchain", "rust-toolchain.toml",
175            
176            // WebAssembly
177            "wasm-pack.toml", "Cargo-wasm.toml",
178            
179            // Embedded development
180            "memory.x", "link.x", "build.x",
181            "openocd.cfg", "openocd.gdb",
182            ".gdbinit", "gdb.txt",
183            
184            // IDE configuration
185            "rust-project.json", ".vscode/settings.json",
186            ".idea/", "*.iml",
187            
188            // Package management
189            "deny.toml", "cargo-deny.toml",
190            "audit.toml", "cargo-audit.toml",
191            "machete.toml", "cargo-machete.toml",
192            
193            // Release management
194            "release.toml", "cargo-release.toml",
195            "cliff.toml", "git-cliff.toml",
196            
197            // Performance and profiling
198            "flamegraph.toml", "criterion.toml",
199            "tarpaulin.toml", "llvm-cov.toml",
200            
201            // Docker and containerization
202            "Dockerfile", "docker-compose.yml",
203            ".dockerignore", "Containerfile",
204            
205            // Deployment
206            "Procfile", "app.yaml", "serverless.yml",
207            "fly.toml", "shuttle.toml",
208            
209            // Configuration
210            "config.toml", "settings.toml",
211            ".env", ".env.local", ".env.example",
212            
213            // Scripts
214            "install.sh", "setup.sh", "run.sh",
215            "test.sh", "build.sh", "deploy.sh",
216            
217            // Workspace configuration
218            "workspace.toml", "members.toml",
219            
220            // Security
221            "security.md", "SECURITY.md",
222            "advisory-db/", "rustsec/",
223        ]
224    }
225}