diff --git a/internal/lsp/source/analysis.go b/internal/lsp/source/analysis.go index b1e777f5..c599e674 100644 --- a/internal/lsp/source/analysis.go +++ b/internal/lsp/source/analysis.go @@ -155,6 +155,8 @@ func (act *Action) execOnce(ctx context.Context, fset *token.FileSet) error { ExportObjectFact: act.exportObjectFact, ImportPackageFact: act.importPackageFact, ExportPackageFact: act.exportPackageFact, + AllObjectFacts: act.allObjectFacts, + AllPackageFacts: act.allPackageFacts, } act.pass = pass @@ -252,6 +254,15 @@ func (act *Action) exportObjectFact(obj types.Object, fact analysis.Fact) { act.objectFacts[key] = fact // clobber any existing entry } +// allObjectFacts implements Pass.AllObjectFacts. +func (act *Action) allObjectFacts() []analysis.ObjectFact { + facts := make([]analysis.ObjectFact, 0, len(act.objectFacts)) + for k := range act.objectFacts { + facts = append(facts, analysis.ObjectFact{Object: k.obj, Fact: act.objectFacts[k]}) + } + return facts +} + // importPackageFact implements Pass.ImportPackageFact. // Given a non-nil pointer ptr of type *T, where *T satisfies Fact, // fact copies the fact value to *ptr. @@ -284,3 +295,12 @@ func factType(fact analysis.Fact) reflect.Type { } return t } + +// allObjectFacts implements Pass.AllObjectFacts. +func (act *Action) allPackageFacts() []analysis.PackageFact { + facts := make([]analysis.PackageFact, 0, len(act.packageFacts)) + for k := range act.packageFacts { + facts = append(facts, analysis.PackageFact{Package: k.pkg, Fact: act.packageFacts[k]}) + } + return facts +} diff --git a/internal/lsp/source/diagnostics.go b/internal/lsp/source/diagnostics.go index b7b74b7a..f15c6c9a 100644 --- a/internal/lsp/source/diagnostics.go +++ b/internal/lsp/source/diagnostics.go @@ -234,33 +234,35 @@ func singleDiagnostic(uri span.URI, format string, a ...interface{}) map[span.UR } } -func runAnalyses(ctx context.Context, v View, pkg Package, disabledAnalyses map[string]struct{}, report func(a *analysis.Analyzer, diag analysis.Diagnostic) error) error { +var Analyzers = []*analysis.Analyzer{ // The traditional vet suite: + asmdecl.Analyzer, + assign.Analyzer, + atomic.Analyzer, + atomicalign.Analyzer, + bools.Analyzer, + buildtag.Analyzer, + cgocall.Analyzer, + composite.Analyzer, + copylock.Analyzer, + httpresponse.Analyzer, + loopclosure.Analyzer, + lostcancel.Analyzer, + nilfunc.Analyzer, + printf.Analyzer, + shift.Analyzer, + stdmethods.Analyzer, + structtag.Analyzer, + tests.Analyzer, + unmarshal.Analyzer, + unreachable.Analyzer, + unsafeptr.Analyzer, + unusedresult.Analyzer, +} + +func runAnalyses(ctx context.Context, v View, pkg Package, disabledAnalyses map[string]struct{}, report func(a *analysis.Analyzer, diag analysis.Diagnostic) error) error { var analyzers []*analysis.Analyzer - for _, a := range []*analysis.Analyzer{ - asmdecl.Analyzer, - assign.Analyzer, - atomic.Analyzer, - atomicalign.Analyzer, - bools.Analyzer, - buildtag.Analyzer, - cgocall.Analyzer, - composite.Analyzer, - copylock.Analyzer, - httpresponse.Analyzer, - loopclosure.Analyzer, - lostcancel.Analyzer, - nilfunc.Analyzer, - printf.Analyzer, - shift.Analyzer, - stdmethods.Analyzer, - structtag.Analyzer, - tests.Analyzer, - unmarshal.Analyzer, - unreachable.Analyzer, - unsafeptr.Analyzer, - unusedresult.Analyzer, - } { + for _, a := range Analyzers { if _, ok := disabledAnalyses[a.Name]; ok { continue }