diff --git a/internal/mod/modpkgload/pkgload.go b/internal/mod/modpkgload/pkgload.go index 9d5e8ab28..e384087cc 100644 --- a/internal/mod/modpkgload/pkgload.go +++ b/internal/mod/modpkgload/pkgload.go @@ -109,8 +109,9 @@ type Package struct { flags atomicLoadPkgFlags // Populated by [loader.load]. - mod module.Version // module providing package - modRoot module.SourceLoc // root location of module + mod module.Version // module providing package + modRoot module.SourceLoc // root location of module + files []modimports.ModuleFile locs []module.SourceLoc // location of source code directories err error // error loading package imports []*Package // packages imported by this one @@ -133,6 +134,10 @@ func (pkg *Package) Locations() []module.SourceLoc { return pkg.locs } +func (pkg *Package) Files() []modimports.ModuleFile { + return pkg.files +} + func (pkg *Package) Error() error { return pkg.err } @@ -295,6 +300,7 @@ func (pkgs *Packages) load(ctx context.Context, pkg *Package) { importsMap := make(map[string]bool) foundPackageFile := false excludedPackageFiles := 0 + var files []modimports.ModuleFile for _, loc := range pkg.locs { // Layer an iterator whose yield function keeps track of whether we have seen // a single valid CUE file in the package directory. @@ -311,6 +317,7 @@ func (pkgs *Packages) load(ctx context.Context, pkg *Package) { return true } foundPackageFile = true + files = append(files, mf) return yield(mf, err) }) } @@ -331,6 +338,7 @@ func (pkgs *Packages) load(ctx context.Context, pkg *Package) { } return } + pkg.files = files // Make the algorithm deterministic for tests. imports := slices.Sorted(maps.Keys(importsMap)) diff --git a/internal/mod/modpkgload/pkgload_test.go b/internal/mod/modpkgload/pkgload_test.go index bb6c30c7d..efe2b683c 100644 --- a/internal/mod/modpkgload/pkgload_test.go +++ b/internal/mod/modpkgload/pkgload_test.go @@ -84,6 +84,9 @@ func TestLoadPackages(t *testing.T) { for _, loc := range pkg.Locations() { printf("\tlocation: %v\n", loc.Dir) } + for _, file := range pkg.Files() { + printf("\tfile: %v: %v\n", file.FilePath, file.Syntax.PackageName()) + } if imps := pkg.Imports(); len(imps) > 0 { printf("\timports:\n") for _, imp := range imps { diff --git a/internal/mod/modpkgload/testdata/localpackage.txtar b/internal/mod/modpkgload/testdata/localpackage.txtar index 7b7cabcd0..4691d413c 100644 --- a/internal/mod/modpkgload/testdata/localpackage.txtar +++ b/internal/mod/modpkgload/testdata/localpackage.txtar @@ -9,6 +9,7 @@ main.test@v0:main mod: main.test@v0 external: false location: . + file: main.cue: main imports: other.com/blah other.com/blah @@ -16,6 +17,7 @@ other.com/blah mod: local external: true location: cue.mod/gen/other.com/blah + file: cue.mod/gen/other.com/blah/x.cue: blah -- main.cue -- package main import "other.com/blah" diff --git a/internal/mod/modpkgload/testdata/localpackageambiguous.txtar b/internal/mod/modpkgload/testdata/localpackageambiguous.txtar index 1ed0e3347..8a5a2e092 100644 --- a/internal/mod/modpkgload/testdata/localpackageambiguous.txtar +++ b/internal/mod/modpkgload/testdata/localpackageambiguous.txtar @@ -17,6 +17,7 @@ main.test@v0:main mod: main.test@v0 external: false location: . + file: main.cue: main imports: example.com/blah example.com/blah @@ -24,6 +25,7 @@ example.com/blah mod: local external: true location: cue.mod/gen/example.com/blah + file: cue.mod/gen/example.com/blah/x.cue: blah -- test1/initial-requirements -- main.test@v0 example.com@v0.0.1 @@ -36,6 +38,7 @@ main.test@v0:main mod: main.test@v0 external: false location: . + file: main.cue: main imports: example.com/blah example.com/blah diff --git a/internal/mod/modpkgload/testdata/localpackagemultipledirs.txtar b/internal/mod/modpkgload/testdata/localpackagemultipledirs.txtar index c1b394748..c5b098dd4 100644 --- a/internal/mod/modpkgload/testdata/localpackagemultipledirs.txtar +++ b/internal/mod/modpkgload/testdata/localpackagemultipledirs.txtar @@ -9,6 +9,7 @@ main.test@v0:main mod: main.test@v0 external: false location: . + file: main.cue: main imports: other.com/blah other.com/blah @@ -18,6 +19,9 @@ other.com/blah location: cue.mod/gen/other.com/blah location: cue.mod/usr/other.com/blah location: cue.mod/pkg/other.com/blah + file: cue.mod/gen/other.com/blah/x.cue: blah + file: cue.mod/usr/other.com/blah/x.cue: blah + file: cue.mod/pkg/other.com/blah/x.cue: blah -- main.cue -- package main import "other.com/blah" diff --git a/internal/mod/modpkgload/testdata/multidir.txtar b/internal/mod/modpkgload/testdata/multidir.txtar index cce7d899d..b5d462c95 100644 --- a/internal/mod/modpkgload/testdata/multidir.txtar +++ b/internal/mod/modpkgload/testdata/multidir.txtar @@ -10,6 +10,7 @@ main.test@v0:main mod: main.test@v0 external: false location: . + file: main.cue: main imports: example.com/blah@v0 example.com/blah@v0 @@ -17,6 +18,8 @@ example.com/blah@v0 mod: example.com@v0.0.1 external: true location: _registry/example.com_v0.0.1/blah + file: _registry/example.com_v0.0.1/blah/blah.cue: blah + file: _registry/example.com_v0.0.1/x.cue: blah imports: foo.com/bar/hello/goodbye@v0 foo.com/bar/hello/goodbye@v0 diff --git a/internal/mod/modpkgload/testdata/nocuefiles.txtar b/internal/mod/modpkgload/testdata/nocuefiles.txtar index 64b781ac0..509f59bb4 100644 --- a/internal/mod/modpkgload/testdata/nocuefiles.txtar +++ b/internal/mod/modpkgload/testdata/nocuefiles.txtar @@ -10,6 +10,7 @@ main.test@v0:main mod: main.test@v0 external: false location: . + file: main.cue: main imports: example.com/blah@v0 example.com/blah@v0 diff --git a/internal/mod/modpkgload/testdata/packagegranularity.txtar b/internal/mod/modpkgload/testdata/packagegranularity.txtar index 14d7fa2c4..088333bff 100644 --- a/internal/mod/modpkgload/testdata/packagegranularity.txtar +++ b/internal/mod/modpkgload/testdata/packagegranularity.txtar @@ -12,6 +12,7 @@ main.test@v0:main mod: main.test@v0 external: false location: . + file: main.cue: main imports: example.com/blah@v0 example.com/blah@v0 @@ -31,6 +32,7 @@ main.test@v0:main mod: main.test@v0 external: false location: . + file: main.cue: main imports: example.com/blah@v0 example.com/blah@v0 @@ -38,6 +40,7 @@ example.com/blah@v0 mod: example.com@v0.0.1 external: true location: _registry/example.com_v0.0.1/blah + file: _registry/example.com_v0.0.1/blah/blah.cue: blah imports: foo.com/bar/hello/goodbye@v0 foo.com/bar/hello/goodbye@v0 @@ -45,6 +48,7 @@ foo.com/bar/hello/goodbye@v0 mod: foo.com/bar@v0.0.1 external: true location: _registry/foo.com_bar_v0.0.1/hello/goodbye + file: _registry/foo.com_bar_v0.0.1/hello/goodbye/hello.cue: goodbye -- main.cue -- package main import "example.com/blah@v0" diff --git a/internal/mod/modpkgload/testdata/simple.txtar b/internal/mod/modpkgload/testdata/simple.txtar index 595aad759..11a734719 100644 --- a/internal/mod/modpkgload/testdata/simple.txtar +++ b/internal/mod/modpkgload/testdata/simple.txtar @@ -9,6 +9,7 @@ main.test@v0:main mod: main.test@v0 external: false location: . + file: main.cue: main imports: example.com/blah@v0 example.com/blah@v0 @@ -27,6 +28,7 @@ main.test@v0:main mod: main.test@v0 external: false location: . + file: main.cue: main imports: example.com/blah@v0 example.com/blah@v0 @@ -34,6 +36,7 @@ example.com/blah@v0 mod: example.com@v0.0.1 external: true location: _registry/example.com_v0.0.1/blah + file: _registry/example.com_v0.0.1/blah/blah.cue: blah imports: foo.com/bar/hello/goodbye@v0 foo.com/bar/hello/goodbye@v0 diff --git a/internal/mod/modpkgload/testdata/withdefaultmajorversions.txtar b/internal/mod/modpkgload/testdata/withdefaultmajorversions.txtar index 2b998348b..65c388015 100644 --- a/internal/mod/modpkgload/testdata/withdefaultmajorversions.txtar +++ b/internal/mod/modpkgload/testdata/withdefaultmajorversions.txtar @@ -11,6 +11,7 @@ main.test@v0:main mod: main.test@v0 external: false location: . + file: main.cue: main imports: example.com/blah example.com/blah @@ -18,6 +19,7 @@ example.com/blah mod: example.com@v0.0.1 external: true location: _registry/example.com_v0.0.1/blah + file: _registry/example.com_v0.0.1/blah/blah.cue: blah imports: foo.com/bar/hello/goodbye@v0 foo.com/bar/hello/goodbye@v0