
Don't perform extra go env calls in go/packages. Load only needed go env vars in golangci-lint. Stay in sync by enabled analyzers in go vet: remove nilness and atomicalign analyzers, add errorsas analyzer. Don't build SSA for govet. Standalone govet runs 25% faster than before. All runs can be 5-10% faster than before. Relates: #208
59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
package processors
|
|
|
|
import (
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
"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(i *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 := i.FilePath()
|
|
if !filepath.IsAbs(i.FilePath()) {
|
|
absPath, err := filepath.Abs(i.FilePath())
|
|
if err != nil {
|
|
return false, errors.Wrapf(err, "failed to build abs path for %q", i.FilePath())
|
|
}
|
|
issueFilePath = absPath
|
|
}
|
|
|
|
if p.goCacheDir != "" && strings.HasPrefix(issueFilePath, p.goCacheDir) {
|
|
return false, nil
|
|
}
|
|
|
|
if filepath.Base(i.FilePath()) == "_cgo_gotypes.go" {
|
|
// skip cgo warning for go1.10
|
|
return false, nil
|
|
}
|
|
|
|
return true, nil
|
|
})
|
|
}
|
|
|
|
func (Cgo) Finish() {}
|