github.com/chenfeining/golangci-lint@v1.0.2-0.20230730162517-14c6c67868df/pkg/printers/github.go (about)

     1  package printers
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  
     7  	"github.com/chenfeining/golangci-lint/pkg/result"
     8  )
     9  
    10  type github struct {
    11  	w io.Writer
    12  }
    13  
    14  const defaultGithubSeverity = "error"
    15  
    16  // NewGithub output format outputs issues according to GitHub actions format:
    17  // https://help.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-error-message
    18  func NewGithub(w io.Writer) Printer {
    19  	return &github{w: w}
    20  }
    21  
    22  // print each line as: ::error file=app.js,line=10,col=15::Something went wrong
    23  func formatIssueAsGithub(issue *result.Issue) string {
    24  	severity := defaultGithubSeverity
    25  	if issue.Severity != "" {
    26  		severity = issue.Severity
    27  	}
    28  
    29  	ret := fmt.Sprintf("::%s file=%s,line=%d", severity, issue.FilePath(), issue.Line())
    30  	if issue.Pos.Column != 0 {
    31  		ret += fmt.Sprintf(",col=%d", issue.Pos.Column)
    32  	}
    33  
    34  	ret += fmt.Sprintf("::%s (%s)", issue.Text, issue.FromLinter)
    35  	return ret
    36  }
    37  
    38  func (p *github) Print(issues []result.Issue) error {
    39  	for ind := range issues {
    40  		_, err := fmt.Fprintln(p.w, formatIssueAsGithub(&issues[ind]))
    41  		if err != nil {
    42  			return err
    43  		}
    44  	}
    45  	return nil
    46  }