Andrew Shannon Brown 306816ec85
Revert "Update nolintlint to fix nolint formatting and remove unused nolint statements ()" ()
This reverts commit aeb98303293570ba682ea933a4e9501a11a3aa99.

There are some cases that nolinter fixer wasn't handling properly or expectedly (, , ) so we'll fix those in a new attempt.
2020-12-27 11:49:58 -08:00

99 lines
1.9 KiB
Go

package result
import (
"crypto/md5" //nolint:gosec
"fmt"
"go/token"
"golang.org/x/tools/go/packages"
)
type Range struct {
From, To int
}
type Replacement struct {
NeedOnlyDelete bool // need to delete all lines of the issue without replacement with new lines
NewLines []string // is NeedDelete is false it's the replacement lines
Inline *InlineFix
}
type InlineFix struct {
StartCol int // zero-based
Length int // length of chunk to be replaced
NewString string
}
type Issue struct {
FromLinter string
Text string
Severity string
// Source lines of a code with the issue to show
SourceLines []string
// If we know how to fix the issue we can provide replacement lines
Replacement *Replacement
// Pkg is needed for proper caching of linting results
Pkg *packages.Package `json:"-"`
LineRange *Range `json:",omitempty"`
Pos token.Position
// HunkPos is used only when golangci-lint is run over a diff
HunkPos int `json:",omitempty"`
// If we are expecting a nolint (because this is from nolintlint), record the expected linter
ExpectNoLint bool
ExpectedNoLintLinter string
}
func (i *Issue) FilePath() string {
return i.Pos.Filename
}
func (i *Issue) Line() int {
return i.Pos.Line
}
func (i *Issue) Column() int {
return i.Pos.Column
}
func (i *Issue) GetLineRange() Range {
if i.LineRange == nil {
return Range{
From: i.Line(),
To: i.Line(),
}
}
if i.LineRange.From == 0 {
return Range{
From: i.Line(),
To: i.Line(),
}
}
return *i.LineRange
}
func (i *Issue) Description() string {
return fmt.Sprintf("%s: %s", i.FromLinter, i.Text)
}
func (i *Issue) Fingerprint() string {
firstLine := ""
if len(i.SourceLines) > 0 {
firstLine = i.SourceLines[0]
}
hash := md5.New() //nolint:gosec
_, _ = hash.Write([]byte(fmt.Sprintf("%s%s%s", i.Pos.Filename, i.Text, firstLine)))
return fmt.Sprintf("%X", hash.Sum(nil))
}