@@ -60,33 +60,72 @@ fn add_header(report: &mut String, repository: &str, base_branch: &str, head_bra
6060} 
6161
6262/// Add summary table by rule 
63- /// Add summary table by rule 
64- fn  add_rule_summary ( report :  & mut  String ,  analysis :  & AnalysisResult ,  rules :  & [ String ] ,  ignored_crate :  & str )  { 
63+ fn  add_rule_summary ( 
64+     report :  & mut  String , 
65+     analysis :  & AnalysisResult , 
66+     rules :  & [ String ] , 
67+     ignored_crate :  & str , 
68+ )  { 
6569    report. push_str ( "### Summary by Rule\n \n " ) ; 
6670    report. push_str ( "| Rule | Base Branch | PR Branch | Change |\n " ) ; 
6771    report. push_str ( "|------|------------|-----------|--------|\n " ) ; 
6872
6973    let  mut  total_base = 0 ; 
7074    let  mut  total_head = 0 ; 
7175
72-     // Use the original counts - these already contain the data we need 
73-     // We don't need to filter and recalculate for rule summary 
74-     for  rule_str in  rules { 
75-         let  rule = Rc :: new ( rule_str. clone ( ) ) ; 
76-         let  base_count = * analysis. base_counts . get ( & rule) . unwrap_or ( & 0 ) ; 
77-         let  head_count = * analysis. head_counts . get ( & rule) . unwrap_or ( & 0 ) ; 
76+     // If we're ignoring a crate, we need to filter and recalculate counts 
77+     if  !ignored_crate. is_empty ( )  { 
78+         // Filter out annotations from the ignored crate 
79+         let  filtered_base_annotations:  Vec < & ClippyAnnotation >  = analysis
80+             . base_annotations 
81+             . iter ( ) 
82+             . filter ( |anno| { 
83+                 let  file_path = anno. file . as_str ( ) ; 
84+                 !file_path. contains ( & format ! ( ".github/actions/{}/" ,  ignored_crate) ) 
85+             } ) 
86+             . collect ( ) ; 
87+ 
88+         let  filtered_head_annotations:  Vec < & ClippyAnnotation >  = analysis
89+             . head_annotations 
90+             . iter ( ) 
91+             . filter ( |anno| { 
92+                 let  file_path = anno. file . as_str ( ) ; 
93+                 !file_path. contains ( & format ! ( ".github/actions/{}/" ,  ignored_crate) ) 
94+             } ) 
95+             . collect ( ) ; 
96+ 
97+         // Count by rule 
98+         let  filtered_base_counts = count_annotations_by_rule_refs ( & filtered_base_annotations) ; 
99+         let  filtered_head_counts = count_annotations_by_rule_refs ( & filtered_head_annotations) ; 
100+ 
101+         // Generate the rule summary 
102+         for  rule_str in  rules { 
103+             let  base_count = filtered_base_counts. get ( rule_str) . copied ( ) . unwrap_or ( 0 ) ; 
104+             let  head_count = filtered_head_counts. get ( rule_str) . copied ( ) . unwrap_or ( 0 ) ; 
105+ 
106+             total_base += base_count; 
107+             total_head += head_count; 
108+ 
109+             add_table_row ( report,  rule_str,  base_count,  head_count) ; 
110+         } 
111+     }  else  { 
112+         // Use the original counts - this is the test path 
113+         for  rule_str in  rules { 
114+             let  rule = Rc :: new ( rule_str. clone ( ) ) ; 
115+             let  base_count = * analysis. base_counts . get ( & rule) . unwrap_or ( & 0 ) ; 
116+             let  head_count = * analysis. head_counts . get ( & rule) . unwrap_or ( & 0 ) ; 
78117
79-         total_base += base_count; 
80-         total_head += head_count; 
118+              total_base += base_count; 
119+              total_head += head_count; 
81120
82-         add_table_row ( report,  rule_str,  base_count,  head_count) ; 
121+             add_table_row ( report,  rule_str,  base_count,  head_count) ; 
122+         } 
83123    } 
84124
85125    // Add total row 
86126    add_table_row ( report,  "**Total**" ,  total_base,  total_head) ; 
87127    report. push ( '\n' ) ; 
88128} 
89- 
90129// Helper function to count annotations by rule from references 
91130fn  count_annotations_by_rule_refs ( annotations :  & [ & ClippyAnnotation ] )  -> HashMap < Rc < String > ,  usize >  { 
92131    let  mut  counts = HashMap :: new ( ) ; 
0 commit comments