From 3039648dc982e3bd8e9b7f93f5be3c736f060ba7 Mon Sep 17 00:00:00 2001 From: Aleksandr Razumov Date: Wed, 8 Jan 2020 01:57:41 +0300 Subject: [PATCH 1/2] Do not use original packages at all --- pkg/golinters/goanalysis/linter.go | 27 +++++++------------------- pkg/golinters/goanalysis/metalinter.go | 4 ---- pkg/golinters/goanalysis/runner.go | 1 + pkg/golinters/unused.go | 3 +-- pkg/lint/linter/context.go | 4 ---- pkg/lint/load.go | 7 +------ 6 files changed, 10 insertions(+), 36 deletions(-) diff --git a/pkg/golinters/goanalysis/linter.go b/pkg/golinters/goanalysis/linter.go index 307a115696a2..9a603d0b3bee 100644 --- a/pkg/golinters/goanalysis/linter.go +++ b/pkg/golinters/goanalysis/linter.go @@ -54,24 +54,19 @@ func (loadMode LoadMode) String() string { } type Linter struct { - name, desc string - analyzers []*analysis.Analyzer - cfg map[string]map[string]interface{} - issuesReporter func(*linter.Context) []Issue - contextSetter func(*linter.Context) - loadMode LoadMode - needUseOriginalPackages bool - isTypecheckModeOn bool + name, desc string + analyzers []*analysis.Analyzer + cfg map[string]map[string]interface{} + issuesReporter func(*linter.Context) []Issue + contextSetter func(*linter.Context) + loadMode LoadMode + isTypecheckModeOn bool } func NewLinter(name, desc string, analyzers []*analysis.Analyzer, cfg map[string]map[string]interface{}) *Linter { return &Linter{name: name, desc: desc, analyzers: analyzers, cfg: cfg} } -func (lnt *Linter) UseOriginalPackages() { - lnt.needUseOriginalPackages = true -} - func (lnt *Linter) SetTypecheckMode() { lnt.isTypecheckModeOn = true } @@ -264,10 +259,6 @@ func (lnt *Linter) getAnalyzers() []*analysis.Analyzer { return lnt.analyzers } -func (lnt *Linter) useOriginalPackages() bool { - return lnt.needUseOriginalPackages -} - func (lnt *Linter) isTypecheckMode() bool { return lnt.isTypecheckModeOn } @@ -287,7 +278,6 @@ type runAnalyzersConfig interface { getName() string getLinterNameForDiagnostic(*Diagnostic) string getAnalyzers() []*analysis.Analyzer - useOriginalPackages() bool isTypecheckMode() bool reportIssues(*linter.Context) []Issue getLoadMode() LoadMode @@ -437,9 +427,6 @@ func runAnalyzers(cfg runAnalyzersConfig, lintCtx *linter.Context) ([]result.Iss runner := newRunner(cfg.getName(), log, lintCtx.PkgCache, lintCtx.LoadGuard, cfg.getLoadMode(), sw) pkgs := lintCtx.Packages - if cfg.useOriginalPackages() { - pkgs = lintCtx.OriginalPackages - } issues, pkgsFromCache := loadIssuesFromCache(pkgs, lintCtx, cfg.getAnalyzers()) var pkgsToAnalyze []*packages.Package diff --git a/pkg/golinters/goanalysis/metalinter.go b/pkg/golinters/goanalysis/metalinter.go index 5975e2057a19..8a36956d298b 100644 --- a/pkg/golinters/goanalysis/metalinter.go +++ b/pkg/golinters/goanalysis/metalinter.go @@ -60,10 +60,6 @@ func (ml MetaLinter) getName() string { return "metalinter" } -func (ml MetaLinter) useOriginalPackages() bool { - return false // `unused` can't be run by this metalinter -} - func (ml MetaLinter) reportIssues(lintCtx *linter.Context) []Issue { var ret []Issue for _, lnt := range ml.linters { diff --git a/pkg/golinters/goanalysis/runner.go b/pkg/golinters/goanalysis/runner.go index 97c7f313c8a8..8e7f55383398 100644 --- a/pkg/golinters/goanalysis/runner.go +++ b/pkg/golinters/goanalysis/runner.go @@ -505,6 +505,7 @@ func (act *action) analyze() { var failed []string for _, dep := range act.deps { if dep.err != nil { + act.r.log.Warnf("Failed dependency %s: %s", dep, dep.err) failed = append(failed, dep.String()) } } diff --git a/pkg/golinters/unused.go b/pkg/golinters/unused.go index 5f6d8371c572..ecdb1570bc58 100644 --- a/pkg/golinters/unused.go +++ b/pkg/golinters/unused.go @@ -25,7 +25,7 @@ func NewUnused() *goanalysis.Linter { nil, ).WithIssuesReporter(func(lintCtx *linter.Context) []goanalysis.Issue { typesToPkg := map[*types.Package]*packages.Package{} - for _, pkg := range lintCtx.OriginalPackages { + for _, pkg := range lintCtx.Packages { typesToPkg[pkg.Types] = pkg } @@ -52,6 +52,5 @@ func NewUnused() *goanalysis.Linter { }).WithContextSetter(func(lintCtx *linter.Context) { u.WholeProgram = lintCtx.Settings().Unused.CheckExported }).WithLoadMode(goanalysis.LoadModeWholeProgram) - lnt.UseOriginalPackages() return lnt } diff --git a/pkg/lint/linter/context.go b/pkg/lint/linter/context.go index 1c4902e1889b..25c45afad2b1 100644 --- a/pkg/lint/linter/context.go +++ b/pkg/lint/linter/context.go @@ -14,10 +14,6 @@ type Context struct { // Packages are deduplicated (test and normal packages) packages Packages []*packages.Package - // OriginalPackages aren't deduplicated: they contain both normal and test - // version for each of packages - OriginalPackages []*packages.Package - Cfg *config.Config FileCache *fsutils.FileCache LineCache *fsutils.LineCache diff --git a/pkg/lint/load.go b/pkg/lint/load.go index de0ab4117c30..107d4b687d26 100644 --- a/pkg/lint/load.go +++ b/pkg/lint/load.go @@ -289,12 +289,7 @@ func (cl *ContextLoader) Load(ctx context.Context, linters []*linter.Config) (*l } ret := &linter.Context{ - Packages: deduplicatedPkgs, - - // At least `unused` linters works properly only on original (not deduplicated) packages, - // see https://github.com/golangci/golangci-lint/pull/585. - OriginalPackages: pkgs, - + Packages: deduplicatedPkgs, Cfg: cl.cfg, Log: cl.log, FileCache: cl.fileCache, From c0cf8444f502ee84f569667820ec8420fe576976 Mon Sep 17 00:00:00 2001 From: Aleksandr Razumov Date: Wed, 8 Jan 2020 02:05:01 +0300 Subject: [PATCH 2/2] Change unused load mode to types info --- pkg/golinters/goanalysis/runner.go | 1 - pkg/golinters/unused.go | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/golinters/goanalysis/runner.go b/pkg/golinters/goanalysis/runner.go index 8e7f55383398..97c7f313c8a8 100644 --- a/pkg/golinters/goanalysis/runner.go +++ b/pkg/golinters/goanalysis/runner.go @@ -505,7 +505,6 @@ func (act *action) analyze() { var failed []string for _, dep := range act.deps { if dep.err != nil { - act.r.log.Warnf("Failed dependency %s: %s", dep, dep.err) failed = append(failed, dep.String()) } } diff --git a/pkg/golinters/unused.go b/pkg/golinters/unused.go index ecdb1570bc58..d93c2b79f7f1 100644 --- a/pkg/golinters/unused.go +++ b/pkg/golinters/unused.go @@ -51,6 +51,6 @@ func NewUnused() *goanalysis.Linter { return issues }).WithContextSetter(func(lintCtx *linter.Context) { u.WholeProgram = lintCtx.Settings().Unused.CheckExported - }).WithLoadMode(goanalysis.LoadModeWholeProgram) + }).WithLoadMode(goanalysis.LoadModeTypesInfo) return lnt }