github.com/elek/golangci-lint@v1.42.2-0.20211208090441-c05b7fcb3a9a/pkg/printers/github.go (about)

     1  package printers
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  
     7  	"github.com/elek/golangci-lint/pkg/logutils"
     8  	"github.com/elek/golangci-lint/pkg/result"
     9  )
    10  
    11  type github struct {
    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() Printer {
    19  	return &github{}
    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 (g *github) Print(_ context.Context, issues []result.Issue) error {
    39  	for ind := range issues {
    40  		_, err := fmt.Fprintln(logutils.StdOut, formatIssueAsGithub(&issues[ind]))
    41  		if err != nil {
    42  			return err
    43  		}
    44  	}
    45  	return nil
    46  }