1use alint_core::RuleRegistry;
7
8pub mod case;
9pub mod dir_absent;
10pub mod dir_contains;
11pub mod dir_exists;
12pub mod dir_only_contains;
13pub mod every_matching_has;
14pub mod file_absent;
15pub mod file_content_forbidden;
16pub mod file_content_matches;
17pub mod file_exists;
18pub mod file_header;
19pub mod file_is_text;
20pub mod file_max_size;
21pub mod filename_case;
22pub mod filename_regex;
23pub mod for_each_dir;
24pub mod for_each_file;
25pub mod io;
26pub mod pair;
27pub mod unique_by;
28
29pub fn register_builtin(registry: &mut RuleRegistry) {
31 registry.register("file_exists", file_exists::build);
32 registry.register("file_absent", file_absent::build);
33 registry.register("dir_exists", dir_exists::build);
34 registry.register("dir_absent", dir_absent::build);
35 registry.register("file_content_matches", file_content_matches::build);
36 registry.register("file_content_forbidden", file_content_forbidden::build);
37 registry.register("file_header", file_header::build);
38 registry.register("file_max_size", file_max_size::build);
39 registry.register("file_is_text", file_is_text::build);
40 registry.register("filename_case", filename_case::build);
41 registry.register("filename_regex", filename_regex::build);
42 registry.register("pair", pair::build);
43 registry.register("for_each_dir", for_each_dir::build);
44 registry.register("for_each_file", for_each_file::build);
45 registry.register("dir_only_contains", dir_only_contains::build);
46 registry.register("unique_by", unique_by::build);
47 registry.register("dir_contains", dir_contains::build);
48 registry.register("every_matching_has", every_matching_has::build);
49}
50
51pub fn builtin_registry() -> RuleRegistry {
54 let mut r = RuleRegistry::new();
55 register_builtin(&mut r);
56 r
57}
58
59#[cfg(test)]
60mod registry_tests {
61 use super::*;
62
63 #[test]
64 fn every_documented_kind_is_registered() {
65 let r = builtin_registry();
66 let known: Vec<&str> = r.known_kinds().collect();
67 for kind in [
68 "file_exists",
69 "file_absent",
70 "dir_exists",
71 "dir_absent",
72 "file_content_matches",
73 "file_content_forbidden",
74 "file_header",
75 "file_max_size",
76 "file_is_text",
77 "filename_case",
78 "filename_regex",
79 "pair",
80 "for_each_dir",
81 "for_each_file",
82 "dir_only_contains",
83 "unique_by",
84 "dir_contains",
85 "every_matching_has",
86 ] {
87 assert!(
88 known.contains(&kind),
89 "{kind} missing from builtin registry"
90 );
91 }
92 }
93}