Skip to content

Commit 0109ce0

Browse files
committed
fix: handle overlay
Signed-off-by: gfanton <[email protected]>
1 parent cd5126c commit 0109ce0

File tree

2 files changed

+29
-14
lines changed

2 files changed

+29
-14
lines changed

pkg/resolver/driver.go

+9-6
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func Resolve(req *packages.DriverRequest, patterns ...string) (*packages.DriverR
5555

5656
pkgDir := filepath.Join(libsRoot, path)
5757

58-
pkgs := readPkg(pkgDir, path, logger)
58+
pkgs := readPkg(req, pkgDir, path, logger)
5959
for _, pkg := range pkgs {
6060
if len(pkg.GoFiles) == 0 {
6161
continue
@@ -77,7 +77,8 @@ func Resolve(req *packages.DriverRequest, patterns ...string) (*packages.DriverR
7777
}
7878

7979
filename := entry.Name()
80-
if !strings.HasSuffix(filename, ".gno") {
80+
isDot := len(filename) > 0 && filename[0] == '.'
81+
if isDot || !strings.HasSuffix(filename, ".gno") {
8182
continue
8283
}
8384

@@ -136,7 +137,7 @@ func Resolve(req *packages.DriverRequest, patterns ...string) (*packages.DriverR
136137
// Convert packages
137138

138139
for _, gnomodPath := range gnomods {
139-
pkgs := gnoPkgToGo(gnomodPath, logger)
140+
pkgs := gnoPkgToGo(req, gnomodPath, logger)
140141
for _, pkg := range pkgs {
141142
if pkg == nil {
142143
logger.Error("failed to convert gno pkg to go pkg", slog.String("gnomod", gnomodPath))
@@ -164,10 +165,12 @@ func Resolve(req *packages.DriverRequest, patterns ...string) (*packages.DriverR
164165
if ok {
165166
pkg.Imports[importPath] = imp
166167
// logger.Info("found import", slog.String("path", importPath))
167-
} else {
168-
logger.Info("missed import", slog.String("pkg-path", pkg.PkgPath), slog.String("import", importPath))
169-
toDelete = append(toDelete, importPath)
168+
continue
170169
}
170+
171+
logger.Info("missed import", slog.String("pkg-path", pkg.PkgPath), slog.String("import", importPath))
172+
toDelete = append(toDelete, importPath)
173+
171174
}
172175
for _, toDel := range toDelete {
173176
delete(pkg.Imports, toDel)

pkg/resolver/resolver.go

+20-8
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
"golang.org/x/mod/modfile"
1616
)
1717

18-
func gnoPkgToGo(gnomodPath string, logger *slog.Logger) []*packages.Package {
18+
func gnoPkgToGo(req *packages.DriverRequest, gnomodPath string, logger *slog.Logger) []*packages.Package {
1919
gnomodBytes, err := os.ReadFile(gnomodPath)
2020
if err != nil {
2121
logger.Error("failed to read gno.mod", slog.String("path", gnomodPath), slog.String("err", err.Error()))
@@ -35,7 +35,7 @@ func gnoPkgToGo(gnomodPath string, logger *slog.Logger) []*packages.Package {
3535
// TODO: support subpkgs
3636

3737
pkgPath := gnomodFile.Module.Mod.Path
38-
return readPkg(dir, pkgPath, logger)
38+
return readPkg(req, dir, pkgPath, logger)
3939
}
4040

4141
// listGnomods recursively finds all gnomods at root
@@ -63,7 +63,7 @@ func listGnomods(root string) ([]string, error) {
6363
return gnomods, nil
6464
}
6565

66-
func readPkg(dir string, pkgPath string, logger *slog.Logger) []*packages.Package {
66+
func readPkg(req *packages.DriverRequest, dir string, pkgPath string, logger *slog.Logger) []*packages.Package {
6767
entries, err := os.ReadDir(dir)
6868
if err != nil {
6969
logger.Error("failed to read pkg dir", slog.String("dir", dir))
@@ -90,10 +90,15 @@ func readPkg(dir string, pkgPath string, logger *slog.Logger) []*packages.Packag
9090

9191
srcPath := filepath.Join(dir, filename)
9292

93+
var src any
94+
if body, ok := req.Overlay[srcPath]; ok {
95+
src = body
96+
}
97+
9398
// TODO: refacto this bit
9499
if strings.HasSuffix(filename, "_test.gno") {
95100
fset := token.NewFileSet()
96-
parsed, err := parser.ParseFile(fset, srcPath, nil, parser.PackageClauseOnly)
101+
parsed, err := parser.ParseFile(fset, srcPath, src, parser.PackageClauseOnly)
97102
if err != nil {
98103
if errList, ok := err.(scanner.ErrorList); ok {
99104
for _, err := range errList {
@@ -126,24 +131,31 @@ func readPkg(dir string, pkgPath string, logger *slog.Logger) []*packages.Packag
126131

127132
pkg.ID = pkgPath
128133
pkg.PkgPath = pkgPath
129-
resolveNameAndImports(pkg, logger)
134+
resolveNameAndImports(req, pkg, logger)
130135

131136
xTestPkg.ID = pkgPath + "_test"
132137
xTestPkg.PkgPath = pkgPath + "_test"
133138
xTestPkg.Name = pkg.Name + "_test"
134-
resolveNameAndImports(xTestPkg, logger)
139+
resolveNameAndImports(req, xTestPkg, logger)
135140

136141
return []*packages.Package{pkg, xTestPkg}
137142
}
138143

139-
func resolveNameAndImports(pkg *packages.Package, logger *slog.Logger) {
144+
func resolveNameAndImports(req *packages.DriverRequest, pkg *packages.Package, logger *slog.Logger) {
140145
names := map[string]int{}
141146
imports := map[string]*packages.Package{}
142147
bestName := ""
143148
bestNameCount := 0
149+
144150
for _, srcPath := range pkg.CompiledGoFiles {
145151
fset := token.NewFileSet()
146-
f, err := parser.ParseFile(fset, srcPath, nil, parser.SkipObjectResolution|parser.ImportsOnly)
152+
153+
var src any
154+
if body, ok := req.Overlay[srcPath]; ok {
155+
src = body
156+
}
157+
158+
f, err := parser.ParseFile(fset, srcPath, src, parser.SkipObjectResolution|parser.ImportsOnly)
147159
if err != nil {
148160
if errList, ok := err.(scanner.ErrorList); ok {
149161
for _, err := range errList {

0 commit comments

Comments
 (0)