@@ -204,14 +204,8 @@ 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-
213207 var sarif SimpleSarifReport
214- if err := json .Unmarshal (filteredData , & sarif ); err != nil {
208+ if err := json .Unmarshal (data , & sarif ); err != nil {
215209 return fmt .Errorf ("failed to parse SARIF file %s: %w" , file , err )
216210 }
217211
@@ -234,18 +228,34 @@ func MergeSarifOutputs(inputFiles []string, outputFile string) error {
234228 return nil
235229}
236230
237- // FilterRuleDefinitions removes rule definitions from SARIF output
238- func FilterRuleDefinitions (sarifData []byte ) ([]byte , error ) {
239- var report SarifReport
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 {}
240236 if err := json .Unmarshal (sarifData , & report ); err != nil {
241237 return nil , fmt .Errorf ("failed to parse SARIF data: %w" , err )
242238 }
243239
244- // Remove rules from each run
245- for i := range report .Runs {
246- report .Runs [i ].Tool .Driver .Rules = nil
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+ }
247252 }
248253
249254 // Marshal back to JSON with indentation
250- return json .MarshalIndent (report , "" , " " )
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
251261}
0 commit comments