github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/formatters/csv.go (about) 1 package formatters 2 3 import ( 4 "encoding/csv" 5 "fmt" 6 "strconv" 7 8 "github.com/khulnasoft-lab/defsec/pkg/scan" 9 ) 10 11 func outputCSV(b ConfigurableFormatter, results scan.Results) error { 12 13 records := [][]string{ 14 {"file", "start_line", "end_line", "rule_id", "severity", "description", "link", "passed"}, 15 } 16 17 for _, res := range results { 18 switch res.Status() { 19 case scan.StatusIgnored: 20 if !b.IncludeIgnored() { 21 continue 22 } 23 case scan.StatusPassed: 24 if !b.IncludePassed() { 25 continue 26 } 27 } 28 var link string 29 links := b.GetLinks(res) 30 if len(links) > 0 { 31 link = links[0] 32 } 33 34 rng := res.Range() 35 path := b.Path(res, res.Metadata()) 36 37 records = append(records, []string{ 38 path, 39 strconv.Itoa(rng.GetStartLine()), 40 strconv.Itoa(rng.GetEndLine()), 41 res.Rule().LongID(), 42 string(res.Severity()), 43 res.Description(), 44 link, 45 strconv.FormatBool(res.Status() == scan.StatusPassed), 46 }) 47 } 48 49 csvWriter := csv.NewWriter(b.Writer()) 50 51 for _, record := range records { 52 if err := csvWriter.Write(record); err != nil { 53 return fmt.Errorf("error writing record to csv: `%w`", err) 54 } 55 } 56 57 csvWriter.Flush() 58 59 return csvWriter.Error() 60 }