@@ -204,8 +204,14 @@ func MergeSarifOutputs(inputFiles []string, outputFile string) error {
204204 return fmt .Errorf ("failed to read SARIF file %s: %w" , file , err )
205205 }
206206
207+ // Filter out rule definitions from each input file
208+ filteredData , err := FilterRuleDefinitions (data )
209+ if err != nil {
210+ return fmt .Errorf ("failed to filter rules from SARIF file %s: %w" , file , err )
211+ }
212+
207213 var sarif SimpleSarifReport
208- if err := json .Unmarshal (data , & sarif ); err != nil {
214+ if err := json .Unmarshal (filteredData , & sarif ); err != nil {
209215 return fmt .Errorf ("failed to parse SARIF file %s: %w" , file , err )
210216 }
211217
@@ -228,34 +234,18 @@ func MergeSarifOutputs(inputFiles []string, outputFile string) error {
228234 return nil
229235}
230236
231- // FilterRulesFromSarif removes rule definitions from SARIF output if needed
232- // This should be called separately after MergeSarifOutputs if rule filtering is required
233- func FilterRulesFromSarif (sarifData []byte ) ([]byte , error ) {
234- // Use a map to preserve all fields during unmarshaling
235- var report map [string ]interface {}
237+ // FilterRuleDefinitions removes rule definitions from SARIF output
238+ func FilterRuleDefinitions (sarifData []byte ) ([]byte , error ) {
239+ var report SarifReport
236240 if err := json .Unmarshal (sarifData , & report ); err != nil {
237241 return nil , fmt .Errorf ("failed to parse SARIF data: %w" , err )
238242 }
239243
240- // Navigate to the runs array and remove rules from each run
241- if runs , ok := report ["runs" ].([]interface {}); ok {
242- for _ , run := range runs {
243- if runMap , ok := run .(map [string ]interface {}); ok {
244- if tool , ok := runMap ["tool" ].(map [string ]interface {}); ok {
245- if driver , ok := tool ["driver" ].(map [string ]interface {}); ok {
246- // Always set rules to null to maintain consistent output format
247- driver ["rules" ] = nil
248- }
249- }
250- }
251- }
244+ // Remove rules from each run
245+ for i := range report .Runs {
246+ report .Runs [i ].Tool .Driver .Rules = nil
252247 }
253248
254249 // Marshal back to JSON with indentation
255- filteredData , err := json .MarshalIndent (report , "" , " " )
256- if err != nil {
257- return nil , fmt .Errorf ("failed to marshal filtered SARIF: %w" , err )
258- }
259-
260- return filteredData , nil
250+ return json .MarshalIndent (report , "" , " " )
261251}
0 commit comments