Skip to content

Commit cf3c3af

Browse files
authored
Use upstream definitions, fix gopackagesdriver (#4185)
**What type of PR is this?** Bug fix Feature **What does this PR do? Why is it needed?** With some recent changes made, the gopackagesdriver seems to fail to resolve all standard library imports. This fixes that, as well as migrating the driver to use the upstream definitions as defined here: https://pkg.go.dev/golang.org/x/tools/go/packages#hdr-The_driver_protocol. **Which issues(s) does this PR fix?** Fixes #4184 Fixes #3962
1 parent 045eb9c commit cf3c3af

File tree

11 files changed

+145
-212
lines changed

11 files changed

+145
-212
lines changed

WORKSPACE

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,15 +169,22 @@ go_repository(
169169
go_repository(
170170
name = "org_golang_x_mod",
171171
importpath = "golang.org/x/mod",
172-
sum = "h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs=",
173-
version = "v0.9.0",
172+
sum = "h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4=",
173+
version = "v0.22.0",
174+
)
175+
176+
go_repository(
177+
name = "org_golang_x_net",
178+
importpath = "golang.org/x/net",
179+
sum = "h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM=",
180+
version = "v0.31.0",
174181
)
175182

176183
go_repository(
177184
name = "org_golang_x_sync",
178185
importpath = "golang.org/x/sync",
179-
sum = "h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=",
180-
version = "v0.1.0",
186+
sum = "h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ=",
187+
version = "v0.9.0",
181188
)
182189

183190
go_repository(
@@ -187,6 +194,13 @@ go_repository(
187194
version = "v0.6.0",
188195
)
189196

197+
go_repository(
198+
name = "org_golang_x_tools",
199+
importpath = "golang.org/x/tools",
200+
sum = "h1:qEKojBykQkQ4EynWy4S8Weg69NumxKdn40Fce3uc/8o=",
201+
version = "v0.27.0",
202+
)
203+
190204
http_archive(
191205
name = "googleapis",
192206
sha256 = "9d1a930e767c93c825398b8f8692eca3fe353b9aaadedfbcf1fca2282c85df88",

go.mod

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
module github.com/bazelbuild/rules_go
22

3-
go 1.22.0
4-
53
toolchain go1.23.6
64

5+
go 1.22.0
6+
77
require (
88
github.com/gogo/protobuf v1.3.2
99
github.com/golang/mock v1.7.0-rc.1
@@ -19,7 +19,8 @@ require (
1919

2020
require (
2121
golang.org/x/mod v0.23.0 // indirect
22+
golang.org/x/sync v0.11.0 // indirect
2223
golang.org/x/sys v0.30.0 // indirect
2324
golang.org/x/text v0.22.0 // indirect
24-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect
25+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250106144421-5f5ef82da422 // indirect
2526
)

go.sum

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,51 +19,41 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
1919
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
2020
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
2121
golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
22-
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
23-
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
2422
golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM=
2523
golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
2624
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
2725
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
2826
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
2927
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
3028
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
31-
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
32-
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
3329
golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8=
3430
golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk=
3531
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
3632
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
3733
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
3834
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
39-
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
40-
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
35+
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
36+
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
4137
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
4238
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
4339
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
4440
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
4541
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
4642
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
47-
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
48-
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
4943
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
5044
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
5145
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
5246
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
5347
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
5448
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
5549
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
56-
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
57-
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
5850
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
5951
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
6052
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
6153
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
6254
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
6355
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
6456
golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
65-
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
66-
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
6757
golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY=
6858
golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY=
6959
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -72,8 +62,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T
7262
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
7363
google.golang.org/genproto v0.0.0-20250115164207-1a7da9e5054f h1:387Y+JbxF52bmesc8kq1NyYIp33dnxCw6eiA7JMsTmw=
7464
google.golang.org/genproto v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:0joYwWwLQh18AOj8zMYeZLjzuqcYTU3/nC5JdCvC3JI=
75-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1:OxYkA3wjPsZyBylwymxSHa7ViiW1Sml4ToBrncvFehI=
76-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50=
65+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250106144421-5f5ef82da422 h1:3UsHvIr4Wc2aW4brOaSCmcxh9ksica6fHEr8P1XhkYw=
66+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250106144421-5f5ef82da422/go.mod h1:3ENsm/5D1mzDyhpzeRi1NR784I0BcofWBoSc5QqqMK4=
7767
google.golang.org/grpc v1.67.3 h1:OgPcDAFKHnH8X3O4WcO4XUc8GRDeKsKReqbQtiCj7N8=
7868
google.golang.org/grpc v1.67.3/go.mod h1:YGaHCc6Oap+FzBJTZLBzkGSYt/cvGPFTPxkn7QfSU8s=
7969
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A=

go/tools/gopackagesdriver/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ go_library(
1919
visibility = [
2020
"//tests/integration/gopackagesdriver:__pkg__",
2121
],
22+
deps = ["@org_golang_x_tools//go/packages"],
2223
)
2324

2425
go_binary(

go/tools/gopackagesdriver/bazel_json_builder.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import (
2525
"regexp"
2626
"runtime"
2727
"strings"
28+
29+
"golang.org/x/tools/go/packages"
2830
)
2931

3032
type BazelJSONBuilder struct {
@@ -136,7 +138,7 @@ func (b *BazelJSONBuilder) queryFromRequests(requests ...string) string {
136138
} else if isLocalPattern(request) {
137139
result = b.localQuery(request)
138140
} else if request == "builtin" || request == "std" {
139-
result = fmt.Sprintf(RulesGoStdlibLabel)
141+
result = fmt.Sprintf("%s", RulesGoStdlibLabel)
140142
}
141143

142144
if result != "" {
@@ -156,9 +158,9 @@ func NewBazelJSONBuilder(bazel *Bazel, includeTests bool) (*BazelJSONBuilder, er
156158
}, nil
157159
}
158160

159-
func (b *BazelJSONBuilder) outputGroupsForMode(mode LoadMode) string {
161+
func (b *BazelJSONBuilder) outputGroupsForMode(mode packages.LoadMode) string {
160162
og := "go_pkg_driver_json_file,go_pkg_driver_stdlib_json_file,go_pkg_driver_srcs"
161-
if mode&NeedExportsFile != 0 {
163+
if mode&packages.NeedExportsFile != 0 {
162164
og += ",go_pkg_driver_export_file"
163165
}
164166
return og
@@ -200,7 +202,7 @@ func (b *BazelJSONBuilder) Labels(ctx context.Context, requests []string) ([]str
200202
return labels, nil
201203
}
202204

203-
func (b *BazelJSONBuilder) Build(ctx context.Context, labels []string, mode LoadMode) ([]string, error) {
205+
func (b *BazelJSONBuilder) Build(ctx context.Context, labels []string, mode packages.LoadMode) ([]string, error) {
204206
aspects := append(additionalAspects, goDefaultAspect)
205207

206208
buildArgs := concatStringsArrays([]string{

go/tools/gopackagesdriver/driver_request.go

Lines changed: 3 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -18,72 +18,12 @@ import (
1818
"encoding/json"
1919
"fmt"
2020
"io"
21-
)
22-
23-
// From https://pkg.go.dev/golang.org/x/tools/go/packages#LoadMode
24-
type LoadMode int
25-
26-
// Only NeedExportsFile is needed in our case
27-
const (
28-
// NeedName adds Name and PkgPath.
29-
NeedName LoadMode = 1 << iota
30-
31-
// NeedFiles adds GoFiles and OtherFiles.
32-
NeedFiles
33-
34-
// NeedCompiledGoFiles adds CompiledGoFiles.
35-
NeedCompiledGoFiles
36-
37-
// NeedImports adds Imports. If NeedDeps is not set, the Imports field will contain
38-
// "placeholder" Packages with only the ID set.
39-
NeedImports
40-
41-
// NeedDeps adds the fields requested by the LoadMode in the packages in Imports.
42-
NeedDeps
43-
44-
// NeedExportsFile adds ExportFile.
45-
NeedExportFile
4621

47-
// NeedTypes adds Types, Fset, and IllTyped.
48-
NeedTypes
49-
50-
// NeedSyntax adds Syntax.
51-
NeedSyntax
52-
53-
// NeedTypesInfo adds TypesInfo.
54-
NeedTypesInfo
55-
56-
// NeedTypesSizes adds TypesSizes.
57-
NeedTypesSizes
58-
59-
// typecheckCgo enables full support for type checking cgo. Requires Go 1.15+.
60-
// Modifies CompiledGoFiles and Types, and has no effect on its own.
61-
typecheckCgo
62-
63-
// NeedModule adds Module.
64-
NeedModule
22+
"golang.org/x/tools/go/packages"
6523
)
6624

67-
// Deprecated: NeedExportsFile is a historical misspelling of NeedExportFile.
68-
const NeedExportsFile = NeedExportFile
69-
70-
// From https://github.com/golang/tools/blob/v0.1.0/go/packages/external.go#L32
71-
// Most fields are disabled since there is no need for them
72-
type DriverRequest struct {
73-
Mode LoadMode `json:"mode"`
74-
// Env specifies the environment the underlying build system should be run in.
75-
// Env []string `json:"env"`
76-
// BuildFlags are flags that should be passed to the underlying build system.
77-
// BuildFlags []string `json:"build_flags"`
78-
// Tests specifies whether the patterns should also return test packages.
79-
Tests bool `json:"tests"`
80-
// Overlay maps file paths (relative to the driver's working directory) to the byte contents
81-
// of overlay files.
82-
Overlay map[string][]byte `json:"overlay"`
83-
}
84-
85-
func ReadDriverRequest(r io.Reader) (*DriverRequest, error) {
86-
req := &DriverRequest{}
25+
func ReadDriverRequest(r io.Reader) (*packages.DriverRequest, error) {
26+
req := &packages.DriverRequest{}
8727
if err := json.NewDecoder(r).Decode(&req); err != nil {
8828
return nil, fmt.Errorf("unable to decode driver request: %w", err)
8929
}

0 commit comments

Comments
 (0)