@@ -10,18 +10,27 @@ import (
10
10
"path/filepath"
11
11
"strings"
12
12
13
- "github.com/gnolang/gno/gnovm/pkg/gnomod"
14
13
"github.com/gnoverse/gnopls/internal/packages"
14
+ "golang.org/x/mod/modfile"
15
15
)
16
16
17
- func gnoPkgToGo (gnoPkg * gnomod.Pkg , logger * slog.Logger ) (* packages.Package , error ) {
18
- // TODO: support subpkgs
19
- gnomodFile , err := gnomod .ParseAt (gnoPkg .Dir )
17
+ func gnoPkgToGo (gnomodPath string , logger * slog.Logger ) (* packages.Package , error ) {
18
+ gnomodBytes , err := os .ReadFile (gnomodPath )
20
19
if err != nil {
21
- return nil , fmt .Errorf ("failed to parse gno module at %q: %w" , gnoPkg .Dir , err )
20
+ return nil , err
21
+ }
22
+ gnomodFile , err := modfile .ParseLax (gnomodPath , gnomodBytes , nil )
23
+ if err != nil {
24
+ return nil , err
22
25
}
26
+ if gnomodFile == nil || gnomodFile .Module == nil {
27
+ return nil , fmt .Errorf ("%s:1:1: missing module" , gnomodPath )
28
+ }
29
+ dir := filepath .Dir (gnomodPath )
30
+
31
+ // TODO: support subpkgs
23
32
24
- pkgDir := filepath .Clean (gnoPkg . Dir )
33
+ pkgDir := filepath .Clean (dir )
25
34
26
35
gnoFiles := []string {}
27
36
otherFiles := []string {}
@@ -109,8 +118,9 @@ func resolveNameAndImports(gnoFiles []string, logger *slog.Logger) (string, map[
109
118
return bestName , imports , nil
110
119
}
111
120
112
- func ListPkgs (root string ) (gnomod.PkgList , error ) {
113
- var pkgs []gnomod.Pkg
121
+ // listGnomods recursively finds all gnomods at root
122
+ func listGnomods (root string ) ([]string , error ) {
123
+ var gnomods []string
114
124
115
125
err := filepath .WalkDir (root , func (path string , d fs.DirEntry , err error ) error {
116
126
if err != nil {
@@ -120,40 +130,15 @@ func ListPkgs(root string) (gnomod.PkgList, error) {
120
130
return nil
121
131
}
122
132
gnoModPath := filepath .Join (path , "gno.mod" )
123
- data , err := os .ReadFile (gnoModPath )
124
- if os .IsNotExist (err ) {
125
- return nil
126
- }
127
- if err != nil {
128
- return err
129
- }
130
-
131
- gnoMod , err := gnomod .Parse (gnoModPath , data )
132
- if err != nil {
133
- return nil
134
- }
135
- gnoMod .Sanitize ()
136
- if err := gnoMod .Validate (); err != nil {
133
+ if _ , err := os .Stat (gnoModPath ); err != nil {
137
134
return nil
138
135
}
139
-
140
- pkgs = append (pkgs , gnomod.Pkg {
141
- Dir : path ,
142
- Name : gnoMod .Module .Mod .Path ,
143
- Draft : gnoMod .Draft ,
144
- Requires : func () []string {
145
- var reqs []string
146
- for _ , req := range gnoMod .Require {
147
- reqs = append (reqs , req .Mod .Path )
148
- }
149
- return reqs
150
- }(),
151
- })
136
+ gnomods = append (gnomods , gnoModPath )
152
137
return nil
153
138
})
154
139
if err != nil {
155
140
return nil , err
156
141
}
157
142
158
- return pkgs , nil
143
+ return gnomods , nil
159
144
}
0 commit comments