From 020c948089a9cc400575df78280e66a1d60509e2 Mon Sep 17 00:00:00 2001 From: Denis Isaev Date: Mon, 18 Jun 2018 23:41:22 +0300 Subject: [PATCH] Analyze project even if fatal import dir error Before that fix golangci-lint couldn't run analysis if in any dir there was go file with corrupted `package` or `import` statement. After that fix it will only warn about such files and continue analysis. But it will fail analysis after finding 10 packages with such errors to not being too noisy in case of internal error. --- pkg/packages/resolver.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/pkg/packages/resolver.go b/pkg/packages/resolver.go index f281c59e..19455a77 100644 --- a/pkg/packages/resolver.go +++ b/pkg/packages/resolver.go @@ -21,7 +21,8 @@ type Resolver struct { skippedDirs []string log logutils.Log - wd string // working directory + wd string // working directory + importErrorsOccured int // count of errors because too bad files in packages } func NewResolver(buildTags, excludeDirs []string, log logutils.Log) (*Resolver, error) { @@ -79,7 +80,7 @@ func (r *Resolver) resolveRecursively(root string, prog *Program) error { fis, err := ioutil.ReadDir(root) if err != nil { - return fmt.Errorf("can't resolve dir %s: %s", root, err) + return fmt.Errorf("can't read dir %s: %s", root, err) } // TODO: pass cached fis to build.Context @@ -113,7 +114,7 @@ func (r *Resolver) resolveRecursively(root string, prog *Program) error { return nil } -func (r Resolver) resolveDir(dir string, prog *Program) error { +func (r *Resolver) resolveDir(dir string, prog *Program) error { // TODO: fork build.Import to reuse AST parsing bp, err := prog.bctx.ImportDir(dir, build.ImportComment|build.IgnoreVendor) if err != nil { @@ -122,7 +123,14 @@ func (r Resolver) resolveDir(dir string, prog *Program) error { return nil } - return fmt.Errorf("can't resolve dir %s: %s", dir, err) + err = fmt.Errorf("can't import dir %q: %s", dir, err) + r.importErrorsOccured++ + if r.importErrorsOccured >= 10 { + return err + } + + r.log.Warnf("Can't analyze dir %q: %s", dir, err) + return nil } pkg := Package{