@@ -304,7 +304,7 @@ func (p *Package) setLoadPackageDataError(err error, path string, stk *ImportSta
304
304
}
305
305
306
306
if path != stk .Top () {
307
- p = setErrorPos ( p , importPos )
307
+ p . Error . setPos ( importPos )
308
308
}
309
309
}
310
310
@@ -447,6 +447,15 @@ func (p *PackageError) MarshalJSON() ([]byte, error) {
447
447
return json .Marshal (perr )
448
448
}
449
449
450
+ func (p * PackageError ) setPos (posList []token.Position ) {
451
+ if len (posList ) == 0 {
452
+ return
453
+ }
454
+ pos := posList [0 ]
455
+ pos .Filename = base .ShortPath (pos .Filename )
456
+ p .Pos = pos .String ()
457
+ }
458
+
450
459
// ImportPathError is a type of error that prevents a package from being loaded
451
460
// for a given import path. When such a package is loaded, a *Package is
452
461
// returned with Err wrapping an ImportPathError: the error is attached to
@@ -695,17 +704,19 @@ func loadImport(ctx context.Context, pre *preload, path, srcDir string, parent *
695
704
Err : ImportErrorf (path , "non-canonical import path %q: should be %q" , path , pathpkg .Clean (path )),
696
705
}
697
706
p .Incomplete = true
698
- setErrorPos ( p , importPos )
707
+ p . Error . setPos ( importPos )
699
708
}
700
709
}
701
710
702
711
// Checked on every import because the rules depend on the code doing the importing.
703
712
if perr := disallowInternal (srcDir , parent , parentPath , p , stk ); perr != p {
704
- return setErrorPos (perr , importPos )
713
+ perr .Error .setPos (importPos )
714
+ return perr
705
715
}
706
716
if mode & ResolveImport != 0 {
707
717
if perr := disallowVendor (srcDir , path , parentPath , p , stk ); perr != p {
708
- return setErrorPos (perr , importPos )
718
+ perr .Error .setPos (importPos )
719
+ return perr
709
720
}
710
721
}
711
722
@@ -715,7 +726,8 @@ func loadImport(ctx context.Context, pre *preload, path, srcDir string, parent *
715
726
ImportStack : stk .Copy (),
716
727
Err : ImportErrorf (path , "import %q is a program, not an importable package" , path ),
717
728
}
718
- return setErrorPos (& perr , importPos )
729
+ perr .Error .setPos (importPos )
730
+ return & perr
719
731
}
720
732
721
733
if p .Internal .Local && parent != nil && ! parent .Internal .Local {
@@ -730,21 +742,13 @@ func loadImport(ctx context.Context, pre *preload, path, srcDir string, parent *
730
742
ImportStack : stk .Copy (),
731
743
Err : err ,
732
744
}
733
- return setErrorPos (& perr , importPos )
745
+ perr .Error .setPos (importPos )
746
+ return & perr
734
747
}
735
748
736
749
return p
737
750
}
738
751
739
- func setErrorPos (p * Package , importPos []token.Position ) * Package {
740
- if len (importPos ) > 0 {
741
- pos := importPos [0 ]
742
- pos .Filename = base .ShortPath (pos .Filename )
743
- p .Error .Pos = pos .String ()
744
- }
745
- return p
746
- }
747
-
748
752
// loadPackageData loads information needed to construct a *Package. The result
749
753
// is cached, and later calls to loadPackageData for the same package will return
750
754
// the same data.
@@ -1649,7 +1653,7 @@ func (p *Package) load(ctx context.Context, path string, stk *ImportStack, impor
1649
1653
// must be either in an explicit command-line argument,
1650
1654
// or on the importer side (indicated by a non-empty importPos).
1651
1655
if path != stk .Top () && len (importPos ) > 0 {
1652
- p = setErrorPos ( p , importPos )
1656
+ p . Error . setPos ( importPos )
1653
1657
}
1654
1658
}
1655
1659
}
0 commit comments