github.com/elek/golangci-lint@v1.42.2-0.20211208090441-c05b7fcb3a9a/pkg/printers/codeclimate.go (about) 1 package printers 2 3 import ( 4 "context" 5 "encoding/json" 6 "fmt" 7 8 "github.com/elek/golangci-lint/pkg/logutils" 9 "github.com/elek/golangci-lint/pkg/result" 10 ) 11 12 // CodeClimateIssue is a subset of the Code Climate spec - https://github.com/codeclimate/spec/blob/master/SPEC.md#data-types 13 // It is just enough to support GitLab CI Code Quality - https://docs.gitlab.com/ee/user/project/merge_requests/code_quality.html 14 type CodeClimateIssue struct { 15 Description string `json:"description"` 16 Severity string `json:"severity,omitempty"` 17 Fingerprint string `json:"fingerprint"` 18 Location struct { 19 Path string `json:"path"` 20 Lines struct { 21 Begin int `json:"begin"` 22 } `json:"lines"` 23 } `json:"location"` 24 } 25 26 type CodeClimate struct { 27 } 28 29 func NewCodeClimate() *CodeClimate { 30 return &CodeClimate{} 31 } 32 33 func (p CodeClimate) Print(ctx context.Context, issues []result.Issue) error { 34 codeClimateIssues := []CodeClimateIssue{} 35 for i := range issues { 36 issue := &issues[i] 37 codeClimateIssue := CodeClimateIssue{} 38 codeClimateIssue.Description = issue.Description() 39 codeClimateIssue.Location.Path = issue.Pos.Filename 40 codeClimateIssue.Location.Lines.Begin = issue.Pos.Line 41 codeClimateIssue.Fingerprint = issue.Fingerprint() 42 43 if issue.Severity != "" { 44 codeClimateIssue.Severity = issue.Severity 45 } 46 47 codeClimateIssues = append(codeClimateIssues, codeClimateIssue) 48 } 49 50 outputJSON, err := json.Marshal(codeClimateIssues) 51 if err != nil { 52 return err 53 } 54 55 fmt.Fprint(logutils.StdOut, string(outputJSON)) 56 return nil 57 }