@@ -239,34 +239,11 @@ func (lp *loadingPackage) loadFromExportData() error {
239
239
return fmt .Errorf ("dependency %q hasn't been loaded yet" , path )
240
240
}
241
241
}
242
- if pkg .ExportFile == "" {
243
- seen := make (map [string ]struct {})
244
242
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 )
269
245
}
246
+
270
247
f , err := os .Open (pkg .ExportFile )
271
248
if err != nil {
272
249
return err
@@ -357,6 +334,7 @@ func (lp *loadingPackage) loadImportedPackageWithFacts(loadMode LoadMode) error
357
334
if srcErr := lp .loadFromSource (loadMode ); srcErr != nil {
358
335
return srcErr
359
336
}
337
+
360
338
// Make sure this package can't be imported successfully
361
339
pkg .Errors = append (pkg .Errors , packages.Error {
362
340
Pos : "-" ,
@@ -578,3 +556,39 @@ func sizeOfReflectValueTreeBytes(rv reflect.Value, visitedPtrs map[uintptr]struc
578
556
panic ("unknown rv of type " + rv .String ())
579
557
}
580
558
}
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 , "\t error 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