aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/go/internal/load/pkg.go
diff options
context:
space:
mode:
authorJay Conrod <jayconrod@google.com>2020-04-21 11:29:51 -0400
committerJay Conrod <jayconrod@google.com>2020-04-21 17:11:39 +0000
commit65f46486a1f27017bc991e132725e8d939d069dd (patch)
tree0af71302dce726590a0ccfabd4b0ceba83f2d28b /src/cmd/go/internal/load/pkg.go
parent768201729df89a28aae2cc5e41a33ffcb759c113 (diff)
downloadgo-65f46486a1f27017bc991e132725e8d939d069dd.tar.gz
go-65f46486a1f27017bc991e132725e8d939d069dd.zip
cmd/go/internal/load: load imports for all package data errors
go/build.Import can return errors for many different reasons like inconsistent package clauses or errors parsing build constraints. It will still return a *build.Package with imports from files it was able to process. Package.load should load these imports, even after an unknown error. There is already a special case for scanner.ErrorList (parse error). This CL expands that behavior for all errors. Fixes #38568 Change-Id: I871827299c556f1a9a5b12e7755b221e9d8c6e0e Reviewed-on: https://go-review.googlesource.com/c/go/+/229243 Reviewed-by: Bryan C. Mills <bcmills@google.com>
Diffstat (limited to 'src/cmd/go/internal/load/pkg.go')
-rw-r--r--src/cmd/go/internal/load/pkg.go12
1 files changed, 2 insertions, 10 deletions
diff --git a/src/cmd/go/internal/load/pkg.go b/src/cmd/go/internal/load/pkg.go
index 3c018a0f7f..6605c62eba 100644
--- a/src/cmd/go/internal/load/pkg.go
+++ b/src/cmd/go/internal/load/pkg.go
@@ -217,10 +217,7 @@ func (e *NoGoError) Error() string {
// setLoadPackageDataError returns true if it's safe to load information about
// imported packages, for example, if there was a parse error loading imports
// in one file, but other files are okay.
-//
-// TODO(jayconrod): we should probably return nothing and always try to load
-// imported packages.
-func (p *Package) setLoadPackageDataError(err error, path string, stk *ImportStack) (canLoadImports bool) {
+func (p *Package) setLoadPackageDataError(err error, path string, stk *ImportStack) {
// Include the path on the import stack unless the error includes it already.
errHasPath := false
if impErr, ok := err.(ImportPathError); ok && impErr.ImportPath() == path {
@@ -263,7 +260,6 @@ func (p *Package) setLoadPackageDataError(err error, path string, stk *ImportSta
scanPos.Filename = base.ShortPath(scanPos.Filename)
pos = scanPos.String()
err = errors.New(scanErr[0].Msg)
- canLoadImports = true
}
p.Error = &PackageError{
@@ -271,7 +267,6 @@ func (p *Package) setLoadPackageDataError(err error, path string, stk *ImportSta
Pos: pos,
Err: err,
}
- return canLoadImports
}
// Resolve returns the resolved version of imports,
@@ -1601,10 +1596,7 @@ func (p *Package) load(path string, stk *ImportStack, bp *build.Package, err err
if err != nil {
p.Incomplete = true
- canLoadImports := p.setLoadPackageDataError(err, path, stk)
- if !canLoadImports {
- return
- }
+ p.setLoadPackageDataError(err, path, stk)
}
useBindir := p.Name == "main"