don't import packages twice for golint
This commit is contained in:
parent
e6657e868e
commit
c9d006d77a
@ -31,6 +31,19 @@ func (p ProjectPaths) MixedPaths() []string {
|
||||
return p.Files
|
||||
}
|
||||
|
||||
func (p ProjectPaths) FilesGrouppedByDirs() [][]string {
|
||||
dirToFiles := map[string][]string{}
|
||||
for _, f := range p.Files {
|
||||
dirToFiles[filepath.Dir(f)] = append(dirToFiles[f], f)
|
||||
}
|
||||
|
||||
ret := [][]string{}
|
||||
for _, files := range dirToFiles {
|
||||
ret = append(ret, files)
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func processPaths(root string, paths []string, maxPaths int) ([]string, error) {
|
||||
if len(paths) > maxPaths {
|
||||
logrus.Warnf("Gofmt: got too much paths (%d), analyze first %d", len(paths), maxPaths)
|
||||
|
@ -3,9 +3,7 @@ package golinters
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"go/build"
|
||||
"io/ioutil"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/golang/lint"
|
||||
"github.com/golangci/golangci-lint/pkg/result"
|
||||
@ -19,17 +17,8 @@ func (Golint) Name() string {
|
||||
|
||||
func (g Golint) Run(ctx context.Context, lintCtx *Context) ([]result.Issue, error) {
|
||||
var issues []result.Issue
|
||||
if lintCtx.Paths.IsDirsRun {
|
||||
for _, path := range lintCtx.Paths.Dirs { // TODO: support exclusion of test files
|
||||
i, err := lintDir(path, lintCtx.RunCfg().Golint.MinConfidence)
|
||||
if err != nil {
|
||||
// TODO: skip and warn
|
||||
return nil, fmt.Errorf("can't lint dir %s: %s", path, err)
|
||||
}
|
||||
issues = append(issues, i...)
|
||||
}
|
||||
} else {
|
||||
i, err := lintFiles(lintCtx.RunCfg().Golint.MinConfidence, lintCtx.Paths.Files...)
|
||||
for _, pkgFiles := range lintCtx.Paths.FilesGrouppedByDirs() {
|
||||
i, err := lintFiles(lintCtx.RunCfg().Golint.MinConfidence, pkgFiles...)
|
||||
if err != nil {
|
||||
// TODO: skip and warn
|
||||
return nil, fmt.Errorf("can't lint files %s: %s", lintCtx.Paths.Files, err)
|
||||
@ -40,35 +29,6 @@ func (g Golint) Run(ctx context.Context, lintCtx *Context) ([]result.Issue, erro
|
||||
return issues, nil
|
||||
}
|
||||
|
||||
func lintDir(dirname string, minConfidence float64) ([]result.Issue, error) {
|
||||
pkg, err := build.ImportDir(dirname, 0)
|
||||
if err != nil {
|
||||
if _, nogo := err.(*build.NoGoError); nogo {
|
||||
// Don't complain if the failure is due to no Go source files.
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("can't import dir %s", dirname)
|
||||
}
|
||||
|
||||
return lintImportedPackage(pkg, minConfidence)
|
||||
}
|
||||
|
||||
func lintImportedPackage(pkg *build.Package, minConfidence float64) ([]result.Issue, error) {
|
||||
var files []string
|
||||
files = append(files, pkg.GoFiles...)
|
||||
files = append(files, pkg.CgoFiles...)
|
||||
files = append(files, pkg.TestGoFiles...)
|
||||
files = append(files, pkg.XTestGoFiles...)
|
||||
if pkg.Dir != "." {
|
||||
for i, f := range files {
|
||||
files[i] = filepath.Join(pkg.Dir, f)
|
||||
}
|
||||
}
|
||||
|
||||
return lintFiles(minConfidence, files...)
|
||||
}
|
||||
|
||||
func lintFiles(minConfidence float64, filenames ...string) ([]result.Issue, error) {
|
||||
files := make(map[string][]byte)
|
||||
for _, filename := range filenames {
|
||||
|
Loading…
x
Reference in New Issue
Block a user