internal/lsp: update analysis runner for new features
This adds support for the AllObjectFacts and AllPackageFacts features that were added to the analysis library. It also moves the list of analyzers to an exported global so it can be added to easily. Change-Id: Ibbe81b17b190d04a0e49510c23558430bc03ca70 Reviewed-on: https://go-review.googlesource.com/c/tools/+/182177 Run-TryBot: Ian Cottrell <iancottrell@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Michael Matloob <matloob@golang.org>
This commit is contained in:
parent
ed0dc45079
commit
1edc8e83c8
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue