Skip to content

Commit fb5ea33

Browse files
authored
Switch to k8s.io/gengo/v2 (ahmetb#90)
1 parent 2b5b05f commit fb5ea33

File tree

3 files changed

+44
-65
lines changed

3 files changed

+44
-65
lines changed

go.mod

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@ go 1.21.0
44

55
require (
66
github.com/russross/blackfriday/v2 v2.1.0
7-
k8s.io/gengo v0.0.0-20240404160639-a0386bf69313
8-
k8s.io/klog/v2 v2.130.0
7+
k8s.io/gengo/v2 v2.0.0-20240404160639-a0386bf69313
8+
k8s.io/klog/v2 v2.130.1
99
)
1010

11-
require github.com/go-logr/logr v1.4.1 // indirect
11+
require (
12+
github.com/go-logr/logr v1.4.1 // indirect
13+
golang.org/x/mod v0.14.0 // indirect
14+
golang.org/x/tools v0.16.1 // indirect
15+
)

go.sum

Lines changed: 10 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,14 @@
1-
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
2-
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3-
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
41
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
52
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
6-
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
7-
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
8-
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
9-
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
10-
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
11-
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
123
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
134
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
14-
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
15-
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
16-
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
17-
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
18-
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
19-
golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ=
20-
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
21-
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
22-
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
23-
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
24-
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
25-
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
26-
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
27-
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
28-
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
29-
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
30-
golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8 h1:BMFHd4OFnFtWX46Xj4DN6vvT1btiBxyq+s0orYBqcQY=
31-
golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
32-
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
33-
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
34-
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
35-
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
36-
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
37-
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
38-
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
39-
k8s.io/gengo v0.0.0-20240404160639-a0386bf69313 h1:wBIDZID8ju9pwOiLlV22YYKjFGtiNSWgHf5CnKLRUuM=
40-
k8s.io/gengo v0.0.0-20240404160639-a0386bf69313/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
41-
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
42-
k8s.io/klog/v2 v2.130.0 h1:5nB3+3HpqKqXJIXNtJdtxcDCfaa9KL8StJgMzGJkUkM=
43-
k8s.io/klog/v2 v2.130.0/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
44-
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
5+
golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
6+
golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
7+
golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
8+
golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
9+
golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA=
10+
golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0=
11+
k8s.io/gengo/v2 v2.0.0-20240404160639-a0386bf69313 h1:bKcdZJOPICVmIIuaM9+MXmapE94dn5AYv5ODs1jA43o=
12+
k8s.io/gengo/v2 v2.0.0-20240404160639-a0386bf69313/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8=
13+
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
14+
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=

main.go

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ import (
2121
"unicode"
2222

2323
"github.com/russross/blackfriday/v2"
24-
"k8s.io/gengo/parser"
25-
"k8s.io/gengo/types"
24+
"k8s.io/gengo/v2"
25+
"k8s.io/gengo/v2/parser"
26+
"k8s.io/gengo/v2/types"
2627
"k8s.io/klog/v2"
2728
)
2829

@@ -189,7 +190,7 @@ func main() {
189190
// groupName extracts the "//+groupName" meta-comment from the specified
190191
// package's comments, or returns empty string if it cannot be found.
191192
func groupName(pkg *types.Package) string {
192-
m := types.ExtractCommentTags("+", pkg.Comments)
193+
m := gengo.ExtractCommentTags("+", pkg.Comments)
193194
v := m["groupName"]
194195
if len(v) == 1 {
195196
return v[0]
@@ -198,39 +199,43 @@ func groupName(pkg *types.Package) string {
198199
}
199200

200201
func parseAPIPackages(dir string) ([]*types.Package, error) {
201-
b := parser.New()
202-
// the following will silently fail (turn on -v=4 to see logs)
203-
if err := b.AddDirRecursive(*flAPIDir); err != nil {
204-
return nil, err
202+
p := parser.New()
203+
204+
pkgsFound, errFind := p.FindPackages(dir + "/...")
205+
if errFind != nil {
206+
return nil, fmt.Errorf("failed to find packages in %s: %w", dir, errFind)
207+
}
208+
klog.Infof("found %d packages", len(pkgsFound))
209+
210+
errLoad := p.LoadPackages(pkgsFound...)
211+
if errLoad != nil {
212+
return nil, fmt.Errorf("failed to load packages: %w", errLoad)
205213
}
206-
scan, err := b.FindTypes()
214+
215+
scan, err := p.NewUniverse()
207216
if err != nil {
208217
return nil, fmt.Errorf("failed to parse pkgs and types: %w", err)
209218
}
210-
var pkgNames []string
211-
for p := range scan {
212-
pkg := scan[p]
219+
220+
var pkgs []*types.Package
221+
for _, pkg := range scan {
222+
213223
klog.V(3).Infof("trying package=%v groupName=%s", p, groupName(pkg))
214224

215225
// Do not pick up packages that are in vendor/ as API packages. (This
216226
// happened in knative/eventing-sources/vendor/..., where a package
217227
// matched the pattern, but it didn't have a compatible import path).
218228
if isVendorPackage(pkg) {
219-
klog.V(3).Infof("package=%v coming from vendor/, ignoring.", p)
229+
klog.V(3).Infof("package=%v coming from vendor/, ignoring.", pkg.Name)
220230
continue
221231
}
222232

223233
if groupName(pkg) != "" && len(pkg.Types) > 0 || containsString(pkg.DocComments, docCommentForceIncludes) {
224-
klog.V(3).Infof("package=%v has groupName and has types", p)
225-
pkgNames = append(pkgNames, p)
234+
klog.V(3).Infof("package=%v has groupName and has types", pkg.Name)
235+
klog.Info("using package=", pkg.Name)
236+
pkgs = append(pkgs, pkg)
226237
}
227238
}
228-
sort.Strings(pkgNames)
229-
var pkgs []*types.Package
230-
for _, p := range pkgNames {
231-
klog.Infof("using package=%s", p)
232-
pkgs = append(pkgs, scan[p])
233-
}
234239
return pkgs, nil
235240
}
236241

@@ -300,7 +305,7 @@ func combineAPIPackages(pkgs []*types.Package) ([]*apiPackage, error) {
300305
// isVendorPackage determines if package is coming from vendor/ dir.
301306
func isVendorPackage(pkg *types.Package) bool {
302307
vendorPattern := string(os.PathSeparator) + "vendor" + string(os.PathSeparator)
303-
return strings.Contains(pkg.SourcePath, vendorPattern)
308+
return strings.Contains(pkg.Dir, vendorPattern)
304309
}
305310

306311
func findTypeReferences(pkgs []*apiPackage) map[*types.Type][]*types.Type {
@@ -589,7 +594,7 @@ func filterCommentTags(comments []string) []string {
589594
}
590595

591596
func isOptionalMember(m types.Member) bool {
592-
tags := types.ExtractCommentTags("+", m.CommentLines)
597+
tags := gengo.ExtractCommentTags("+", m.CommentLines)
593598
_, ok := tags["optional"]
594599
return ok
595600
}

0 commit comments

Comments
 (0)