Skip to content

Commit ebe22dc

Browse files
authored
feat: replace go/importer with x/tools/go/packages
1 parent d5507e7 commit ebe22dc

File tree

3 files changed

+24
-8
lines changed

3 files changed

+24
-8
lines changed

go.mod

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
module github.com/traefik/mocktail
22

3-
go 1.22.0
3+
go 1.23.0
44

55
require (
66
github.com/ettle/strcase v0.2.0
77
github.com/stretchr/testify v1.9.0
8+
golang.org/x/tools v0.32.0
89
)
910

1011
require (
1112
github.com/davecgh/go-spew v1.1.1 // indirect
1213
github.com/pmezard/go-difflib v1.0.0 // indirect
14+
golang.org/x/mod v0.24.0 // indirect
15+
golang.org/x/sync v0.13.0 // indirect
1316
gopkg.in/yaml.v3 v3.0.1 // indirect
1417
)

go.sum

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,18 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
22
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
33
github.com/ettle/strcase v0.2.0 h1:fGNiVF21fHXpX1niBgk0aROov1LagYsOwV/xqKDKR/Q=
44
github.com/ettle/strcase v0.2.0/go.mod h1:DajmHElDSaX76ITe3/VHVyMin4LWSJN5Z909Wp+ED1A=
5+
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
6+
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
57
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
68
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
79
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
810
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
11+
golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU=
12+
golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
13+
golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=
14+
golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
15+
golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU=
16+
golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s=
917
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
1018
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
1119
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

mocktail.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ import (
77
"flag"
88
"fmt"
99
"go/format"
10-
"go/importer"
11-
"go/token"
1210
"go/types"
1311
"io/fs"
1412
"log"
1513
"os"
1614
"path"
1715
"path/filepath"
1816
"strings"
17+
18+
"golang.org/x/tools/go/packages"
1919
)
2020

2121
const (
@@ -77,8 +77,6 @@ func main() {
7777
func walk(root, moduleName string) (map[string]PackageDesc, error) {
7878
model := make(map[string]PackageDesc)
7979

80-
importR := importer.ForCompiler(token.NewFileSet(), "source", nil)
81-
8280
err := filepath.WalkDir(root, func(fp string, d fs.DirEntry, err error) error {
8381
if err != nil {
8482
return err
@@ -131,12 +129,19 @@ func walk(root, moduleName string) (map[string]PackageDesc, error) {
131129
importPath = path.Join(moduleName, filePkgName)
132130
}
133131

134-
pkg, err := importR.Import(importPath)
132+
pkgs, err := packages.Load(
133+
&packages.Config{
134+
Mode: packages.NeedTypes,
135+
Dir: root,
136+
},
137+
importPath,
138+
)
135139
if err != nil {
136-
return fmt.Errorf("failed to import %q: %w", importPath, err)
140+
return fmt.Errorf("load package %q: %w", importPath, err)
137141
}
138142

139-
lookup := pkg.Scope().Lookup(interfaceName)
143+
// Only one package specified by the import path has been loaded.
144+
lookup := pkgs[0].Types.Scope().Lookup(interfaceName)
140145
if lookup == nil {
141146
log.Printf("Unable to find: %s", interfaceName)
142147
continue

0 commit comments

Comments
 (0)