 306816ec85
			
		
	
	
		306816ec85
		
			
		
	
	
	
	
		
			
			This reverts commit aeb98303293570ba682ea933a4e9501a11a3aa99. There are some cases that nolinter fixer wasn't handling properly or expectedly (#1579, #1580, #1581) so we'll fix those in a new attempt.
		
			
				
	
	
		
			99 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			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))
 | |
| }
 |