Skip to content

Commit 8be292f

Browse files
committed
review
1 parent 2ec30b0 commit 8be292f

File tree

1 file changed

+40
-26
lines changed

1 file changed

+40
-26
lines changed

pkg/goanalysis/runner_loadingpackage.go

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -239,34 +239,11 @@ func (lp *loadingPackage) loadFromExportData() error {
239239
return fmt.Errorf("dependency %q hasn't been loaded yet", path)
240240
}
241241
}
242-
if pkg.ExportFile == "" {
243-
seen := make(map[string]struct{})
244242

245-
count := 0
246-
var sb strings.Builder
247-
packages.Visit([]*packages.Package{pkg}, func(p *packages.Package) bool {
248-
if _, ok := seen[p.ID]; ok {
249-
return false
250-
}
251-
if count >= 3 {
252-
return false
253-
}
254-
seen[p.ID] = struct{}{}
255-
// Optionally skip test variants:
256-
if p.ForTest == "" && !strings.HasSuffix(p.PkgPath, ".test") {
257-
for _, e := range p.Errors {
258-
fmt.Fprintf(&sb, "error in package %q: %v\n", p.ID, e.Msg)
259-
count++
260-
}
261-
}
262-
return true // keep walking into p.Imports
263-
}, nil)
264-
err := fmt.Sprintf("no export data for %q", pkg.ID)
265-
if sb.Len() > 0 {
266-
err += fmt.Sprintf(" because of error in imported package(s): %v", sb.String())
267-
}
268-
return errors.New(err)
243+
if pkg.ExportFile == "" {
244+
return noExportDataError(pkg)
269245
}
246+
270247
f, err := os.Open(pkg.ExportFile)
271248
if err != nil {
272249
return err
@@ -357,6 +334,7 @@ func (lp *loadingPackage) loadImportedPackageWithFacts(loadMode LoadMode) error
357334
if srcErr := lp.loadFromSource(loadMode); srcErr != nil {
358335
return srcErr
359336
}
337+
360338
// Make sure this package can't be imported successfully
361339
pkg.Errors = append(pkg.Errors, packages.Error{
362340
Pos: "-",
@@ -578,3 +556,39 @@ func sizeOfReflectValueTreeBytes(rv reflect.Value, visitedPtrs map[uintptr]struc
578556
panic("unknown rv of type " + rv.String())
579557
}
580558
}
559+
560+
func noExportDataError(pkg *packages.Package) error {
561+
seen := make(map[string]struct{})
562+
563+
const limit = 3
564+
565+
count := 0
566+
567+
var sb strings.Builder
568+
569+
packages.Visit([]*packages.Package{pkg}, func(p *packages.Package) bool {
570+
if count >= limit {
571+
return false
572+
}
573+
574+
if _, ok := seen[p.ID]; ok {
575+
return false
576+
}
577+
578+
seen[p.ID] = struct{}{}
579+
580+
for _, e := range p.Errors {
581+
fmt.Fprintf(&sb, "\terror in package %q: %s\n", p.ID, e.Msg)
582+
count++
583+
}
584+
585+
return true
586+
}, nil)
587+
588+
msg := fmt.Sprintf("no export data for %q", pkg.ID)
589+
if sb.Len() > 0 {
590+
msg += fmt.Sprintf(", maybe because of error(s) in imported package(s):\n%s", sb.String())
591+
}
592+
593+
return errors.New(msg)
594+
}

0 commit comments

Comments
 (0)