Skip to content

Commit d19eab7

Browse files
authored
Merge pull request #4 from n0izn0iz/no-require
feat: upgrade gno to latest and adapt to `require` support drop
2 parents 0c86418 + a3f58a8 commit d19eab7

File tree

4 files changed

+34
-48
lines changed

4 files changed

+34
-48
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ module github.com/gnoverse/gnopls
55
go 1.23.1
66

77
require (
8-
github.com/gnolang/gno v0.0.0-20241111130702-2e9f5ce8ecc9
8+
github.com/gnolang/gno v0.0.0-20241217133227-fdedae90bfc1
99
github.com/google/go-cmp v0.6.0
1010
github.com/jba/templatecheck v0.7.0
1111
golang.org/x/mod v0.21.0

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo
5151
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
5252
github.com/gnolang/gno v0.0.0-20241111130702-2e9f5ce8ecc9 h1:KdfD615fbKz7YgrccElqxYAXjUfk1PEp8hG2UbZvheE=
5353
github.com/gnolang/gno v0.0.0-20241111130702-2e9f5ce8ecc9/go.mod h1:UlU+FYRfmTCIvmid4S7rUuWsjOuIPGSwjREof1T0WAs=
54+
github.com/gnolang/gno v0.0.0-20241217133227-fdedae90bfc1 h1:w4Yx08+Gwrt1nybd2Bpp/IfJVSFKkbiscE5sfPvaL1o=
55+
github.com/gnolang/gno v0.0.0-20241217133227-fdedae90bfc1/go.mod h1:xXhCN7qw5tPQqzQ1Qi0LvCl43xgAg/r6lovGUdd2j0U=
5456
github.com/gnolang/overflow v0.0.0-20170615021017-4d914c927216 h1:GKvsK3oLWG9B1GL7WP/VqwM6C92j5tIvB844oggL9Lk=
5557
github.com/gnolang/overflow v0.0.0-20170615021017-4d914c927216/go.mod h1:xJhtEL7ahjM1WJipt89gel8tHzfIl/LyMY+lCYh38d8=
5658
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=

pkg/resolver/driver.go

+10-11
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"strings"
1010

1111
"github.com/gnolang/gno/gnovm/pkg/gnoenv"
12-
"github.com/gnolang/gno/gnovm/pkg/gnomod"
1312
"github.com/gnoverse/gnopls/internal/packages"
1413
"github.com/gnoverse/gnopls/pkg/eventlogger"
1514
)
@@ -100,40 +99,40 @@ func Resolve(req *packages.DriverRequest, patterns ...string) (*packages.DriverR
10099

101100
// Discover packages
102101

103-
pkgs := gnomod.PkgList{}
102+
gnomods := []string{}
104103
for _, target := range targets {
105104
dir, file := filepath.Split(target)
106105
if file == "..." {
107-
pkgQueryRes, err := ListPkgs(dir)
106+
gnomodsRes, err := listGnomods(dir)
108107
if err != nil {
109108
logger.Error("failed to get pkg list", slog.String("error", err.Error()))
110109
return nil, err
111110
}
112-
pkgs = append(pkgs, pkgQueryRes...)
111+
gnomods = append(gnomods, gnomodsRes...)
113112
} else if strings.HasPrefix(target, "file=") {
114113
dir = strings.TrimPrefix(dir, "file=")
115-
pkgQueryRes, err := ListPkgs(dir)
114+
gnomodsRes, err := listGnomods(dir)
116115
if err != nil {
117116
logger.Error("failed to get pkg", slog.String("error", err.Error()))
118117
return nil, err
119118
}
120-
if len(pkgQueryRes) != 1 {
119+
if len(gnomodsRes) != 1 {
121120
logger.Warn("unexpected number of packages",
122121
slog.String("arg", target),
123-
slog.Int("count", len(pkgQueryRes)),
122+
slog.Int("count", len(gnomodsRes)),
124123
)
125124
}
126-
pkgs = append(pkgs, pkgQueryRes...)
125+
gnomods = append(gnomods, gnomodsRes...)
127126
} else {
128127
logger.Warn("unknown arg shape", slog.String("value", target))
129128
}
130129
}
131-
logger.Info("discovered packages", slog.Int("count", len(pkgs)))
130+
logger.Info("discovered packages", slog.Int("count", len(gnomods)))
132131

133132
// Convert packages
134133

135-
for _, pkg := range pkgs {
136-
pkg, err := gnoPkgToGo(&pkg, logger)
134+
for _, pkg := range gnomods {
135+
pkg, err := gnoPkgToGo(pkg, logger)
137136
if err != nil {
138137
logger.Error("failed to convert gno pkg to go pkg", slog.String("error", err.Error()))
139138
continue

pkg/resolver/resolver.go

+21-36
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,27 @@ import (
1010
"path/filepath"
1111
"strings"
1212

13-
"github.com/gnolang/gno/gnovm/pkg/gnomod"
1413
"github.com/gnoverse/gnopls/internal/packages"
14+
"golang.org/x/mod/modfile"
1515
)
1616

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)
2019
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
2225
}
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
2332

24-
pkgDir := filepath.Clean(gnoPkg.Dir)
33+
pkgDir := filepath.Clean(dir)
2534

2635
gnoFiles := []string{}
2736
otherFiles := []string{}
@@ -109,8 +118,9 @@ func resolveNameAndImports(gnoFiles []string, logger *slog.Logger) (string, map[
109118
return bestName, imports, nil
110119
}
111120

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
114124

115125
err := filepath.WalkDir(root, func(path string, d fs.DirEntry, err error) error {
116126
if err != nil {
@@ -120,40 +130,15 @@ func ListPkgs(root string) (gnomod.PkgList, error) {
120130
return nil
121131
}
122132
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 {
137134
return nil
138135
}
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)
152137
return nil
153138
})
154139
if err != nil {
155140
return nil, err
156141
}
157142

158-
return pkgs, nil
143+
return gnomods, nil
159144
}

0 commit comments

Comments
 (0)