github.com/slixurd/golangci-lint@v1.10.1/pkg/printers/json.go (about)

     1  package printers
     2  
     3  import (
     4  	"context"
     5  	"encoding/json"
     6  	"fmt"
     7  
     8  	"github.com/golangci/golangci-lint/pkg/logutils"
     9  	"github.com/golangci/golangci-lint/pkg/report"
    10  	"github.com/golangci/golangci-lint/pkg/result"
    11  )
    12  
    13  type JSON struct {
    14  	rd *report.Data
    15  }
    16  
    17  func NewJSON(rd *report.Data) *JSON {
    18  	return &JSON{
    19  		rd: rd,
    20  	}
    21  }
    22  
    23  type JSONResult struct {
    24  	Issues []result.Issue
    25  	Report *report.Data
    26  }
    27  
    28  func (p JSON) Print(ctx context.Context, issues <-chan result.Issue) error {
    29  	allIssues := []result.Issue{}
    30  	for i := range issues {
    31  		allIssues = append(allIssues, i)
    32  	}
    33  
    34  	res := JSONResult{
    35  		Issues: allIssues,
    36  		Report: p.rd,
    37  	}
    38  
    39  	outputJSON, err := json.Marshal(res)
    40  	if err != nil {
    41  		return err
    42  	}
    43  
    44  	fmt.Fprint(logutils.StdOut, string(outputJSON))
    45  	return nil
    46  }