11use std:: collections:: HashMap ;
22
3- use crate :: structs:: { ConfigLint , FileData , Rule , RuleSet } ;
3+ use crate :: structs:: { Lint , FileData , RuleFn , RuleSet } ;
44
5- pub fn run_lint ( lint : & ConfigLint , files : & mut Vec < FileData > , all_rules : & HashMap < String , Rule > , _all_rulesets : & HashMap < String , RuleSet > ) {
5+ pub fn run_lint ( lint : & Lint , files : & mut Vec < FileData > , all_rules : & HashMap < String , RuleFn > , _all_rulesets : & HashMap < String , RuleSet > ) {
66
77
8- let mut rules: Vec < Rule > = Vec :: new ( ) ;
9-
8+ // LATER: load rules from rulesets too
109 let lint_rules = & lint. rules ;
1110 if lint_rules. is_some ( ) {
1211 let lint_rules = lint_rules. as_ref ( ) . unwrap ( ) ;
@@ -15,43 +14,21 @@ pub fn run_lint(lint: &ConfigLint, files: &mut Vec<FileData>, all_rules: &HashMa
1514
1615 let the_rule = all_rules. get ( rule_id) ;
1716 if the_rule. is_none ( ) {
18- println ! ( "ERROR: unknown rule_id '{}'" , rule_id) ;
17+ println ! ( "ERROR: lint {} has unknown rule_id '{}'" , lint . name , rule_id) ;
1918 std:: process:: exit ( 7 ) ;
2019 }
21- let the_rule = the_rule. unwrap ( ) ;
22- rules. push ( the_rule. clone ( ) ) ;
23- }
24- }
25-
26- // LATER: load rules from rulesets
27- if rules. len ( ) == 0 {
28- println ! ( "WARNING: no rules for {}" , lint. name. clone( ) . unwrap( ) ) ;
29- return ;
30- }
31-
32- for rule in rules. iter ( ) {
33-
34- if rule. regex . is_none ( ) {
35- println ! ( "ERROR: Rule {} has no regex" , rule. rule_id) ;
36- continue ;
37- }
38-
39- let regex_data = rule. regex . as_ref ( ) . unwrap ( ) ;
40- if regex_data. regex . is_none ( ) {
41- println ! ( "ERROR: Rule {} has invalid regex" , rule. rule_id) ;
42- continue ;
43- }
44- let regex = regex_data. regex . as_ref ( ) . unwrap ( ) ;
45- let expect = regex_data. expect == "match" ;
46-
47- for file in files. iter_mut ( ) {
48- let value = & file. file_name ;
49- let result = regex. is_match ( value) ;
50- if result != expect {
51- println ! ( "DEBUG: failed match for '{}': rule={} expect={}, got={}" , value, regex_data. pattern, expect, result) ;
52- file. failed . push ( rule. rule_id . clone ( ) ) ;
53- } else {
54- file. passed . push ( rule. rule_id . clone ( ) ) ;
20+ let rule_fn = the_rule. unwrap ( ) ;
21+
22+
23+ for file in files. iter_mut ( ) {
24+ let value = & file. file_name ;
25+ let result = rule_fn ( value) ;
26+ if result {
27+ file. passed . push ( rule_id. clone ( ) ) ;
28+ } else {
29+ println ! ( "DEBUG: failed match for '{}': rule={}" , file. file_name, rule_id) ;
30+ file. failed . push ( rule_id. clone ( ) ) ;
31+ }
5532 }
5633 }
5734 }
0 commit comments