Skip to main content

sherlock_io/patterns/
zig.rs

1use regex::Regex;
2
3pub struct ZigPatterns {
4    external_patterns: Vec<Regex>,
5    cache_patterns: Vec<Regex>,
6    extensions: Vec<String>,
7}
8
9impl ZigPatterns {
10    pub fn new() -> Self {
11        let external_patterns = vec![
12            // Zig build artifacts
13            Regex::new(r"zig-cache/").unwrap(),
14            Regex::new(r"zig-out/").unwrap(),
15            
16            // Compiled objects
17            Regex::new(r"\.o$").unwrap(),
18            Regex::new(r"\.obj$").unwrap(),
19            Regex::new(r"\.lib$").unwrap(),
20            Regex::new(r"\.a$").unwrap(),
21            Regex::new(r"\.so$").unwrap(),
22            Regex::new(r"\.dylib$").unwrap(),
23            Regex::new(r"\.dll$").unwrap(),
24            Regex::new(r"\.exe$").unwrap(),
25            
26            // LLVM artifacts
27            Regex::new(r"\.bc$").unwrap(),
28            Regex::new(r"\.ll$").unwrap(),
29            
30            // WebAssembly artifacts
31            Regex::new(r"\.wasm$").unwrap(),
32            
33            // Debug info
34            Regex::new(r"\.pdb$").unwrap(),
35            Regex::new(r"\.dSYM/").unwrap(),
36            
37            // Temporary files
38            Regex::new(r"\.tmp/").unwrap(),
39            Regex::new(r"tmp/").unwrap(),
40            Regex::new(r"\.swp$").unwrap(),
41            Regex::new(r"\.swo$").unwrap(),
42            Regex::new(r"~$").unwrap(),
43        ];
44
45        let cache_patterns = vec![
46            // Zig cache
47            Regex::new(r"zig-cache/").unwrap(),
48            Regex::new(r"zig-out/").unwrap(),
49            
50            // Build cache
51            Regex::new(r"\.o$").unwrap(),
52            Regex::new(r"\.obj$").unwrap(),
53        ];
54
55        let extensions = vec![
56            // Zig source files
57            "zig".to_string(),
58            
59            // Zig build files
60            "zon".to_string(),
61            
62            // Assembly files
63            "s".to_string(),
64            "asm".to_string(),
65            
66            // C files (often used with Zig)
67            "c".to_string(),
68            "h".to_string(),
69            "cpp".to_string(),
70            "hpp".to_string(),
71            
72            // Configuration files
73            "json".to_string(),
74            "yaml".to_string(),
75            "yml".to_string(),
76            "toml".to_string(),
77            
78            // Documentation
79            "md".to_string(),
80            "rst".to_string(),
81            "txt".to_string(),
82            
83            // Scripts
84            "sh".to_string(),
85            
86            // WebAssembly
87            "wat".to_string(),
88            "wast".to_string(),
89        ];
90
91        Self {
92            external_patterns,
93            cache_patterns,
94            extensions,
95        }
96    }
97
98    pub fn get_external_patterns(&self) -> &[Regex] {
99        &self.external_patterns
100    }
101
102    pub fn get_cache_patterns(&self) -> &[Regex] {
103        &self.cache_patterns
104    }
105
106    pub fn get_extensions(&self) -> &[String] {
107        &self.extensions
108    }
109
110    pub fn get_script_names() -> Vec<&'static str> {
111        vec![
112            // Zig build files
113            "build.zig", "build.zig.zon",
114            
115            // Main files
116            "main.zig", "src/main.zig",
117            
118            // Test files
119            "test.zig", "tests.zig",
120            
121            // Library files
122            "lib.zig", "root.zig",
123            
124            // Build scripts
125            "Makefile", "makefile", "build.sh",
126            
127            // Documentation
128            "README.md", "CHANGELOG.md", "LICENSE",
129            
130            // CI/CD
131            ".github/workflows/zig.yml",
132            ".travis.yml", "appveyor.yml",
133            "circle.yml", ".circleci/config.yml",
134            
135            // Git
136            ".gitignore", ".gitattributes",
137            
138            // Docker
139            "Dockerfile", "docker-compose.yml",
140            
141            // Environment
142            ".env", ".env.example",
143            
144            // Configuration
145            "config.zig", "settings.zig",
146            
147            // Common module files
148            "utils.zig", "helpers.zig", "common.zig",
149            
150            // Examples
151            "example.zig", "examples.zig",
152            
153            // Benchmarks
154            "bench.zig", "benchmarks.zig",
155            
156            // Embedded development
157            "linker.ld", "memory.x",
158            
159            // Cross-compilation
160            "cross.zig", "target.zig",
161        ]
162    }
163}