nu_lint/rules/
mod.rs

1pub mod avoid_mutable_accumulation;
2pub mod brace_spacing;
3pub mod completion_function_naming;
4pub mod consistent_error_handling;
5pub mod descriptive_error_messages;
6pub mod discourage_bare_ignore;
7pub mod discourage_underscore_commands;
8pub mod escape_string_interpolation_operators;
9pub mod exported_function_docs;
10pub mod kebab_case_commands;
11pub mod max_positional_params;
12pub mod missing_command_docs;
13pub mod missing_type_annotation;
14pub mod multiline_formatting;
15pub mod no_trailing_spaces;
16pub mod omit_list_commas;
17pub mod pipe_spacing;
18pub mod prefer_builtin_commands;
19pub mod prefer_builtin_system_commands;
20pub mod prefer_builtin_text_transforms;
21pub mod prefer_compound_assignment;
22pub mod prefer_each_over_for;
23pub mod prefer_error_make;
24pub mod prefer_is_not_empty;
25pub mod prefer_lines_over_split;
26pub mod prefer_match_over_if_chain;
27pub mod prefer_parse_command;
28pub mod prefer_parse_over_each_split;
29pub mod prefer_range_iteration;
30pub mod prefer_where_over_each_if;
31pub mod screaming_snake_constants;
32pub mod snake_case_variables;
33pub mod unnecessary_mut;
34pub mod unnecessary_variable_before_return;
35
36use std::collections::HashMap;
37
38use crate::rule::Rule;
39
40pub struct RuleRegistry {
41    rules: HashMap<&'static str, Rule>,
42}
43
44impl RuleRegistry {
45    #[must_use]
46    pub fn new() -> Self {
47        Self {
48            rules: HashMap::new(),
49        }
50    }
51
52    pub fn register(&mut self, rule: Rule) {
53        self.rules.insert(rule.id, rule);
54    }
55
56    #[must_use]
57    pub fn get_rule(&self, id: &str) -> Option<&Rule> {
58        self.rules.get(id)
59    }
60
61    pub fn all_rules(&self) -> impl Iterator<Item = &Rule> {
62        self.rules.values()
63    }
64
65    #[must_use]
66    pub fn with_default_rules() -> Self {
67        let mut registry = Self::new();
68
69        registry.register(snake_case_variables::rule());
70        registry.register(kebab_case_commands::rule());
71        registry.register(screaming_snake_constants::rule());
72        registry.register(unnecessary_variable_before_return::rule());
73        registry.register(prefer_is_not_empty::rule());
74        registry.register(discourage_bare_ignore::rule());
75        registry.register(discourage_underscore_commands::rule());
76        registry.register(completion_function_naming::rule());
77        registry.register(escape_string_interpolation_operators::rule());
78        registry.register(multiline_formatting::rule());
79        registry.register(no_trailing_spaces::rule());
80        registry.register(brace_spacing::rule());
81        registry.register(pipe_spacing::rule());
82        registry.register(prefer_compound_assignment::rule());
83        registry.register(unnecessary_mut::rule());
84        registry.register(omit_list_commas::rule());
85        registry.register(prefer_error_make::rule());
86        registry.register(avoid_mutable_accumulation::rule());
87        registry.register(prefer_range_iteration::rule());
88        registry.register(prefer_parse_command::rule());
89        registry.register(consistent_error_handling::rule());
90        registry.register(prefer_match_over_if_chain::rule());
91        registry.register(prefer_each_over_for::rule());
92        registry.register(descriptive_error_messages::rule());
93        registry.register(prefer_builtin_commands::rule());
94        registry.register(prefer_builtin_text_transforms::rule());
95        registry.register(prefer_builtin_system_commands::rule());
96        registry.register(prefer_where_over_each_if::rule());
97        registry.register(prefer_lines_over_split::rule());
98        registry.register(prefer_parse_over_each_split::rule());
99        registry.register(missing_command_docs::rule());
100        registry.register(exported_function_docs::rule());
101        registry.register(missing_type_annotation::rule());
102        registry.register(max_positional_params::rule());
103
104        registry
105    }
106}
107
108impl Default for RuleRegistry {
109    fn default() -> Self {
110        Self::new()
111    }
112}