From 2ec102c7bf23f5497f3e85095ed3d5eedb5d999d Mon Sep 17 00:00:00 2001 From: Cedric Staub Date: Wed, 27 Jul 2016 20:55:09 -0700 Subject: [PATCH] Use encoding/csv for CSV output The encoding/csv package will take care of quoting, double-quoting, and other CSV quirks -- avoids having to fiddle with text templates. --- output/formatter.go | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/output/formatter.go b/output/formatter.go index 2bbda13..24c32cd 100644 --- a/output/formatter.go +++ b/output/formatter.go @@ -15,9 +15,11 @@ package output import ( + "encoding/csv" "encoding/json" - "html/template" "io" + "strconv" + "text/template" gas "github.com/HewlettPackard/gas/core" ) @@ -45,22 +47,13 @@ Summary: ` -var csv = `{{ range $index, $issue := .Issues -}} -{{- $issue.File -}}, -{{- $issue.Line -}}, -{{- $issue.What -}}, -{{- $issue.Severity -}}, -{{- $issue.Confidence -}}, -{{- printf "%q" $issue.Code }} -{{ end }}` - func CreateReport(w io.Writer, format string, data *gas.Analyzer) error { var err error switch format { case "json": err = reportJSON(w, data) case "csv": - err = reportFromTemplate(w, csv, data) + err = reportCSV(w, data) case "text": err = reportFromTemplate(w, text, data) default: @@ -82,6 +75,25 @@ func reportJSON(w io.Writer, data *gas.Analyzer) error { return err } +func reportCSV(w io.Writer, data *gas.Analyzer) error { + out := csv.NewWriter(w) + defer out.Flush() + for _, issue := range data.Issues { + err := out.Write([]string{ + issue.File, + strconv.Itoa(issue.Line), + issue.What, + issue.Severity.String(), + issue.Confidence.String(), + issue.Code, + }) + if err != nil { + return err + } + } + return nil +} + func reportFromTemplate(w io.Writer, reportTemplate string, data *gas.Analyzer) error { t, e := template.New("gas").Parse(reportTemplate) if e != nil {