58 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package processors
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"path/filepath"
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/golangci/golangci-lint/pkg/goutil"
 | |
| 	"github.com/golangci/golangci-lint/pkg/result"
 | |
| )
 | |
| 
 | |
| type Cgo struct {
 | |
| 	goCacheDir string
 | |
| }
 | |
| 
 | |
| var _ Processor = Cgo{}
 | |
| 
 | |
| func NewCgo(goenv *goutil.Env) *Cgo {
 | |
| 	return &Cgo{
 | |
| 		goCacheDir: goenv.Get(goutil.EnvGoCache),
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (p Cgo) Name() string {
 | |
| 	return "cgo"
 | |
| }
 | |
| 
 | |
| func (p Cgo) Process(issues []result.Issue) ([]result.Issue, error) {
 | |
| 	return filterIssuesErr(issues, func(issue *result.Issue) (bool, error) {
 | |
| 		// some linters (e.g. gosec, deadcode) return incorrect filepaths for cgo issues,
 | |
| 		// also cgo files have strange issues looking like false positives.
 | |
| 
 | |
| 		// cache dir contains all preprocessed files including cgo files
 | |
| 
 | |
| 		issueFilePath := issue.FilePath()
 | |
| 		if !filepath.IsAbs(issue.FilePath()) {
 | |
| 			absPath, err := filepath.Abs(issue.FilePath())
 | |
| 			if err != nil {
 | |
| 				return false, fmt.Errorf("failed to build abs path for %q: %w", issue.FilePath(), err)
 | |
| 			}
 | |
| 			issueFilePath = absPath
 | |
| 		}
 | |
| 
 | |
| 		if p.goCacheDir != "" && strings.HasPrefix(issueFilePath, p.goCacheDir) {
 | |
| 			return false, nil
 | |
| 		}
 | |
| 
 | |
| 		if filepath.Base(issue.FilePath()) == "_cgo_gotypes.go" {
 | |
| 			// skip cgo warning for go1.10
 | |
| 			return false, nil
 | |
| 		}
 | |
| 
 | |
| 		return true, nil
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func (Cgo) Finish() {}
 | 
