1use alint_core::RuleRegistry;
7
8pub mod case;
9pub mod command;
10pub mod commented_out_code;
11pub mod dir_absent;
12pub mod dir_contains;
13pub mod dir_exists;
14pub mod dir_only_contains;
15pub mod every_matching_has;
16pub mod executable_bit;
17pub mod executable_has_shebang;
18pub mod file_absent;
19pub mod file_content_forbidden;
20pub mod file_content_matches;
21pub mod file_ends_with;
22pub mod file_exists;
23pub mod file_footer;
24pub mod file_hash;
25pub mod file_header;
26pub mod file_is_ascii;
27pub mod file_is_text;
28pub mod file_max_lines;
29pub mod file_max_size;
30pub mod file_min_lines;
31pub mod file_min_size;
32pub mod file_shebang;
33pub mod file_starts_with;
34pub mod filename_case;
35pub mod filename_regex;
36pub mod final_newline;
37pub mod fixers;
38pub mod for_each_dir;
39pub mod for_each_file;
40pub mod git_blame_age;
41pub mod git_commit_message;
42pub mod git_no_denied_paths;
43pub mod indent_style;
44pub mod io;
45pub mod json_schema_passes;
46pub mod line_endings;
47pub mod line_max_width;
48pub mod markdown_paths_resolve;
49pub mod max_consecutive_blank_lines;
50pub mod max_directory_depth;
51pub mod max_files_per_directory;
52pub mod no_bidi_controls;
53pub mod no_bom;
54pub mod no_case_conflicts;
55pub mod no_empty_files;
56pub mod no_illegal_windows_names;
57pub mod no_merge_conflict_markers;
58pub mod no_submodules;
59pub mod no_symlinks;
60pub mod no_trailing_whitespace;
61pub mod no_zero_width_chars;
62pub mod pair;
63pub mod shebang_has_executable;
64pub mod structured_path;
65#[cfg(test)]
66mod test_support;
67pub mod unique_by;
68
69pub fn register_builtin(registry: &mut RuleRegistry) {
78 registry.register("file_exists", file_exists::build);
79 registry.register("file_absent", file_absent::build);
80 registry.register("dir_exists", dir_exists::build);
81 registry.register("dir_absent", dir_absent::build);
82
83 registry.register("file_content_matches", file_content_matches::build);
84 registry.register("content_matches", file_content_matches::build);
85 registry.register("file_content_forbidden", file_content_forbidden::build);
86 registry.register("content_forbidden", file_content_forbidden::build);
87 registry.register("file_header", file_header::build);
88 registry.register("header", file_header::build);
89 registry.register("file_max_size", file_max_size::build);
90 registry.register("max_size", file_max_size::build);
91 registry.register("file_min_size", file_min_size::build);
92 registry.register("min_size", file_min_size::build);
93 registry.register("file_min_lines", file_min_lines::build);
94 registry.register("min_lines", file_min_lines::build);
95 registry.register("file_max_lines", file_max_lines::build);
96 registry.register("max_lines", file_max_lines::build);
97 registry.register("file_footer", file_footer::build);
98 registry.register("footer", file_footer::build);
99 registry.register("file_shebang", file_shebang::build);
100 registry.register("shebang", file_shebang::build);
101
102 registry.register("json_path_equals", structured_path::json_path_equals_build);
105 registry.register(
106 "json_path_matches",
107 structured_path::json_path_matches_build,
108 );
109 registry.register("yaml_path_equals", structured_path::yaml_path_equals_build);
110 registry.register(
111 "yaml_path_matches",
112 structured_path::yaml_path_matches_build,
113 );
114 registry.register("toml_path_equals", structured_path::toml_path_equals_build);
115 registry.register(
116 "toml_path_matches",
117 structured_path::toml_path_matches_build,
118 );
119 registry.register("json_schema_passes", json_schema_passes::build);
120 registry.register("markdown_paths_resolve", markdown_paths_resolve::build);
121 registry.register("commented_out_code", commented_out_code::build);
122 registry.register("git_no_denied_paths", git_no_denied_paths::build);
123 registry.register("git_commit_message", git_commit_message::build);
124 registry.register("git_blame_age", git_blame_age::build);
125 registry.register("file_is_text", file_is_text::build);
126 registry.register("is_text", file_is_text::build);
127
128 registry.register("filename_case", filename_case::build);
129 registry.register("filename_regex", filename_regex::build);
130 registry.register("pair", pair::build);
131 registry.register("for_each_dir", for_each_dir::build);
132 registry.register("for_each_file", for_each_file::build);
133 registry.register("dir_only_contains", dir_only_contains::build);
134 registry.register("unique_by", unique_by::build);
135 registry.register("dir_contains", dir_contains::build);
136 registry.register("every_matching_has", every_matching_has::build);
137
138 registry.register("no_trailing_whitespace", no_trailing_whitespace::build);
140 registry.register("final_newline", final_newline::build);
141 registry.register("line_endings", line_endings::build);
142 registry.register("line_max_width", line_max_width::build);
143
144 registry.register(
146 "no_merge_conflict_markers",
147 no_merge_conflict_markers::build,
148 );
149 registry.register("no_bidi_controls", no_bidi_controls::build);
150 registry.register("no_zero_width_chars", no_zero_width_chars::build);
151
152 registry.register("file_is_ascii", file_is_ascii::build);
154 registry.register("no_bom", no_bom::build);
155 registry.register("file_hash", file_hash::build);
156
157 registry.register("max_directory_depth", max_directory_depth::build);
159 registry.register("max_files_per_directory", max_files_per_directory::build);
160 registry.register("no_empty_files", no_empty_files::build);
161
162 registry.register("no_case_conflicts", no_case_conflicts::build);
164 registry.register("no_illegal_windows_names", no_illegal_windows_names::build);
165
166 registry.register("no_symlinks", no_symlinks::build);
168 registry.register("executable_bit", executable_bit::build);
169 registry.register("executable_has_shebang", executable_has_shebang::build);
170 registry.register("shebang_has_executable", shebang_has_executable::build);
171 registry.register("no_submodules", no_submodules::build);
172
173 registry.register("indent_style", indent_style::build);
175 registry.register(
176 "max_consecutive_blank_lines",
177 max_consecutive_blank_lines::build,
178 );
179 registry.register("file_starts_with", file_starts_with::build);
180 registry.register("file_ends_with", file_ends_with::build);
181
182 registry.register("command", command::build);
186}
187
188pub fn builtin_registry() -> RuleRegistry {
191 let mut r = RuleRegistry::new();
192 register_builtin(&mut r);
193 r
194}
195
196#[cfg(test)]
197mod registry_tests {
198 use super::*;
199
200 #[test]
201 fn every_documented_kind_is_registered() {
202 let r = builtin_registry();
203 let known: Vec<&str> = r.known_kinds().collect();
204 for kind in [
205 "file_exists",
207 "file_absent",
208 "dir_exists",
209 "dir_absent",
210 "file_content_matches",
212 "content_matches",
213 "file_content_forbidden",
214 "content_forbidden",
215 "file_header",
216 "header",
217 "file_max_size",
218 "max_size",
219 "file_min_size",
220 "min_size",
221 "file_min_lines",
222 "min_lines",
223 "file_max_lines",
224 "max_lines",
225 "file_footer",
226 "footer",
227 "file_shebang",
228 "shebang",
229 "json_path_equals",
231 "json_path_matches",
232 "yaml_path_equals",
233 "yaml_path_matches",
234 "toml_path_equals",
235 "toml_path_matches",
236 "json_schema_passes",
237 "git_no_denied_paths",
238 "git_commit_message",
239 "git_blame_age",
240 "file_is_text",
241 "is_text",
242 "filename_case",
244 "filename_regex",
245 "pair",
246 "for_each_dir",
247 "for_each_file",
248 "dir_only_contains",
249 "unique_by",
250 "dir_contains",
251 "every_matching_has",
252 "no_trailing_whitespace",
254 "final_newline",
255 "line_endings",
256 "line_max_width",
257 "no_merge_conflict_markers",
259 "no_bidi_controls",
260 "no_zero_width_chars",
261 "file_is_ascii",
263 "no_bom",
264 "file_hash",
265 "max_directory_depth",
267 "max_files_per_directory",
268 "no_empty_files",
269 "no_case_conflicts",
271 "no_illegal_windows_names",
272 "no_symlinks",
274 "executable_bit",
275 "executable_has_shebang",
276 "shebang_has_executable",
277 "no_submodules",
278 "indent_style",
280 "max_consecutive_blank_lines",
281 "file_starts_with",
282 "file_ends_with",
283 "command",
285 ] {
286 assert!(
287 known.contains(&kind),
288 "{kind} missing from builtin registry"
289 );
290 }
291 }
292}