1use regex::Regex;
2
3pub struct HaskellPatterns {
4 external_patterns: Vec<Regex>,
5 cache_patterns: Vec<Regex>,
6 extensions: Vec<String>,
7}
8
9impl HaskellPatterns {
10 pub fn new() -> Self {
11 let external_patterns = vec![
12 Regex::new(r"\.stack-work/").unwrap(),
14 Regex::new(r"stack\.yaml\.lock").unwrap(),
15
16 Regex::new(r"dist/").unwrap(),
18 Regex::new(r"dist-newstyle/").unwrap(),
19 Regex::new(r"cabal\.project\.local").unwrap(),
20 Regex::new(r"\.cabal-sandbox/").unwrap(),
21 Regex::new(r"cabal\.sandbox\.config").unwrap(),
22
23 Regex::new(r"\.hi$").unwrap(),
25 Regex::new(r"\.o$").unwrap(),
26 Regex::new(r"\.dyn_hi$").unwrap(),
27 Regex::new(r"\.dyn_o$").unwrap(),
28 Regex::new(r"\.p_hi$").unwrap(),
29 Regex::new(r"\.p_o$").unwrap(),
30
31 Regex::new(r"\.haddock/").unwrap(),
33 Regex::new(r"haddock\.html").unwrap(),
34
35 Regex::new(r"result").unwrap(),
37 Regex::new(r"result-*").unwrap(),
38
39 Regex::new(r"\.ghc\.environment\.").unwrap(),
41 Regex::new(r"\.hie/").unwrap(),
42 Regex::new(r"\.hiedb").unwrap(),
43
44 Regex::new(r"package\.conf\.d/").unwrap(),
46
47 Regex::new(r"\.prof$").unwrap(),
49 Regex::new(r"\.hp$").unwrap(),
50 Regex::new(r"\.ps$").unwrap(),
51 Regex::new(r"\.aux$").unwrap(),
52
53 Regex::new(r"\.tix$").unwrap(),
55 Regex::new(r"hpc_index\.html").unwrap(),
56
57 Regex::new(r"\.swp$").unwrap(),
59 Regex::new(r"\.swo$").unwrap(),
60 Regex::new(r"~$").unwrap(),
61 ];
62
63 let cache_patterns = vec![
64 Regex::new(r"\.stack-work/").unwrap(),
66
67 Regex::new(r"dist/").unwrap(),
69 Regex::new(r"dist-newstyle/").unwrap(),
70
71 Regex::new(r"\.ghc/").unwrap(),
73
74 Regex::new(r"\.hie/").unwrap(),
76 ];
77
78 let extensions = vec![
79 "hs".to_string(),
81
82 "lhs".to_string(),
84
85 "hsc".to_string(),
87
88 "cabal".to_string(),
90
91 "c".to_string(),
93 "h".to_string(),
94
95 "yaml".to_string(),
97 "yml".to_string(),
98 "json".to_string(),
99
100 "md".to_string(),
102 "rst".to_string(),
103 "txt".to_string(),
104
105 "nix".to_string(),
107
108 "sh".to_string(),
110 ];
111
112 Self {
113 external_patterns,
114 cache_patterns,
115 extensions,
116 }
117 }
118
119 pub fn get_external_patterns(&self) -> &[Regex] {
120 &self.external_patterns
121 }
122
123 pub fn get_cache_patterns(&self) -> &[Regex] {
124 &self.cache_patterns
125 }
126
127 pub fn get_extensions(&self) -> &[String] {
128 &self.extensions
129 }
130
131 pub fn get_script_names() -> Vec<&'static str> {
132 vec![
133 "stack.yaml", "stack.yaml.lock",
135
136 "cabal.project", "cabal.project.local",
138 "Setup.hs", "Setup.lhs",
139
140 "package.yaml", "hpack.yaml",
142
143 "Makefile", "makefile", "build.sh",
145
146 "default.nix", "shell.nix", "release.nix",
148
149 "README.md", "CHANGELOG.md", "LICENSE",
151
152 ".ghci", ".ghc-flags", ".hspec",
154
155 ".github/workflows/haskell.yml",
157 ".travis.yml", "appveyor.yml",
158 "circle.yml", ".circleci/config.yml",
159
160 ".gitignore", ".gitattributes",
162
163 ".dir-locals.el", ".projectile",
165
166 "bench.hs", "benchmarks.hs",
168
169 "test.hs", "tests.hs", "Spec.hs",
171
172 "example.hs", "examples.hs",
174
175 "Main.hs", "main.hs",
177
178 "Lib.hs", "lib.hs",
180 ]
181 }
182}