@@ -15,7 +15,7 @@ import (
15
15
"golang.org/x/mod/modfile"
16
16
)
17
17
18
- func gnoPkgToGo (gnomodPath string , logger * slog.Logger ) []* packages.Package {
18
+ func gnoPkgToGo (req * packages. DriverRequest , gnomodPath string , logger * slog.Logger ) []* packages.Package {
19
19
gnomodBytes , err := os .ReadFile (gnomodPath )
20
20
if err != nil {
21
21
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 {
35
35
// TODO: support subpkgs
36
36
37
37
pkgPath := gnomodFile .Module .Mod .Path
38
- return readPkg (dir , pkgPath , logger )
38
+ return readPkg (req , dir , pkgPath , logger )
39
39
}
40
40
41
41
// listGnomods recursively finds all gnomods at root
@@ -63,7 +63,7 @@ func listGnomods(root string) ([]string, error) {
63
63
return gnomods , nil
64
64
}
65
65
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 {
67
67
entries , err := os .ReadDir (dir )
68
68
if err != nil {
69
69
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
90
90
91
91
srcPath := filepath .Join (dir , filename )
92
92
93
+ var src any
94
+ if body , ok := req .Overlay [srcPath ]; ok {
95
+ src = body
96
+ }
97
+
93
98
// TODO: refacto this bit
94
99
if strings .HasSuffix (filename , "_test.gno" ) {
95
100
fset := token .NewFileSet ()
96
- parsed , err := parser .ParseFile (fset , srcPath , nil , parser .PackageClauseOnly )
101
+ parsed , err := parser .ParseFile (fset , srcPath , src , parser .PackageClauseOnly )
97
102
if err != nil {
98
103
if errList , ok := err .(scanner.ErrorList ); ok {
99
104
for _ , err := range errList {
@@ -126,24 +131,31 @@ func readPkg(dir string, pkgPath string, logger *slog.Logger) []*packages.Packag
126
131
127
132
pkg .ID = pkgPath
128
133
pkg .PkgPath = pkgPath
129
- resolveNameAndImports (pkg , logger )
134
+ resolveNameAndImports (req , pkg , logger )
130
135
131
136
xTestPkg .ID = pkgPath + "_test"
132
137
xTestPkg .PkgPath = pkgPath + "_test"
133
138
xTestPkg .Name = pkg .Name + "_test"
134
- resolveNameAndImports (xTestPkg , logger )
139
+ resolveNameAndImports (req , xTestPkg , logger )
135
140
136
141
return []* packages.Package {pkg , xTestPkg }
137
142
}
138
143
139
- func resolveNameAndImports (pkg * packages.Package , logger * slog.Logger ) {
144
+ func resolveNameAndImports (req * packages. DriverRequest , pkg * packages.Package , logger * slog.Logger ) {
140
145
names := map [string ]int {}
141
146
imports := map [string ]* packages.Package {}
142
147
bestName := ""
143
148
bestNameCount := 0
149
+
144
150
for _ , srcPath := range pkg .CompiledGoFiles {
145
151
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 )
147
159
if err != nil {
148
160
if errList , ok := err .(scanner.ErrorList ); ok {
149
161
for _ , err := range errList {
0 commit comments