Update and fix staticcheck
This commit is contained in:
43
vendor/honnef.co/go/tools/loader/loader.go
vendored
43
vendor/honnef.co/go/tools/loader/loader.go
vendored
@ -1,6 +1,7 @@
|
||||
package loader
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"go/ast"
|
||||
"go/parser"
|
||||
@ -9,22 +10,17 @@ import (
|
||||
"go/types"
|
||||
"log"
|
||||
"os"
|
||||
"sync"
|
||||
|
||||
"golang.org/x/tools/go/gcexportdata"
|
||||
"golang.org/x/tools/go/packages"
|
||||
)
|
||||
|
||||
type Loader struct {
|
||||
exportMu sync.RWMutex
|
||||
}
|
||||
|
||||
// Graph resolves patterns and returns packages with all the
|
||||
// information required to later load type information, and optionally
|
||||
// syntax trees.
|
||||
//
|
||||
// The provided config can set any setting with the exception of Mode.
|
||||
func (ld *Loader) Graph(cfg packages.Config, patterns ...string) ([]*packages.Package, error) {
|
||||
func Graph(cfg packages.Config, patterns ...string) ([]*packages.Package, error) {
|
||||
cfg.Mode = packages.NeedName | packages.NeedImports | packages.NeedDeps | packages.NeedExportsFile | packages.NeedFiles | packages.NeedCompiledGoFiles | packages.NeedTypesSizes
|
||||
pkgs, err := packages.Load(&cfg, patterns...)
|
||||
if err != nil {
|
||||
@ -34,15 +30,29 @@ func (ld *Loader) Graph(cfg packages.Config, patterns ...string) ([]*packages.Pa
|
||||
packages.Visit(pkgs, nil, func(pkg *packages.Package) {
|
||||
pkg.Fset = fset
|
||||
})
|
||||
return pkgs, nil
|
||||
|
||||
n := 0
|
||||
for _, pkg := range pkgs {
|
||||
if len(pkg.CompiledGoFiles) == 0 && len(pkg.Errors) == 0 && pkg.PkgPath != "unsafe" {
|
||||
// If a package consists only of test files, then
|
||||
// go/packages incorrectly(?) returns an empty package for
|
||||
// the non-test variant. Get rid of those packages. See
|
||||
// #646.
|
||||
//
|
||||
// Do not, however, skip packages that have errors. Those,
|
||||
// too, may have no files, but we want to print the
|
||||
// errors.
|
||||
continue
|
||||
}
|
||||
pkgs[n] = pkg
|
||||
n++
|
||||
}
|
||||
return pkgs[:n], nil
|
||||
}
|
||||
|
||||
// LoadFromExport loads a package from export data. All of its
|
||||
// dependencies must have been loaded already.
|
||||
func (ld *Loader) LoadFromExport(pkg *packages.Package) error {
|
||||
ld.exportMu.Lock()
|
||||
defer ld.exportMu.Unlock()
|
||||
|
||||
func LoadFromExport(pkg *packages.Package) error {
|
||||
pkg.IllTyped = true
|
||||
for path, pkg := range pkg.Imports {
|
||||
if pkg.Types == nil {
|
||||
@ -87,10 +97,7 @@ func (ld *Loader) LoadFromExport(pkg *packages.Package) error {
|
||||
|
||||
// LoadFromSource loads a package from source. All of its dependencies
|
||||
// must have been loaded already.
|
||||
func (ld *Loader) LoadFromSource(pkg *packages.Package) error {
|
||||
ld.exportMu.RLock()
|
||||
defer ld.exportMu.RUnlock()
|
||||
|
||||
func LoadFromSource(pkg *packages.Package) error {
|
||||
pkg.IllTyped = true
|
||||
pkg.Types = types.NewPackage(pkg.PkgPath, pkg.Name)
|
||||
|
||||
@ -121,6 +128,12 @@ func (ld *Loader) LoadFromSource(pkg *packages.Package) error {
|
||||
if path == "unsafe" {
|
||||
return types.Unsafe, nil
|
||||
}
|
||||
if path == "C" {
|
||||
// go/packages doesn't tell us that cgo preprocessing
|
||||
// failed. When we subsequently try to parse the package,
|
||||
// we'll encounter the raw C import.
|
||||
return nil, errors.New("cgo preprocessing failed")
|
||||
}
|
||||
imp := pkg.Imports[path]
|
||||
if imp == nil {
|
||||
return nil, nil
|
||||
|
Reference in New Issue
Block a user