1pub mod avoid_jq_for_simple_ops;
2pub mod avoid_mutable_accumulation;
3pub mod brace_spacing;
4pub mod check_complete_exit_code;
5pub mod completion_function_naming;
6pub mod dangerous_file_operations;
7pub mod descriptive_error_messages;
8pub mod discourage_bare_ignore;
9pub mod discourage_underscore_commands;
10pub mod escape_string_interpolation_operators;
11pub mod exported_function_docs;
12pub mod kebab_case_commands;
13pub mod max_positional_params;
14pub mod missing_command_docs;
15pub mod missing_type_annotation;
16pub mod multiline_formatting;
17pub mod no_trailing_spaces;
18pub mod nu_parse_error;
19pub mod omit_list_commas;
20pub mod pipe_spacing;
21pub mod prefer_builtin;
22pub mod prefer_compound_assignment;
23pub mod prefer_each_over_for;
24pub mod prefer_error_make;
25pub mod prefer_from_json;
26pub mod prefer_is_not_empty;
27pub mod prefer_lines_over_split;
28pub mod prefer_match_over_if_chain;
29pub mod prefer_nushell_data_ops;
30pub mod prefer_parse_command;
31pub mod prefer_parse_over_each_split;
32pub mod prefer_range_iteration;
33pub mod prefer_structured_data_flow;
34pub mod prefer_where_over_each_if;
35pub mod require_external_command_error_check;
36pub mod require_long_pipeline_error_handling;
37pub mod screaming_snake_constants;
38pub mod sequential_external_commands;
39pub mod snake_case_variables;
40pub mod systemd_journal_prefix;
41pub mod unnecessary_mut;
42pub mod unnecessary_variable_before_return;
43
44use std::collections::HashMap;
45
46use crate::rule::Rule;
47
48pub struct RuleRegistry {
49 rules: HashMap<&'static str, Rule>,
50}
51
52impl RuleRegistry {
53 #[must_use]
54 pub fn new() -> Self {
55 Self {
56 rules: HashMap::new(),
57 }
58 }
59
60 pub fn register(&mut self, rule: Rule) {
61 self.rules.insert(rule.id, rule);
62 }
63
64 #[must_use]
65 pub fn get_rule(&self, id: &str) -> Option<&Rule> {
66 self.rules.get(id)
67 }
68
69 pub fn all_rules(&self) -> impl Iterator<Item = &Rule> {
70 self.rules.values()
71 }
72
73 #[must_use]
74 pub fn with_default_rules() -> Self {
75 let mut registry = Self::new();
76
77 registry.register(avoid_jq_for_simple_ops::rule());
78 registry.register(avoid_mutable_accumulation::rule());
79 registry.register(brace_spacing::rule());
80 registry.register(check_complete_exit_code::rule());
81 registry.register(completion_function_naming::rule());
82 registry.register(dangerous_file_operations::rule());
83 registry.register(descriptive_error_messages::rule());
84 registry.register(discourage_bare_ignore::rule());
85 registry.register(discourage_underscore_commands::rule());
86 registry.register(escape_string_interpolation_operators::rule());
87 registry.register(exported_function_docs::rule());
88 registry.register(kebab_case_commands::rule());
89 registry.register(max_positional_params::rule());
90 registry.register(missing_command_docs::rule());
91 registry.register(missing_type_annotation::rule());
92 registry.register(multiline_formatting::rule());
93 registry.register(no_trailing_spaces::rule());
94 registry.register(nu_parse_error::rule());
95 registry.register(omit_list_commas::rule());
96 registry.register(pipe_spacing::rule());
97 registry.register(prefer_builtin::prefer_builtin_ls());
99 registry.register(prefer_builtin::prefer_builtin_cat());
100 registry.register(prefer_builtin::prefer_builtin_grep());
101 registry.register(prefer_builtin::prefer_builtin_find());
102 registry.register(prefer_builtin::prefer_builtin_head());
103 registry.register(prefer_builtin::prefer_builtin_tail());
104 registry.register(prefer_builtin::prefer_builtin_sort());
105 registry.register(prefer_builtin::prefer_builtin_uniq());
106 registry.register(prefer_builtin::prefer_builtin_sed());
107 registry.register(prefer_builtin::prefer_builtin_other());
108 registry.register(prefer_compound_assignment::rule());
109 registry.register(prefer_each_over_for::rule());
110 registry.register(prefer_error_make::rule());
111 registry.register(prefer_from_json::rule());
112 registry.register(prefer_is_not_empty::rule());
113 registry.register(prefer_lines_over_split::rule());
114 registry.register(prefer_match_over_if_chain::rule());
115 registry.register(prefer_nushell_data_ops::rule());
116 registry.register(prefer_parse_command::rule());
117 registry.register(prefer_parse_over_each_split::rule());
118 registry.register(prefer_range_iteration::rule());
119 registry.register(prefer_structured_data_flow::rule());
120 registry.register(prefer_where_over_each_if::rule());
121 registry.register(require_external_command_error_check::rule());
122 registry.register(require_long_pipeline_error_handling::rule());
123 registry.register(screaming_snake_constants::rule());
124 registry.register(sequential_external_commands::rule());
125 registry.register(snake_case_variables::rule());
126 registry.register(systemd_journal_prefix::rule());
127 registry.register(unnecessary_mut::rule());
128 registry.register(unnecessary_variable_before_return::rule());
129
130 registry
131 }
132}
133
134impl Default for RuleRegistry {
135 fn default() -> Self {
136 Self::new()
137 }
138}