Skip to main content

sherlock_io/patterns/
cpp.rs

1use regex::Regex;
2
3pub struct CppPatterns {
4    external_patterns: Vec<Regex>,
5    cache_patterns: Vec<Regex>,
6    extensions: Vec<String>,
7}
8
9impl CppPatterns {
10    pub fn new() -> Self {
11        let external_patterns = vec![
12            Regex::new(r"\.o$").unwrap(),
13            Regex::new(r"\.so$").unwrap(),
14            Regex::new(r"\.a$").unwrap(),
15            Regex::new(r"\.dylib$").unwrap(),
16            Regex::new(r"\.dll$").unwrap(),
17            Regex::new(r"\.exe$").unwrap(),
18            Regex::new(r"\.obj$").unwrap(),
19            Regex::new(r"\.lib$").unwrap(),
20            Regex::new(r"\.pdb$").unwrap(),
21        ];
22
23        let cache_patterns = vec![
24            Regex::new(r"\.ccache/").unwrap(),
25            Regex::new(r"\.sccache/").unwrap(),
26            Regex::new(r"build/").unwrap(),
27            Regex::new(r"cmake-build-").unwrap(),
28            Regex::new(r"CMakeFiles/").unwrap(),
29            Regex::new(r"CMakeCache\.txt").unwrap(),
30        ];
31
32        let extensions = vec![
33            "c".to_string(), "cpp".to_string(), "cc".to_string(),
34            "cxx".to_string(), "h".to_string(), "hpp".to_string(),
35            "hxx".to_string(), "hh".to_string(), "inl".to_string(),
36        ];
37
38        Self {
39            external_patterns,
40            cache_patterns,
41            extensions,
42        }
43    }
44
45    pub fn get_external_patterns(&self) -> &[Regex] {
46        &self.external_patterns
47    }
48
49    pub fn get_cache_patterns(&self) -> &[Regex] {
50        &self.cache_patterns
51    }
52
53    pub fn get_extensions(&self) -> &[String] {
54        &self.extensions
55    }
56
57    pub fn get_script_names() -> Vec<&'static str> {
58        vec![
59            "Makefile", "makefile", "GNUmakefile", "CMakeLists.txt",
60            "configure", "autogen.sh", "bootstrap", "build.sh",
61            "meson.build", "SConstruct", "SConscript",
62        ]
63    }
64}