diff --git a/pkg/golinters/goanalysis/runners.go b/pkg/golinters/goanalysis/runners.go index 7e4cf902e79c..8e63cb5a35eb 100644 --- a/pkg/golinters/goanalysis/runners.go +++ b/pkg/golinters/goanalysis/runners.go @@ -98,10 +98,11 @@ func buildIssues(diags []Diagnostic, linterNameBuilder func(diag *Diagnostic) st } issues = append(issues, result.Issue{ - FromLinter: linterName, - Text: text, - Pos: diag.Position, - Pkg: diag.Pkg, + FromLinter: linterName, + Text: text, + SuggestedFixes: diag.SuggestedFixes, + Pos: diag.Position, + Pkg: diag.Pkg, }) if len(diag.Related) > 0 { diff --git a/pkg/printers/text.go b/pkg/printers/text.go index 1814528884c4..39e4840c3223 100644 --- a/pkg/printers/text.go +++ b/pkg/printers/text.go @@ -47,6 +47,7 @@ func (p *Text) Print(ctx context.Context, issues []result.Issue) error { p.printSourceCode(&issues[i]) p.printUnderLinePointer(&issues[i]) + p.printSuggestedFixes(&issues[i]) } return nil @@ -64,6 +65,24 @@ func (p Text) printIssue(i *result.Issue) { fmt.Fprintf(logutils.StdOut, "%s: %s\n", pos, text) } +func (p Text) printSuggestedFixes(i *result.Issue) { + var text string + if len(i.SuggestedFixes) > 0 { + for _, fix := range i.SuggestedFixes { + text += p.SprintfColored(color.FgRed, "%s\n", strings.TrimSpace(fix.Message)) + elems := []string{} + for _, text := range fix.TextEdits { + elems = append(elems, strings.TrimSpace(string(text.NewText))) + } + text += strings.Join(elems, "\n") + "\n" + } + } + + if text != "" { + fmt.Fprintln(logutils.StdOut, text) + } +} + func (p Text) printSourceCode(i *result.Issue) { for _, line := range i.SourceLines { fmt.Fprintln(logutils.StdOut, line) diff --git a/pkg/result/issue.go b/pkg/result/issue.go index 707a2b17cd95..a31b6c713658 100644 --- a/pkg/result/issue.go +++ b/pkg/result/issue.go @@ -5,6 +5,7 @@ import ( "fmt" "go/token" + "golang.org/x/tools/go/analysis" "golang.org/x/tools/go/packages" ) @@ -25,8 +26,9 @@ type InlineFix struct { } type Issue struct { - FromLinter string - Text string + FromLinter string + Text string + SuggestedFixes []analysis.SuggestedFix Severity string