vendor: update version of go/packages to 0.1.11 (#3053)
The current version we use now crashes with go1.19: https://github.com/golang/go/issues/45584
This commit is contained in:
parent
ff3370e676
commit
0764cc3aa0
3
go.mod
3
go.mod
@ -19,6 +19,7 @@ require (
|
|||||||
go.starlark.net v0.0.0-20200821142938-949cc6f4b097
|
go.starlark.net v0.0.0-20200821142938-949cc6f4b097
|
||||||
golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4
|
golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4
|
||||||
golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1
|
golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1
|
||||||
golang.org/x/tools v0.1.9
|
golang.org/x/tools v0.1.11
|
||||||
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0
|
gopkg.in/yaml.v2 v2.4.0
|
||||||
)
|
)
|
||||||
|
|||||||
14
go.sum
14
go.sum
@ -219,7 +219,7 @@ golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnf
|
|||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||||
@ -238,8 +238,8 @@ golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU
|
|||||||
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
|
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
|
||||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
|
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
|
||||||
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
|
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
|
||||||
golang.org/x/mod v0.5.1 h1:OJxoQ/rynoF0dcCdI7cLPktw/hR2cueqYfjm43oqK38=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
|
||||||
golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@ -254,6 +254,7 @@ golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn
|
|||||||
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
@ -281,6 +282,7 @@ golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1 h1:kwrAHlwJ0DUBZwQ238v+Uod/3eZ8B2K5rYsUHBQvzmI=
|
golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1 h1:kwrAHlwJ0DUBZwQ238v+Uod/3eZ8B2K5rYsUHBQvzmI=
|
||||||
@ -289,6 +291,7 @@ golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9sn
|
|||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||||
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
@ -311,10 +314,9 @@ golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtn
|
|||||||
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.1.9 h1:j9KsMiaP1c3B0OTQGth0/k+miLGTgLsAFUCrF2vLcF8=
|
golang.org/x/tools v0.1.11 h1:loJ25fNOEhSXfHrpoGj91eCUThwdNX6u24rO1xnNteY=
|
||||||
golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
|
golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
|||||||
10
vendor/golang.org/x/mod/semver/semver.go
generated
vendored
10
vendor/golang.org/x/mod/semver/semver.go
generated
vendored
@ -32,7 +32,6 @@ type parsed struct {
|
|||||||
short string
|
short string
|
||||||
prerelease string
|
prerelease string
|
||||||
build string
|
build string
|
||||||
err string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsValid reports whether v is a valid semantic version string.
|
// IsValid reports whether v is a valid semantic version string.
|
||||||
@ -172,12 +171,10 @@ func Sort(list []string) {
|
|||||||
|
|
||||||
func parse(v string) (p parsed, ok bool) {
|
func parse(v string) (p parsed, ok bool) {
|
||||||
if v == "" || v[0] != 'v' {
|
if v == "" || v[0] != 'v' {
|
||||||
p.err = "missing v prefix"
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
p.major, v, ok = parseInt(v[1:])
|
p.major, v, ok = parseInt(v[1:])
|
||||||
if !ok {
|
if !ok {
|
||||||
p.err = "bad major version"
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if v == "" {
|
if v == "" {
|
||||||
@ -187,13 +184,11 @@ func parse(v string) (p parsed, ok bool) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if v[0] != '.' {
|
if v[0] != '.' {
|
||||||
p.err = "bad minor prefix"
|
|
||||||
ok = false
|
ok = false
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
p.minor, v, ok = parseInt(v[1:])
|
p.minor, v, ok = parseInt(v[1:])
|
||||||
if !ok {
|
if !ok {
|
||||||
p.err = "bad minor version"
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if v == "" {
|
if v == "" {
|
||||||
@ -202,31 +197,26 @@ func parse(v string) (p parsed, ok bool) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if v[0] != '.' {
|
if v[0] != '.' {
|
||||||
p.err = "bad patch prefix"
|
|
||||||
ok = false
|
ok = false
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
p.patch, v, ok = parseInt(v[1:])
|
p.patch, v, ok = parseInt(v[1:])
|
||||||
if !ok {
|
if !ok {
|
||||||
p.err = "bad patch version"
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if len(v) > 0 && v[0] == '-' {
|
if len(v) > 0 && v[0] == '-' {
|
||||||
p.prerelease, v, ok = parsePrerelease(v)
|
p.prerelease, v, ok = parsePrerelease(v)
|
||||||
if !ok {
|
if !ok {
|
||||||
p.err = "bad prerelease"
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(v) > 0 && v[0] == '+' {
|
if len(v) > 0 && v[0] == '+' {
|
||||||
p.build, v, ok = parseBuild(v)
|
p.build, v, ok = parseBuild(v)
|
||||||
if !ok {
|
if !ok {
|
||||||
p.err = "bad build"
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if v != "" {
|
if v != "" {
|
||||||
p.err = "junk on end"
|
|
||||||
ok = false
|
ok = false
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
1
vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go
generated
vendored
1
vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go
generated
vendored
@ -17,7 +17,6 @@
|
|||||||
// developer tools, which will then be able to consume both Go 1.7 and
|
// developer tools, which will then be able to consume both Go 1.7 and
|
||||||
// Go 1.8 export data files, so they will work before and after the
|
// Go 1.8 export data files, so they will work before and after the
|
||||||
// Go update. (See discussion at https://golang.org/issue/15651.)
|
// Go update. (See discussion at https://golang.org/issue/15651.)
|
||||||
//
|
|
||||||
package gcexportdata // import "golang.org/x/tools/go/gcexportdata"
|
package gcexportdata // import "golang.org/x/tools/go/gcexportdata"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|||||||
1
vendor/golang.org/x/tools/go/gcexportdata/importer.go
generated
vendored
1
vendor/golang.org/x/tools/go/gcexportdata/importer.go
generated
vendored
@ -22,7 +22,6 @@ import (
|
|||||||
// version-skew problems described in the documentation of this package,
|
// version-skew problems described in the documentation of this package,
|
||||||
// or to control the FileSet or access the imports map populated during
|
// or to control the FileSet or access the imports map populated during
|
||||||
// package loading.
|
// package loading.
|
||||||
//
|
|
||||||
func NewImporter(fset *token.FileSet, imports map[string]*types.Package) types.ImporterFrom {
|
func NewImporter(fset *token.FileSet, imports map[string]*types.Package) types.ImporterFrom {
|
||||||
return importer{fset, imports}
|
return importer{fset, imports}
|
||||||
}
|
}
|
||||||
|
|||||||
20
vendor/golang.org/x/tools/go/internal/gcimporter/bexport.go
generated
vendored
20
vendor/golang.org/x/tools/go/internal/gcimporter/bexport.go
generated
vendored
@ -35,16 +35,18 @@ import (
|
|||||||
const debugFormat = false // default: false
|
const debugFormat = false // default: false
|
||||||
|
|
||||||
// Current export format version. Increase with each format change.
|
// Current export format version. Increase with each format change.
|
||||||
|
//
|
||||||
// Note: The latest binary (non-indexed) export format is at version 6.
|
// Note: The latest binary (non-indexed) export format is at version 6.
|
||||||
// This exporter is still at level 4, but it doesn't matter since
|
// This exporter is still at level 4, but it doesn't matter since
|
||||||
// the binary importer can handle older versions just fine.
|
// the binary importer can handle older versions just fine.
|
||||||
// 6: package height (CL 105038) -- NOT IMPLEMENTED HERE
|
//
|
||||||
// 5: improved position encoding efficiency (issue 20080, CL 41619) -- NOT IMPLEMEMTED HERE
|
// 6: package height (CL 105038) -- NOT IMPLEMENTED HERE
|
||||||
// 4: type name objects support type aliases, uses aliasTag
|
// 5: improved position encoding efficiency (issue 20080, CL 41619) -- NOT IMPLEMENTED HERE
|
||||||
// 3: Go1.8 encoding (same as version 2, aliasTag defined but never used)
|
// 4: type name objects support type aliases, uses aliasTag
|
||||||
// 2: removed unused bool in ODCL export (compiler only)
|
// 3: Go1.8 encoding (same as version 2, aliasTag defined but never used)
|
||||||
// 1: header format change (more regular), export package for _ struct fields
|
// 2: removed unused bool in ODCL export (compiler only)
|
||||||
// 0: Go1.7 encoding
|
// 1: header format change (more regular), export package for _ struct fields
|
||||||
|
// 0: Go1.7 encoding
|
||||||
const exportVersion = 4
|
const exportVersion = 4
|
||||||
|
|
||||||
// trackAllTypes enables cycle tracking for all types, not just named
|
// trackAllTypes enables cycle tracking for all types, not just named
|
||||||
|
|||||||
133
vendor/golang.org/x/tools/go/internal/gcimporter/gcimporter.go
generated
vendored
133
vendor/golang.org/x/tools/go/internal/gcimporter/gcimporter.go
generated
vendored
@ -45,7 +45,6 @@ var pkgExts = [...]string{".a", ".o"}
|
|||||||
// the build.Default build.Context). A relative srcDir is interpreted
|
// the build.Default build.Context). A relative srcDir is interpreted
|
||||||
// relative to the current working directory.
|
// relative to the current working directory.
|
||||||
// If no file was found, an empty filename is returned.
|
// If no file was found, an empty filename is returned.
|
||||||
//
|
|
||||||
func FindPkg(path, srcDir string) (filename, id string) {
|
func FindPkg(path, srcDir string) (filename, id string) {
|
||||||
if path == "" {
|
if path == "" {
|
||||||
return
|
return
|
||||||
@ -109,7 +108,6 @@ func FindPkg(path, srcDir string) (filename, id string) {
|
|||||||
// If packages[id] contains the completely imported package, that package
|
// If packages[id] contains the completely imported package, that package
|
||||||
// can be used directly, and there is no need to call this function (but
|
// can be used directly, and there is no need to call this function (but
|
||||||
// there is also no harm but for extra time used).
|
// there is also no harm but for extra time used).
|
||||||
//
|
|
||||||
func ImportData(packages map[string]*types.Package, filename, id string, data io.Reader) (pkg *types.Package, err error) {
|
func ImportData(packages map[string]*types.Package, filename, id string, data io.Reader) (pkg *types.Package, err error) {
|
||||||
// support for parser error handling
|
// support for parser error handling
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -133,7 +131,6 @@ func ImportData(packages map[string]*types.Package, filename, id string, data io
|
|||||||
// Import imports a gc-generated package given its import path and srcDir, adds
|
// Import imports a gc-generated package given its import path and srcDir, adds
|
||||||
// the corresponding package object to the packages map, and returns the object.
|
// the corresponding package object to the packages map, and returns the object.
|
||||||
// The packages map must contain all packages already imported.
|
// The packages map must contain all packages already imported.
|
||||||
//
|
|
||||||
func Import(packages map[string]*types.Package, path, srcDir string, lookup func(path string) (io.ReadCloser, error)) (pkg *types.Package, err error) {
|
func Import(packages map[string]*types.Package, path, srcDir string, lookup func(path string) (io.ReadCloser, error)) (pkg *types.Package, err error) {
|
||||||
var rc io.ReadCloser
|
var rc io.ReadCloser
|
||||||
var filename, id string
|
var filename, id string
|
||||||
@ -348,8 +345,9 @@ func (p *parser) expectKeyword(keyword string) {
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// Qualified and unqualified names
|
// Qualified and unqualified names
|
||||||
|
|
||||||
// PackageId = string_lit .
|
// parsePackageID parses a PackageId:
|
||||||
//
|
//
|
||||||
|
// PackageId = string_lit .
|
||||||
func (p *parser) parsePackageID() string {
|
func (p *parser) parsePackageID() string {
|
||||||
id, err := strconv.Unquote(p.expect(scanner.String))
|
id, err := strconv.Unquote(p.expect(scanner.String))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -363,13 +361,16 @@ func (p *parser) parsePackageID() string {
|
|||||||
return id
|
return id
|
||||||
}
|
}
|
||||||
|
|
||||||
// PackageName = ident .
|
// parsePackageName parse a PackageName:
|
||||||
//
|
//
|
||||||
|
// PackageName = ident .
|
||||||
func (p *parser) parsePackageName() string {
|
func (p *parser) parsePackageName() string {
|
||||||
return p.expect(scanner.Ident)
|
return p.expect(scanner.Ident)
|
||||||
}
|
}
|
||||||
|
|
||||||
// dotIdentifier = ( ident | '·' ) { ident | int | '·' } .
|
// parseDotIdent parses a dotIdentifier:
|
||||||
|
//
|
||||||
|
// dotIdentifier = ( ident | '·' ) { ident | int | '·' } .
|
||||||
func (p *parser) parseDotIdent() string {
|
func (p *parser) parseDotIdent() string {
|
||||||
ident := ""
|
ident := ""
|
||||||
if p.tok != scanner.Int {
|
if p.tok != scanner.Int {
|
||||||
@ -386,8 +387,9 @@ func (p *parser) parseDotIdent() string {
|
|||||||
return ident
|
return ident
|
||||||
}
|
}
|
||||||
|
|
||||||
// QualifiedName = "@" PackageId "." ( "?" | dotIdentifier ) .
|
// parseQualifiedName parses a QualifiedName:
|
||||||
//
|
//
|
||||||
|
// QualifiedName = "@" PackageId "." ( "?" | dotIdentifier ) .
|
||||||
func (p *parser) parseQualifiedName() (id, name string) {
|
func (p *parser) parseQualifiedName() (id, name string) {
|
||||||
p.expect('@')
|
p.expect('@')
|
||||||
id = p.parsePackageID()
|
id = p.parsePackageID()
|
||||||
@ -410,7 +412,6 @@ func (p *parser) parseQualifiedName() (id, name string) {
|
|||||||
// id identifies a package, usually by a canonical package path like
|
// id identifies a package, usually by a canonical package path like
|
||||||
// "encoding/json" but possibly by a non-canonical import path like
|
// "encoding/json" but possibly by a non-canonical import path like
|
||||||
// "./json".
|
// "./json".
|
||||||
//
|
|
||||||
func (p *parser) getPkg(id, name string) *types.Package {
|
func (p *parser) getPkg(id, name string) *types.Package {
|
||||||
// package unsafe is not in the packages maps - handle explicitly
|
// package unsafe is not in the packages maps - handle explicitly
|
||||||
if id == "unsafe" {
|
if id == "unsafe" {
|
||||||
@ -446,7 +447,6 @@ func (p *parser) getPkg(id, name string) *types.Package {
|
|||||||
|
|
||||||
// parseExportedName is like parseQualifiedName, but
|
// parseExportedName is like parseQualifiedName, but
|
||||||
// the package id is resolved to an imported *types.Package.
|
// the package id is resolved to an imported *types.Package.
|
||||||
//
|
|
||||||
func (p *parser) parseExportedName() (pkg *types.Package, name string) {
|
func (p *parser) parseExportedName() (pkg *types.Package, name string) {
|
||||||
id, name := p.parseQualifiedName()
|
id, name := p.parseQualifiedName()
|
||||||
pkg = p.getPkg(id, "")
|
pkg = p.getPkg(id, "")
|
||||||
@ -456,8 +456,9 @@ func (p *parser) parseExportedName() (pkg *types.Package, name string) {
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// Types
|
// Types
|
||||||
|
|
||||||
// BasicType = identifier .
|
// parseBasicType parses a BasicType:
|
||||||
//
|
//
|
||||||
|
// BasicType = identifier .
|
||||||
func (p *parser) parseBasicType() types.Type {
|
func (p *parser) parseBasicType() types.Type {
|
||||||
id := p.expect(scanner.Ident)
|
id := p.expect(scanner.Ident)
|
||||||
obj := types.Universe.Lookup(id)
|
obj := types.Universe.Lookup(id)
|
||||||
@ -468,8 +469,9 @@ func (p *parser) parseBasicType() types.Type {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ArrayType = "[" int_lit "]" Type .
|
// parseArrayType parses an ArrayType:
|
||||||
//
|
//
|
||||||
|
// ArrayType = "[" int_lit "]" Type .
|
||||||
func (p *parser) parseArrayType(parent *types.Package) types.Type {
|
func (p *parser) parseArrayType(parent *types.Package) types.Type {
|
||||||
// "[" already consumed and lookahead known not to be "]"
|
// "[" already consumed and lookahead known not to be "]"
|
||||||
lit := p.expect(scanner.Int)
|
lit := p.expect(scanner.Int)
|
||||||
@ -482,8 +484,9 @@ func (p *parser) parseArrayType(parent *types.Package) types.Type {
|
|||||||
return types.NewArray(elem, n)
|
return types.NewArray(elem, n)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MapType = "map" "[" Type "]" Type .
|
// parseMapType parses a MapType:
|
||||||
//
|
//
|
||||||
|
// MapType = "map" "[" Type "]" Type .
|
||||||
func (p *parser) parseMapType(parent *types.Package) types.Type {
|
func (p *parser) parseMapType(parent *types.Package) types.Type {
|
||||||
p.expectKeyword("map")
|
p.expectKeyword("map")
|
||||||
p.expect('[')
|
p.expect('[')
|
||||||
@ -493,7 +496,9 @@ func (p *parser) parseMapType(parent *types.Package) types.Type {
|
|||||||
return types.NewMap(key, elem)
|
return types.NewMap(key, elem)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name = identifier | "?" | QualifiedName .
|
// parseName parses a Name:
|
||||||
|
//
|
||||||
|
// Name = identifier | "?" | QualifiedName .
|
||||||
//
|
//
|
||||||
// For unqualified and anonymous names, the returned package is the parent
|
// For unqualified and anonymous names, the returned package is the parent
|
||||||
// package unless parent == nil, in which case the returned package is the
|
// package unless parent == nil, in which case the returned package is the
|
||||||
@ -505,7 +510,6 @@ func (p *parser) parseMapType(parent *types.Package) types.Type {
|
|||||||
// it doesn't exist yet) unless materializePkg is set (which creates an
|
// it doesn't exist yet) unless materializePkg is set (which creates an
|
||||||
// unnamed package with valid package path). In the latter case, a
|
// unnamed package with valid package path). In the latter case, a
|
||||||
// subsequent import clause is expected to provide a name for the package.
|
// subsequent import clause is expected to provide a name for the package.
|
||||||
//
|
|
||||||
func (p *parser) parseName(parent *types.Package, materializePkg bool) (pkg *types.Package, name string) {
|
func (p *parser) parseName(parent *types.Package, materializePkg bool) (pkg *types.Package, name string) {
|
||||||
pkg = parent
|
pkg = parent
|
||||||
if pkg == nil {
|
if pkg == nil {
|
||||||
@ -539,8 +543,9 @@ func deref(typ types.Type) types.Type {
|
|||||||
return typ
|
return typ
|
||||||
}
|
}
|
||||||
|
|
||||||
// Field = Name Type [ string_lit ] .
|
// parseField parses a Field:
|
||||||
//
|
//
|
||||||
|
// Field = Name Type [ string_lit ] .
|
||||||
func (p *parser) parseField(parent *types.Package) (*types.Var, string) {
|
func (p *parser) parseField(parent *types.Package) (*types.Var, string) {
|
||||||
pkg, name := p.parseName(parent, true)
|
pkg, name := p.parseName(parent, true)
|
||||||
|
|
||||||
@ -583,9 +588,10 @@ func (p *parser) parseField(parent *types.Package) (*types.Var, string) {
|
|||||||
return types.NewField(token.NoPos, pkg, name, typ, anonymous), tag
|
return types.NewField(token.NoPos, pkg, name, typ, anonymous), tag
|
||||||
}
|
}
|
||||||
|
|
||||||
// StructType = "struct" "{" [ FieldList ] "}" .
|
// parseStructType parses a StructType:
|
||||||
// FieldList = Field { ";" Field } .
|
|
||||||
//
|
//
|
||||||
|
// StructType = "struct" "{" [ FieldList ] "}" .
|
||||||
|
// FieldList = Field { ";" Field } .
|
||||||
func (p *parser) parseStructType(parent *types.Package) types.Type {
|
func (p *parser) parseStructType(parent *types.Package) types.Type {
|
||||||
var fields []*types.Var
|
var fields []*types.Var
|
||||||
var tags []string
|
var tags []string
|
||||||
@ -610,8 +616,9 @@ func (p *parser) parseStructType(parent *types.Package) types.Type {
|
|||||||
return types.NewStruct(fields, tags)
|
return types.NewStruct(fields, tags)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parameter = ( identifier | "?" ) [ "..." ] Type [ string_lit ] .
|
// parseParameter parses a Parameter:
|
||||||
//
|
//
|
||||||
|
// Parameter = ( identifier | "?" ) [ "..." ] Type [ string_lit ] .
|
||||||
func (p *parser) parseParameter() (par *types.Var, isVariadic bool) {
|
func (p *parser) parseParameter() (par *types.Var, isVariadic bool) {
|
||||||
_, name := p.parseName(nil, false)
|
_, name := p.parseName(nil, false)
|
||||||
// remove gc-specific parameter numbering
|
// remove gc-specific parameter numbering
|
||||||
@ -635,9 +642,10 @@ func (p *parser) parseParameter() (par *types.Var, isVariadic bool) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parameters = "(" [ ParameterList ] ")" .
|
// parseParameters parses a Parameters:
|
||||||
// ParameterList = { Parameter "," } Parameter .
|
|
||||||
//
|
//
|
||||||
|
// Parameters = "(" [ ParameterList ] ")" .
|
||||||
|
// ParameterList = { Parameter "," } Parameter .
|
||||||
func (p *parser) parseParameters() (list []*types.Var, isVariadic bool) {
|
func (p *parser) parseParameters() (list []*types.Var, isVariadic bool) {
|
||||||
p.expect('(')
|
p.expect('(')
|
||||||
for p.tok != ')' && p.tok != scanner.EOF {
|
for p.tok != ')' && p.tok != scanner.EOF {
|
||||||
@ -658,9 +666,10 @@ func (p *parser) parseParameters() (list []*types.Var, isVariadic bool) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Signature = Parameters [ Result ] .
|
// parseSignature parses a Signature:
|
||||||
// Result = Type | Parameters .
|
|
||||||
//
|
//
|
||||||
|
// Signature = Parameters [ Result ] .
|
||||||
|
// Result = Type | Parameters .
|
||||||
func (p *parser) parseSignature(recv *types.Var) *types.Signature {
|
func (p *parser) parseSignature(recv *types.Var) *types.Signature {
|
||||||
params, isVariadic := p.parseParameters()
|
params, isVariadic := p.parseParameters()
|
||||||
|
|
||||||
@ -677,14 +686,15 @@ func (p *parser) parseSignature(recv *types.Var) *types.Signature {
|
|||||||
return types.NewSignature(recv, types.NewTuple(params...), types.NewTuple(results...), isVariadic)
|
return types.NewSignature(recv, types.NewTuple(params...), types.NewTuple(results...), isVariadic)
|
||||||
}
|
}
|
||||||
|
|
||||||
// InterfaceType = "interface" "{" [ MethodList ] "}" .
|
// parseInterfaceType parses an InterfaceType:
|
||||||
// MethodList = Method { ";" Method } .
|
//
|
||||||
// Method = Name Signature .
|
// InterfaceType = "interface" "{" [ MethodList ] "}" .
|
||||||
|
// MethodList = Method { ";" Method } .
|
||||||
|
// Method = Name Signature .
|
||||||
//
|
//
|
||||||
// The methods of embedded interfaces are always "inlined"
|
// The methods of embedded interfaces are always "inlined"
|
||||||
// by the compiler and thus embedded interfaces are never
|
// by the compiler and thus embedded interfaces are never
|
||||||
// visible in the export data.
|
// visible in the export data.
|
||||||
//
|
|
||||||
func (p *parser) parseInterfaceType(parent *types.Package) types.Type {
|
func (p *parser) parseInterfaceType(parent *types.Package) types.Type {
|
||||||
var methods []*types.Func
|
var methods []*types.Func
|
||||||
|
|
||||||
@ -705,8 +715,9 @@ func (p *parser) parseInterfaceType(parent *types.Package) types.Type {
|
|||||||
return newInterface(methods, nil).Complete()
|
return newInterface(methods, nil).Complete()
|
||||||
}
|
}
|
||||||
|
|
||||||
// ChanType = ( "chan" [ "<-" ] | "<-" "chan" ) Type .
|
// parseChanType parses a ChanType:
|
||||||
//
|
//
|
||||||
|
// ChanType = ( "chan" [ "<-" ] | "<-" "chan" ) Type .
|
||||||
func (p *parser) parseChanType(parent *types.Package) types.Type {
|
func (p *parser) parseChanType(parent *types.Package) types.Type {
|
||||||
dir := types.SendRecv
|
dir := types.SendRecv
|
||||||
if p.tok == scanner.Ident {
|
if p.tok == scanner.Ident {
|
||||||
@ -724,17 +735,18 @@ func (p *parser) parseChanType(parent *types.Package) types.Type {
|
|||||||
return types.NewChan(dir, elem)
|
return types.NewChan(dir, elem)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Type =
|
// parseType parses a Type:
|
||||||
// BasicType | TypeName | ArrayType | SliceType | StructType |
|
|
||||||
// PointerType | FuncType | InterfaceType | MapType | ChanType |
|
|
||||||
// "(" Type ")" .
|
|
||||||
//
|
//
|
||||||
// BasicType = ident .
|
// Type =
|
||||||
// TypeName = ExportedName .
|
// BasicType | TypeName | ArrayType | SliceType | StructType |
|
||||||
// SliceType = "[" "]" Type .
|
// PointerType | FuncType | InterfaceType | MapType | ChanType |
|
||||||
// PointerType = "*" Type .
|
// "(" Type ")" .
|
||||||
// FuncType = "func" Signature .
|
|
||||||
//
|
//
|
||||||
|
// BasicType = ident .
|
||||||
|
// TypeName = ExportedName .
|
||||||
|
// SliceType = "[" "]" Type .
|
||||||
|
// PointerType = "*" Type .
|
||||||
|
// FuncType = "func" Signature .
|
||||||
func (p *parser) parseType(parent *types.Package) types.Type {
|
func (p *parser) parseType(parent *types.Package) types.Type {
|
||||||
switch p.tok {
|
switch p.tok {
|
||||||
case scanner.Ident:
|
case scanner.Ident:
|
||||||
@ -786,16 +798,18 @@ func (p *parser) parseType(parent *types.Package) types.Type {
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// Declarations
|
// Declarations
|
||||||
|
|
||||||
// ImportDecl = "import" PackageName PackageId .
|
// parseImportDecl parses an ImportDecl:
|
||||||
//
|
//
|
||||||
|
// ImportDecl = "import" PackageName PackageId .
|
||||||
func (p *parser) parseImportDecl() {
|
func (p *parser) parseImportDecl() {
|
||||||
p.expectKeyword("import")
|
p.expectKeyword("import")
|
||||||
name := p.parsePackageName()
|
name := p.parsePackageName()
|
||||||
p.getPkg(p.parsePackageID(), name)
|
p.getPkg(p.parsePackageID(), name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// int_lit = [ "+" | "-" ] { "0" ... "9" } .
|
// parseInt parses an int_lit:
|
||||||
//
|
//
|
||||||
|
// int_lit = [ "+" | "-" ] { "0" ... "9" } .
|
||||||
func (p *parser) parseInt() string {
|
func (p *parser) parseInt() string {
|
||||||
s := ""
|
s := ""
|
||||||
switch p.tok {
|
switch p.tok {
|
||||||
@ -808,8 +822,9 @@ func (p *parser) parseInt() string {
|
|||||||
return s + p.expect(scanner.Int)
|
return s + p.expect(scanner.Int)
|
||||||
}
|
}
|
||||||
|
|
||||||
// number = int_lit [ "p" int_lit ] .
|
// parseNumber parses a number:
|
||||||
//
|
//
|
||||||
|
// number = int_lit [ "p" int_lit ] .
|
||||||
func (p *parser) parseNumber() (typ *types.Basic, val constant.Value) {
|
func (p *parser) parseNumber() (typ *types.Basic, val constant.Value) {
|
||||||
// mantissa
|
// mantissa
|
||||||
mant := constant.MakeFromLiteral(p.parseInt(), token.INT, 0)
|
mant := constant.MakeFromLiteral(p.parseInt(), token.INT, 0)
|
||||||
@ -844,13 +859,14 @@ func (p *parser) parseNumber() (typ *types.Basic, val constant.Value) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConstDecl = "const" ExportedName [ Type ] "=" Literal .
|
// parseConstDecl parses a ConstDecl:
|
||||||
// Literal = bool_lit | int_lit | float_lit | complex_lit | rune_lit | string_lit .
|
|
||||||
// bool_lit = "true" | "false" .
|
|
||||||
// complex_lit = "(" float_lit "+" float_lit "i" ")" .
|
|
||||||
// rune_lit = "(" int_lit "+" int_lit ")" .
|
|
||||||
// string_lit = `"` { unicode_char } `"` .
|
|
||||||
//
|
//
|
||||||
|
// ConstDecl = "const" ExportedName [ Type ] "=" Literal .
|
||||||
|
// Literal = bool_lit | int_lit | float_lit | complex_lit | rune_lit | string_lit .
|
||||||
|
// bool_lit = "true" | "false" .
|
||||||
|
// complex_lit = "(" float_lit "+" float_lit "i" ")" .
|
||||||
|
// rune_lit = "(" int_lit "+" int_lit ")" .
|
||||||
|
// string_lit = `"` { unicode_char } `"` .
|
||||||
func (p *parser) parseConstDecl() {
|
func (p *parser) parseConstDecl() {
|
||||||
p.expectKeyword("const")
|
p.expectKeyword("const")
|
||||||
pkg, name := p.parseExportedName()
|
pkg, name := p.parseExportedName()
|
||||||
@ -920,8 +936,9 @@ func (p *parser) parseConstDecl() {
|
|||||||
pkg.Scope().Insert(types.NewConst(token.NoPos, pkg, name, typ0, val))
|
pkg.Scope().Insert(types.NewConst(token.NoPos, pkg, name, typ0, val))
|
||||||
}
|
}
|
||||||
|
|
||||||
// TypeDecl = "type" ExportedName Type .
|
// parseTypeDecl parses a TypeDecl:
|
||||||
//
|
//
|
||||||
|
// TypeDecl = "type" ExportedName Type .
|
||||||
func (p *parser) parseTypeDecl() {
|
func (p *parser) parseTypeDecl() {
|
||||||
p.expectKeyword("type")
|
p.expectKeyword("type")
|
||||||
pkg, name := p.parseExportedName()
|
pkg, name := p.parseExportedName()
|
||||||
@ -939,8 +956,9 @@ func (p *parser) parseTypeDecl() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// VarDecl = "var" ExportedName Type .
|
// parseVarDecl parses a VarDecl:
|
||||||
//
|
//
|
||||||
|
// VarDecl = "var" ExportedName Type .
|
||||||
func (p *parser) parseVarDecl() {
|
func (p *parser) parseVarDecl() {
|
||||||
p.expectKeyword("var")
|
p.expectKeyword("var")
|
||||||
pkg, name := p.parseExportedName()
|
pkg, name := p.parseExportedName()
|
||||||
@ -948,9 +966,10 @@ func (p *parser) parseVarDecl() {
|
|||||||
pkg.Scope().Insert(types.NewVar(token.NoPos, pkg, name, typ))
|
pkg.Scope().Insert(types.NewVar(token.NoPos, pkg, name, typ))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Func = Signature [ Body ] .
|
// parseFunc parses a Func:
|
||||||
// Body = "{" ... "}" .
|
|
||||||
//
|
//
|
||||||
|
// Func = Signature [ Body ] .
|
||||||
|
// Body = "{" ... "}" .
|
||||||
func (p *parser) parseFunc(recv *types.Var) *types.Signature {
|
func (p *parser) parseFunc(recv *types.Var) *types.Signature {
|
||||||
sig := p.parseSignature(recv)
|
sig := p.parseSignature(recv)
|
||||||
if p.tok == '{' {
|
if p.tok == '{' {
|
||||||
@ -967,9 +986,10 @@ func (p *parser) parseFunc(recv *types.Var) *types.Signature {
|
|||||||
return sig
|
return sig
|
||||||
}
|
}
|
||||||
|
|
||||||
// MethodDecl = "func" Receiver Name Func .
|
// parseMethodDecl parses a MethodDecl:
|
||||||
// Receiver = "(" ( identifier | "?" ) [ "*" ] ExportedName ")" .
|
|
||||||
//
|
//
|
||||||
|
// MethodDecl = "func" Receiver Name Func .
|
||||||
|
// Receiver = "(" ( identifier | "?" ) [ "*" ] ExportedName ")" .
|
||||||
func (p *parser) parseMethodDecl() {
|
func (p *parser) parseMethodDecl() {
|
||||||
// "func" already consumed
|
// "func" already consumed
|
||||||
p.expect('(')
|
p.expect('(')
|
||||||
@ -992,8 +1012,9 @@ func (p *parser) parseMethodDecl() {
|
|||||||
base.AddMethod(types.NewFunc(token.NoPos, pkg, name, sig))
|
base.AddMethod(types.NewFunc(token.NoPos, pkg, name, sig))
|
||||||
}
|
}
|
||||||
|
|
||||||
// FuncDecl = "func" ExportedName Func .
|
// parseFuncDecl parses a FuncDecl:
|
||||||
//
|
//
|
||||||
|
// FuncDecl = "func" ExportedName Func .
|
||||||
func (p *parser) parseFuncDecl() {
|
func (p *parser) parseFuncDecl() {
|
||||||
// "func" already consumed
|
// "func" already consumed
|
||||||
pkg, name := p.parseExportedName()
|
pkg, name := p.parseExportedName()
|
||||||
@ -1001,8 +1022,9 @@ func (p *parser) parseFuncDecl() {
|
|||||||
pkg.Scope().Insert(types.NewFunc(token.NoPos, pkg, name, typ))
|
pkg.Scope().Insert(types.NewFunc(token.NoPos, pkg, name, typ))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decl = [ ImportDecl | ConstDecl | TypeDecl | VarDecl | FuncDecl | MethodDecl ] "\n" .
|
// parseDecl parses a Decl:
|
||||||
//
|
//
|
||||||
|
// Decl = [ ImportDecl | ConstDecl | TypeDecl | VarDecl | FuncDecl | MethodDecl ] "\n" .
|
||||||
func (p *parser) parseDecl() {
|
func (p *parser) parseDecl() {
|
||||||
if p.tok == scanner.Ident {
|
if p.tok == scanner.Ident {
|
||||||
switch p.lit {
|
switch p.lit {
|
||||||
@ -1029,9 +1051,10 @@ func (p *parser) parseDecl() {
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// Export
|
// Export
|
||||||
|
|
||||||
// Export = "PackageClause { Decl } "$$" .
|
// parseExport parses an Export:
|
||||||
// PackageClause = "package" PackageName [ "safe" ] "\n" .
|
|
||||||
//
|
//
|
||||||
|
// Export = "PackageClause { Decl } "$$" .
|
||||||
|
// PackageClause = "package" PackageName [ "safe" ] "\n" .
|
||||||
func (p *parser) parseExport() *types.Package {
|
func (p *parser) parseExport() *types.Package {
|
||||||
p.expectKeyword("package")
|
p.expectKeyword("package")
|
||||||
name := p.parsePackageName()
|
name := p.parsePackageName()
|
||||||
|
|||||||
5
vendor/golang.org/x/tools/go/internal/gcimporter/iexport.go
generated
vendored
5
vendor/golang.org/x/tools/go/internal/gcimporter/iexport.go
generated
vendored
@ -251,7 +251,10 @@ func (p *iexporter) stringOff(s string) uint64 {
|
|||||||
// pushDecl adds n to the declaration work queue, if not already present.
|
// pushDecl adds n to the declaration work queue, if not already present.
|
||||||
func (p *iexporter) pushDecl(obj types.Object) {
|
func (p *iexporter) pushDecl(obj types.Object) {
|
||||||
// Package unsafe is known to the compiler and predeclared.
|
// Package unsafe is known to the compiler and predeclared.
|
||||||
assert(obj.Pkg() != types.Unsafe)
|
// Caller should not ask us to do export it.
|
||||||
|
if obj.Pkg() == types.Unsafe {
|
||||||
|
panic("cannot export package unsafe")
|
||||||
|
}
|
||||||
|
|
||||||
if _, ok := p.declIndex[obj]; ok {
|
if _, ok := p.declIndex[obj]; ok {
|
||||||
return
|
return
|
||||||
|
|||||||
33
vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go
generated
vendored
33
vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go
generated
vendored
@ -53,7 +53,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type ident struct {
|
type ident struct {
|
||||||
pkg string
|
pkg *types.Package
|
||||||
name string
|
name string
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,7 +100,9 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data
|
|||||||
if !debug {
|
if !debug {
|
||||||
defer func() {
|
defer func() {
|
||||||
if e := recover(); e != nil {
|
if e := recover(); e != nil {
|
||||||
if version > currentVersion {
|
if bundle {
|
||||||
|
err = fmt.Errorf("%v", e)
|
||||||
|
} else if version > currentVersion {
|
||||||
err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e)
|
err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e)
|
||||||
} else {
|
} else {
|
||||||
err = fmt.Errorf("cannot import %q (%v), possibly version skew - reinstall package", path, e)
|
err = fmt.Errorf("cannot import %q (%v), possibly version skew - reinstall package", path, e)
|
||||||
@ -237,6 +239,15 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data
|
|||||||
pkg.MarkComplete()
|
pkg.MarkComplete()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetConstraint can't be called if the constraint type is not yet complete.
|
||||||
|
// When type params are created in the 'P' case of (*importReader).obj(),
|
||||||
|
// the associated constraint type may not be complete due to recursion.
|
||||||
|
// Therefore, we defer calling SetConstraint there, and call it here instead
|
||||||
|
// after all types are complete.
|
||||||
|
for _, d := range p.later {
|
||||||
|
typeparams.SetTypeParamConstraint(d.t, d.constraint)
|
||||||
|
}
|
||||||
|
|
||||||
for _, typ := range p.interfaceList {
|
for _, typ := range p.interfaceList {
|
||||||
typ.Complete()
|
typ.Complete()
|
||||||
}
|
}
|
||||||
@ -244,6 +255,11 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data
|
|||||||
return pkgs, nil
|
return pkgs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type setConstraintArgs struct {
|
||||||
|
t *typeparams.TypeParam
|
||||||
|
constraint types.Type
|
||||||
|
}
|
||||||
|
|
||||||
type iimporter struct {
|
type iimporter struct {
|
||||||
version int
|
version int
|
||||||
ipath string
|
ipath string
|
||||||
@ -260,6 +276,9 @@ type iimporter struct {
|
|||||||
fake fakeFileSet
|
fake fakeFileSet
|
||||||
interfaceList []*types.Interface
|
interfaceList []*types.Interface
|
||||||
|
|
||||||
|
// Arguments for calls to SetConstraint that are deferred due to recursive types
|
||||||
|
later []setConstraintArgs
|
||||||
|
|
||||||
indent int // for tracing support
|
indent int // for tracing support
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -444,7 +463,7 @@ func (r *importReader) obj(name string) {
|
|||||||
|
|
||||||
// To handle recursive references to the typeparam within its
|
// To handle recursive references to the typeparam within its
|
||||||
// bound, save the partial type in tparamIndex before reading the bounds.
|
// bound, save the partial type in tparamIndex before reading the bounds.
|
||||||
id := ident{r.currPkg.Name(), name}
|
id := ident{r.currPkg, name}
|
||||||
r.p.tparamIndex[id] = t
|
r.p.tparamIndex[id] = t
|
||||||
var implicit bool
|
var implicit bool
|
||||||
if r.p.version >= iexportVersionGo1_18 {
|
if r.p.version >= iexportVersionGo1_18 {
|
||||||
@ -458,7 +477,11 @@ func (r *importReader) obj(name string) {
|
|||||||
}
|
}
|
||||||
typeparams.MarkImplicit(iface)
|
typeparams.MarkImplicit(iface)
|
||||||
}
|
}
|
||||||
typeparams.SetTypeParamConstraint(t, constraint)
|
// The constraint type may not be complete, if we
|
||||||
|
// are in the middle of a type recursion involving type
|
||||||
|
// constraints. So, we defer SetConstraint until we have
|
||||||
|
// completely set up all types in ImportData.
|
||||||
|
r.p.later = append(r.p.later, setConstraintArgs{t: t, constraint: constraint})
|
||||||
|
|
||||||
case 'V':
|
case 'V':
|
||||||
typ := r.typ()
|
typ := r.typ()
|
||||||
@ -756,7 +779,7 @@ func (r *importReader) doType(base *types.Named) (res types.Type) {
|
|||||||
errorf("unexpected type param type")
|
errorf("unexpected type param type")
|
||||||
}
|
}
|
||||||
pkg, name := r.qualifiedIdent()
|
pkg, name := r.qualifiedIdent()
|
||||||
id := ident{pkg.Name(), name}
|
id := ident{pkg, name}
|
||||||
if t, ok := r.p.tparamIndex[id]; ok {
|
if t, ok := r.p.tparamIndex[id]; ok {
|
||||||
// We're already in the process of importing this typeparam.
|
// We're already in the process of importing this typeparam.
|
||||||
return t
|
return t
|
||||||
|
|||||||
1
vendor/golang.org/x/tools/go/packages/doc.go
generated
vendored
1
vendor/golang.org/x/tools/go/packages/doc.go
generated
vendored
@ -67,7 +67,6 @@ Most tools should pass their command-line arguments (after any flags)
|
|||||||
uninterpreted to the loader, so that the loader can interpret them
|
uninterpreted to the loader, so that the loader can interpret them
|
||||||
according to the conventions of the underlying build system.
|
according to the conventions of the underlying build system.
|
||||||
See the Example function for typical usage.
|
See the Example function for typical usage.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
package packages // import "golang.org/x/tools/go/packages"
|
package packages // import "golang.org/x/tools/go/packages"
|
||||||
|
|
||||||
|
|||||||
85
vendor/golang.org/x/tools/go/packages/golist.go
generated
vendored
85
vendor/golang.org/x/tools/go/packages/golist.go
generated
vendored
@ -26,7 +26,6 @@ import (
|
|||||||
"golang.org/x/tools/go/internal/packagesdriver"
|
"golang.org/x/tools/go/internal/packagesdriver"
|
||||||
"golang.org/x/tools/internal/gocommand"
|
"golang.org/x/tools/internal/gocommand"
|
||||||
"golang.org/x/tools/internal/packagesinternal"
|
"golang.org/x/tools/internal/packagesinternal"
|
||||||
"golang.org/x/xerrors"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// debug controls verbose logging.
|
// debug controls verbose logging.
|
||||||
@ -393,6 +392,8 @@ type jsonPackage struct {
|
|||||||
CompiledGoFiles []string
|
CompiledGoFiles []string
|
||||||
IgnoredGoFiles []string
|
IgnoredGoFiles []string
|
||||||
IgnoredOtherFiles []string
|
IgnoredOtherFiles []string
|
||||||
|
EmbedPatterns []string
|
||||||
|
EmbedFiles []string
|
||||||
CFiles []string
|
CFiles []string
|
||||||
CgoFiles []string
|
CgoFiles []string
|
||||||
CXXFiles []string
|
CXXFiles []string
|
||||||
@ -444,7 +445,11 @@ func (state *golistState) createDriverResponse(words ...string) (*driverResponse
|
|||||||
|
|
||||||
// Run "go list" for complete
|
// Run "go list" for complete
|
||||||
// information on the specified packages.
|
// information on the specified packages.
|
||||||
buf, err := state.invokeGo("list", golistargs(state.cfg, words)...)
|
goVersion, err := state.getGoVersion()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
buf, err := state.invokeGo("list", golistargs(state.cfg, words, goVersion)...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -565,6 +570,8 @@ func (state *golistState) createDriverResponse(words ...string) (*driverResponse
|
|||||||
GoFiles: absJoin(p.Dir, p.GoFiles, p.CgoFiles),
|
GoFiles: absJoin(p.Dir, p.GoFiles, p.CgoFiles),
|
||||||
CompiledGoFiles: absJoin(p.Dir, p.CompiledGoFiles),
|
CompiledGoFiles: absJoin(p.Dir, p.CompiledGoFiles),
|
||||||
OtherFiles: absJoin(p.Dir, otherFiles(p)...),
|
OtherFiles: absJoin(p.Dir, otherFiles(p)...),
|
||||||
|
EmbedFiles: absJoin(p.Dir, p.EmbedFiles),
|
||||||
|
EmbedPatterns: absJoin(p.Dir, p.EmbedPatterns),
|
||||||
IgnoredFiles: absJoin(p.Dir, p.IgnoredGoFiles, p.IgnoredOtherFiles),
|
IgnoredFiles: absJoin(p.Dir, p.IgnoredGoFiles, p.IgnoredOtherFiles),
|
||||||
forTest: p.ForTest,
|
forTest: p.ForTest,
|
||||||
depsErrors: p.DepsErrors,
|
depsErrors: p.DepsErrors,
|
||||||
@ -805,17 +812,83 @@ func absJoin(dir string, fileses ...[]string) (res []string) {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func golistargs(cfg *Config, words []string) []string {
|
func jsonFlag(cfg *Config, goVersion int) string {
|
||||||
|
if goVersion < 19 {
|
||||||
|
return "-json"
|
||||||
|
}
|
||||||
|
var fields []string
|
||||||
|
added := make(map[string]bool)
|
||||||
|
addFields := func(fs ...string) {
|
||||||
|
for _, f := range fs {
|
||||||
|
if !added[f] {
|
||||||
|
added[f] = true
|
||||||
|
fields = append(fields, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
addFields("Name", "ImportPath", "Error") // These fields are always needed
|
||||||
|
if cfg.Mode&NeedFiles != 0 || cfg.Mode&NeedTypes != 0 {
|
||||||
|
addFields("Dir", "GoFiles", "IgnoredGoFiles", "IgnoredOtherFiles", "CFiles",
|
||||||
|
"CgoFiles", "CXXFiles", "MFiles", "HFiles", "FFiles", "SFiles",
|
||||||
|
"SwigFiles", "SwigCXXFiles", "SysoFiles")
|
||||||
|
if cfg.Tests {
|
||||||
|
addFields("TestGoFiles", "XTestGoFiles")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if cfg.Mode&NeedTypes != 0 {
|
||||||
|
// CompiledGoFiles seems to be required for the test case TestCgoNoSyntax,
|
||||||
|
// even when -compiled isn't passed in.
|
||||||
|
// TODO(#52435): Should we make the test ask for -compiled, or automatically
|
||||||
|
// request CompiledGoFiles in certain circumstances?
|
||||||
|
addFields("Dir", "CompiledGoFiles")
|
||||||
|
}
|
||||||
|
if cfg.Mode&NeedCompiledGoFiles != 0 {
|
||||||
|
addFields("Dir", "CompiledGoFiles", "Export")
|
||||||
|
}
|
||||||
|
if cfg.Mode&NeedImports != 0 {
|
||||||
|
// When imports are requested, DepOnly is used to distinguish between packages
|
||||||
|
// explicitly requested and transitive imports of those packages.
|
||||||
|
addFields("DepOnly", "Imports", "ImportMap")
|
||||||
|
if cfg.Tests {
|
||||||
|
addFields("TestImports", "XTestImports")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if cfg.Mode&NeedDeps != 0 {
|
||||||
|
addFields("DepOnly")
|
||||||
|
}
|
||||||
|
if usesExportData(cfg) {
|
||||||
|
// Request Dir in the unlikely case Export is not absolute.
|
||||||
|
addFields("Dir", "Export")
|
||||||
|
}
|
||||||
|
if cfg.Mode&needInternalForTest != 0 {
|
||||||
|
addFields("ForTest")
|
||||||
|
}
|
||||||
|
if cfg.Mode&needInternalDepsErrors != 0 {
|
||||||
|
addFields("DepsErrors")
|
||||||
|
}
|
||||||
|
if cfg.Mode&NeedModule != 0 {
|
||||||
|
addFields("Module")
|
||||||
|
}
|
||||||
|
if cfg.Mode&NeedEmbedFiles != 0 {
|
||||||
|
addFields("EmbedFiles")
|
||||||
|
}
|
||||||
|
if cfg.Mode&NeedEmbedPatterns != 0 {
|
||||||
|
addFields("EmbedPatterns")
|
||||||
|
}
|
||||||
|
return "-json=" + strings.Join(fields, ",")
|
||||||
|
}
|
||||||
|
|
||||||
|
func golistargs(cfg *Config, words []string, goVersion int) []string {
|
||||||
const findFlags = NeedImports | NeedTypes | NeedSyntax | NeedTypesInfo
|
const findFlags = NeedImports | NeedTypes | NeedSyntax | NeedTypesInfo
|
||||||
fullargs := []string{
|
fullargs := []string{
|
||||||
"-e", "-json",
|
"-e", jsonFlag(cfg, goVersion),
|
||||||
fmt.Sprintf("-compiled=%t", cfg.Mode&(NeedCompiledGoFiles|NeedSyntax|NeedTypes|NeedTypesInfo|NeedTypesSizes) != 0),
|
fmt.Sprintf("-compiled=%t", cfg.Mode&(NeedCompiledGoFiles|NeedSyntax|NeedTypes|NeedTypesInfo|NeedTypesSizes) != 0),
|
||||||
fmt.Sprintf("-test=%t", cfg.Tests),
|
fmt.Sprintf("-test=%t", cfg.Tests),
|
||||||
fmt.Sprintf("-export=%t", usesExportData(cfg)),
|
fmt.Sprintf("-export=%t", usesExportData(cfg)),
|
||||||
fmt.Sprintf("-deps=%t", cfg.Mode&NeedImports != 0),
|
fmt.Sprintf("-deps=%t", cfg.Mode&NeedImports != 0),
|
||||||
// go list doesn't let you pass -test and -find together,
|
// go list doesn't let you pass -test and -find together,
|
||||||
// probably because you'd just get the TestMain.
|
// probably because you'd just get the TestMain.
|
||||||
fmt.Sprintf("-find=%t", !cfg.Tests && cfg.Mode&findFlags == 0),
|
fmt.Sprintf("-find=%t", !cfg.Tests && cfg.Mode&findFlags == 0 && !usesExportData(cfg)),
|
||||||
}
|
}
|
||||||
fullargs = append(fullargs, cfg.BuildFlags...)
|
fullargs = append(fullargs, cfg.BuildFlags...)
|
||||||
fullargs = append(fullargs, "--")
|
fullargs = append(fullargs, "--")
|
||||||
@ -879,7 +952,7 @@ func (state *golistState) invokeGo(verb string, args ...string) (*bytes.Buffer,
|
|||||||
if !ok {
|
if !ok {
|
||||||
// Catastrophic error:
|
// Catastrophic error:
|
||||||
// - context cancellation
|
// - context cancellation
|
||||||
return nil, xerrors.Errorf("couldn't run 'go': %w", err)
|
return nil, fmt.Errorf("couldn't run 'go': %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Old go version?
|
// Old go version?
|
||||||
|
|||||||
4
vendor/golang.org/x/tools/go/packages/loadmode_string.go
generated
vendored
4
vendor/golang.org/x/tools/go/packages/loadmode_string.go
generated
vendored
@ -15,7 +15,7 @@ var allModes = []LoadMode{
|
|||||||
NeedCompiledGoFiles,
|
NeedCompiledGoFiles,
|
||||||
NeedImports,
|
NeedImports,
|
||||||
NeedDeps,
|
NeedDeps,
|
||||||
NeedExportsFile,
|
NeedExportFile,
|
||||||
NeedTypes,
|
NeedTypes,
|
||||||
NeedSyntax,
|
NeedSyntax,
|
||||||
NeedTypesInfo,
|
NeedTypesInfo,
|
||||||
@ -28,7 +28,7 @@ var modeStrings = []string{
|
|||||||
"NeedCompiledGoFiles",
|
"NeedCompiledGoFiles",
|
||||||
"NeedImports",
|
"NeedImports",
|
||||||
"NeedDeps",
|
"NeedDeps",
|
||||||
"NeedExportsFile",
|
"NeedExportFile",
|
||||||
"NeedTypes",
|
"NeedTypes",
|
||||||
"NeedSyntax",
|
"NeedSyntax",
|
||||||
"NeedTypesInfo",
|
"NeedTypesInfo",
|
||||||
|
|||||||
73
vendor/golang.org/x/tools/go/packages/packages.go
generated
vendored
73
vendor/golang.org/x/tools/go/packages/packages.go
generated
vendored
@ -39,9 +39,6 @@ import (
|
|||||||
// Load may return more information than requested.
|
// Load may return more information than requested.
|
||||||
type LoadMode int
|
type LoadMode int
|
||||||
|
|
||||||
// TODO(matloob): When a V2 of go/packages is released, rename NeedExportsFile to
|
|
||||||
// NeedExportFile to make it consistent with the Package field it's adding.
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// NeedName adds Name and PkgPath.
|
// NeedName adds Name and PkgPath.
|
||||||
NeedName LoadMode = 1 << iota
|
NeedName LoadMode = 1 << iota
|
||||||
@ -59,8 +56,8 @@ const (
|
|||||||
// NeedDeps adds the fields requested by the LoadMode in the packages in Imports.
|
// NeedDeps adds the fields requested by the LoadMode in the packages in Imports.
|
||||||
NeedDeps
|
NeedDeps
|
||||||
|
|
||||||
// NeedExportsFile adds ExportFile.
|
// NeedExportFile adds ExportFile.
|
||||||
NeedExportsFile
|
NeedExportFile
|
||||||
|
|
||||||
// NeedTypes adds Types, Fset, and IllTyped.
|
// NeedTypes adds Types, Fset, and IllTyped.
|
||||||
NeedTypes
|
NeedTypes
|
||||||
@ -74,12 +71,25 @@ const (
|
|||||||
// NeedTypesSizes adds TypesSizes.
|
// NeedTypesSizes adds TypesSizes.
|
||||||
NeedTypesSizes
|
NeedTypesSizes
|
||||||
|
|
||||||
|
// needInternalDepsErrors adds the internal deps errors field for use by gopls.
|
||||||
|
needInternalDepsErrors
|
||||||
|
|
||||||
|
// needInternalForTest adds the internal forTest field.
|
||||||
|
// Tests must also be set on the context for this field to be populated.
|
||||||
|
needInternalForTest
|
||||||
|
|
||||||
// typecheckCgo enables full support for type checking cgo. Requires Go 1.15+.
|
// typecheckCgo enables full support for type checking cgo. Requires Go 1.15+.
|
||||||
// Modifies CompiledGoFiles and Types, and has no effect on its own.
|
// Modifies CompiledGoFiles and Types, and has no effect on its own.
|
||||||
typecheckCgo
|
typecheckCgo
|
||||||
|
|
||||||
// NeedModule adds Module.
|
// NeedModule adds Module.
|
||||||
NeedModule
|
NeedModule
|
||||||
|
|
||||||
|
// NeedEmbedFiles adds EmbedFiles.
|
||||||
|
NeedEmbedFiles
|
||||||
|
|
||||||
|
// NeedEmbedPatterns adds EmbedPatterns.
|
||||||
|
NeedEmbedPatterns
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -102,6 +112,9 @@ const (
|
|||||||
// Deprecated: LoadAllSyntax exists for historical compatibility
|
// Deprecated: LoadAllSyntax exists for historical compatibility
|
||||||
// and should not be used. Please directly specify the needed fields using the Need values.
|
// and should not be used. Please directly specify the needed fields using the Need values.
|
||||||
LoadAllSyntax = LoadSyntax | NeedDeps
|
LoadAllSyntax = LoadSyntax | NeedDeps
|
||||||
|
|
||||||
|
// Deprecated: NeedExportsFile is a historical misspelling of NeedExportFile.
|
||||||
|
NeedExportsFile = NeedExportFile
|
||||||
)
|
)
|
||||||
|
|
||||||
// A Config specifies details about how packages should be loaded.
|
// A Config specifies details about how packages should be loaded.
|
||||||
@ -296,6 +309,14 @@ type Package struct {
|
|||||||
// including assembly, C, C++, Fortran, Objective-C, SWIG, and so on.
|
// including assembly, C, C++, Fortran, Objective-C, SWIG, and so on.
|
||||||
OtherFiles []string
|
OtherFiles []string
|
||||||
|
|
||||||
|
// EmbedFiles lists the absolute file paths of the package's files
|
||||||
|
// embedded with go:embed.
|
||||||
|
EmbedFiles []string
|
||||||
|
|
||||||
|
// EmbedPatterns lists the absolute file patterns of the package's
|
||||||
|
// files embedded with go:embed.
|
||||||
|
EmbedPatterns []string
|
||||||
|
|
||||||
// IgnoredFiles lists source files that are not part of the package
|
// IgnoredFiles lists source files that are not part of the package
|
||||||
// using the current build configuration but that might be part of
|
// using the current build configuration but that might be part of
|
||||||
// the package using other build configurations.
|
// the package using other build configurations.
|
||||||
@ -389,6 +410,8 @@ func init() {
|
|||||||
config.(*Config).modFlag = value
|
config.(*Config).modFlag = value
|
||||||
}
|
}
|
||||||
packagesinternal.TypecheckCgo = int(typecheckCgo)
|
packagesinternal.TypecheckCgo = int(typecheckCgo)
|
||||||
|
packagesinternal.DepsErrors = int(needInternalDepsErrors)
|
||||||
|
packagesinternal.ForTest = int(needInternalForTest)
|
||||||
}
|
}
|
||||||
|
|
||||||
// An Error describes a problem with a package's metadata, syntax, or types.
|
// An Error describes a problem with a package's metadata, syntax, or types.
|
||||||
@ -431,6 +454,8 @@ type flatPackage struct {
|
|||||||
GoFiles []string `json:",omitempty"`
|
GoFiles []string `json:",omitempty"`
|
||||||
CompiledGoFiles []string `json:",omitempty"`
|
CompiledGoFiles []string `json:",omitempty"`
|
||||||
OtherFiles []string `json:",omitempty"`
|
OtherFiles []string `json:",omitempty"`
|
||||||
|
EmbedFiles []string `json:",omitempty"`
|
||||||
|
EmbedPatterns []string `json:",omitempty"`
|
||||||
IgnoredFiles []string `json:",omitempty"`
|
IgnoredFiles []string `json:",omitempty"`
|
||||||
ExportFile string `json:",omitempty"`
|
ExportFile string `json:",omitempty"`
|
||||||
Imports map[string]string `json:",omitempty"`
|
Imports map[string]string `json:",omitempty"`
|
||||||
@ -454,6 +479,8 @@ func (p *Package) MarshalJSON() ([]byte, error) {
|
|||||||
GoFiles: p.GoFiles,
|
GoFiles: p.GoFiles,
|
||||||
CompiledGoFiles: p.CompiledGoFiles,
|
CompiledGoFiles: p.CompiledGoFiles,
|
||||||
OtherFiles: p.OtherFiles,
|
OtherFiles: p.OtherFiles,
|
||||||
|
EmbedFiles: p.EmbedFiles,
|
||||||
|
EmbedPatterns: p.EmbedPatterns,
|
||||||
IgnoredFiles: p.IgnoredFiles,
|
IgnoredFiles: p.IgnoredFiles,
|
||||||
ExportFile: p.ExportFile,
|
ExportFile: p.ExportFile,
|
||||||
}
|
}
|
||||||
@ -481,6 +508,8 @@ func (p *Package) UnmarshalJSON(b []byte) error {
|
|||||||
GoFiles: flat.GoFiles,
|
GoFiles: flat.GoFiles,
|
||||||
CompiledGoFiles: flat.CompiledGoFiles,
|
CompiledGoFiles: flat.CompiledGoFiles,
|
||||||
OtherFiles: flat.OtherFiles,
|
OtherFiles: flat.OtherFiles,
|
||||||
|
EmbedFiles: flat.EmbedFiles,
|
||||||
|
EmbedPatterns: flat.EmbedPatterns,
|
||||||
ExportFile: flat.ExportFile,
|
ExportFile: flat.ExportFile,
|
||||||
}
|
}
|
||||||
if len(flat.Imports) > 0 {
|
if len(flat.Imports) > 0 {
|
||||||
@ -614,7 +643,7 @@ func (ld *loader) refine(roots []string, list ...*Package) ([]*Package, error) {
|
|||||||
needsrc := ((ld.Mode&(NeedSyntax|NeedTypesInfo) != 0 && (rootIndex >= 0 || ld.Mode&NeedDeps != 0)) ||
|
needsrc := ((ld.Mode&(NeedSyntax|NeedTypesInfo) != 0 && (rootIndex >= 0 || ld.Mode&NeedDeps != 0)) ||
|
||||||
// ... or if we need types and the exportData is invalid. We fall back to (incompletely)
|
// ... or if we need types and the exportData is invalid. We fall back to (incompletely)
|
||||||
// typechecking packages from source if they fail to compile.
|
// typechecking packages from source if they fail to compile.
|
||||||
(ld.Mode&NeedTypes|NeedTypesInfo != 0 && exportDataInvalid)) && pkg.PkgPath != "unsafe"
|
(ld.Mode&(NeedTypes|NeedTypesInfo) != 0 && exportDataInvalid)) && pkg.PkgPath != "unsafe"
|
||||||
lpkg := &loaderPackage{
|
lpkg := &loaderPackage{
|
||||||
Package: pkg,
|
Package: pkg,
|
||||||
needtypes: needtypes,
|
needtypes: needtypes,
|
||||||
@ -752,13 +781,19 @@ func (ld *loader) refine(roots []string, list ...*Package) ([]*Package, error) {
|
|||||||
ld.pkgs[i].OtherFiles = nil
|
ld.pkgs[i].OtherFiles = nil
|
||||||
ld.pkgs[i].IgnoredFiles = nil
|
ld.pkgs[i].IgnoredFiles = nil
|
||||||
}
|
}
|
||||||
|
if ld.requestedMode&NeedEmbedFiles == 0 {
|
||||||
|
ld.pkgs[i].EmbedFiles = nil
|
||||||
|
}
|
||||||
|
if ld.requestedMode&NeedEmbedPatterns == 0 {
|
||||||
|
ld.pkgs[i].EmbedPatterns = nil
|
||||||
|
}
|
||||||
if ld.requestedMode&NeedCompiledGoFiles == 0 {
|
if ld.requestedMode&NeedCompiledGoFiles == 0 {
|
||||||
ld.pkgs[i].CompiledGoFiles = nil
|
ld.pkgs[i].CompiledGoFiles = nil
|
||||||
}
|
}
|
||||||
if ld.requestedMode&NeedImports == 0 {
|
if ld.requestedMode&NeedImports == 0 {
|
||||||
ld.pkgs[i].Imports = nil
|
ld.pkgs[i].Imports = nil
|
||||||
}
|
}
|
||||||
if ld.requestedMode&NeedExportsFile == 0 {
|
if ld.requestedMode&NeedExportFile == 0 {
|
||||||
ld.pkgs[i].ExportFile = ""
|
ld.pkgs[i].ExportFile = ""
|
||||||
}
|
}
|
||||||
if ld.requestedMode&NeedTypes == 0 {
|
if ld.requestedMode&NeedTypes == 0 {
|
||||||
@ -1053,7 +1088,6 @@ func (ld *loader) parseFile(filename string) (*ast.File, error) {
|
|||||||
//
|
//
|
||||||
// Because files are scanned in parallel, the token.Pos
|
// Because files are scanned in parallel, the token.Pos
|
||||||
// positions of the resulting ast.Files are not ordered.
|
// positions of the resulting ast.Files are not ordered.
|
||||||
//
|
|
||||||
func (ld *loader) parseFiles(filenames []string) ([]*ast.File, []error) {
|
func (ld *loader) parseFiles(filenames []string) ([]*ast.File, []error) {
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
n := len(filenames)
|
n := len(filenames)
|
||||||
@ -1097,7 +1131,6 @@ func (ld *loader) parseFiles(filenames []string) ([]*ast.File, []error) {
|
|||||||
|
|
||||||
// sameFile returns true if x and y have the same basename and denote
|
// sameFile returns true if x and y have the same basename and denote
|
||||||
// the same file.
|
// the same file.
|
||||||
//
|
|
||||||
func sameFile(x, y string) bool {
|
func sameFile(x, y string) bool {
|
||||||
if x == y {
|
if x == y {
|
||||||
// It could be the case that y doesn't exist.
|
// It could be the case that y doesn't exist.
|
||||||
@ -1210,8 +1243,13 @@ func (ld *loader) loadFromExportData(lpkg *loaderPackage) (*types.Package, error
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("reading %s: %v", lpkg.ExportFile, err)
|
return nil, fmt.Errorf("reading %s: %v", lpkg.ExportFile, err)
|
||||||
}
|
}
|
||||||
|
if _, ok := view["go.shape"]; ok {
|
||||||
|
// Account for the pseudopackage "go.shape" that gets
|
||||||
|
// created by generic code.
|
||||||
|
viewLen++
|
||||||
|
}
|
||||||
if viewLen != len(view) {
|
if viewLen != len(view) {
|
||||||
log.Fatalf("Unexpected package creation during export data loading")
|
log.Panicf("golang.org/x/tools/go/packages: unexpected new packages during load of %s", lpkg.PkgPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
lpkg.Types = tpkg
|
lpkg.Types = tpkg
|
||||||
@ -1222,17 +1260,8 @@ func (ld *loader) loadFromExportData(lpkg *loaderPackage) (*types.Package, error
|
|||||||
|
|
||||||
// impliedLoadMode returns loadMode with its dependencies.
|
// impliedLoadMode returns loadMode with its dependencies.
|
||||||
func impliedLoadMode(loadMode LoadMode) LoadMode {
|
func impliedLoadMode(loadMode LoadMode) LoadMode {
|
||||||
if loadMode&NeedTypesInfo != 0 && loadMode&NeedImports == 0 {
|
if loadMode&(NeedDeps|NeedTypes|NeedTypesInfo) != 0 {
|
||||||
// If NeedTypesInfo, go/packages needs to do typechecking itself so it can
|
// All these things require knowing the import graph.
|
||||||
// associate type info with the AST. To do so, we need the export data
|
|
||||||
// for dependencies, which means we need to ask for the direct dependencies.
|
|
||||||
// NeedImports is used to ask for the direct dependencies.
|
|
||||||
loadMode |= NeedImports
|
|
||||||
}
|
|
||||||
|
|
||||||
if loadMode&NeedDeps != 0 && loadMode&NeedImports == 0 {
|
|
||||||
// With NeedDeps we need to load at least direct dependencies.
|
|
||||||
// NeedImports is used to ask for the direct dependencies.
|
|
||||||
loadMode |= NeedImports
|
loadMode |= NeedImports
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1240,5 +1269,5 @@ func impliedLoadMode(loadMode LoadMode) LoadMode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func usesExportData(cfg *Config) bool {
|
func usesExportData(cfg *Config) bool {
|
||||||
return cfg.Mode&NeedExportsFile != 0 || cfg.Mode&NeedTypes != 0 && cfg.Mode&NeedDeps == 0
|
return cfg.Mode&NeedExportFile != 0 || cfg.Mode&NeedTypes != 0 && cfg.Mode&NeedDeps == 0
|
||||||
}
|
}
|
||||||
|
|||||||
22
vendor/golang.org/x/tools/internal/gocommand/invoke.go
generated
vendored
22
vendor/golang.org/x/tools/internal/gocommand/invoke.go
generated
vendored
@ -9,7 +9,6 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
exec "golang.org/x/sys/execabs"
|
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"regexp"
|
"regexp"
|
||||||
@ -18,6 +17,8 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
exec "golang.org/x/sys/execabs"
|
||||||
|
|
||||||
"golang.org/x/tools/internal/event"
|
"golang.org/x/tools/internal/event"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -131,9 +132,16 @@ type Invocation struct {
|
|||||||
Verb string
|
Verb string
|
||||||
Args []string
|
Args []string
|
||||||
BuildFlags []string
|
BuildFlags []string
|
||||||
ModFlag string
|
|
||||||
ModFile string
|
// If ModFlag is set, the go command is invoked with -mod=ModFlag.
|
||||||
Overlay string
|
ModFlag string
|
||||||
|
|
||||||
|
// If ModFile is set, the go command is invoked with -modfile=ModFile.
|
||||||
|
ModFile string
|
||||||
|
|
||||||
|
// If Overlay is set, the go command is invoked with -overlay=Overlay.
|
||||||
|
Overlay string
|
||||||
|
|
||||||
// If CleanEnv is set, the invocation will run only with the environment
|
// If CleanEnv is set, the invocation will run only with the environment
|
||||||
// in Env, not starting with os.Environ.
|
// in Env, not starting with os.Environ.
|
||||||
CleanEnv bool
|
CleanEnv bool
|
||||||
@ -256,8 +264,10 @@ func cmdDebugStr(cmd *exec.Cmd) string {
|
|||||||
env := make(map[string]string)
|
env := make(map[string]string)
|
||||||
for _, kv := range cmd.Env {
|
for _, kv := range cmd.Env {
|
||||||
split := strings.SplitN(kv, "=", 2)
|
split := strings.SplitN(kv, "=", 2)
|
||||||
k, v := split[0], split[1]
|
if len(split) == 2 {
|
||||||
env[k] = v
|
k, v := split[0], split[1]
|
||||||
|
env[k] = v
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var args []string
|
var args []string
|
||||||
|
|||||||
22
vendor/golang.org/x/tools/internal/gocommand/vendor.go
generated
vendored
22
vendor/golang.org/x/tools/internal/gocommand/vendor.go
generated
vendored
@ -38,10 +38,10 @@ var modFlagRegexp = regexp.MustCompile(`-mod[ =](\w+)`)
|
|||||||
// with the supplied context.Context and Invocation. The Invocation can contain pre-defined fields,
|
// with the supplied context.Context and Invocation. The Invocation can contain pre-defined fields,
|
||||||
// of which only Verb and Args are modified to run the appropriate Go command.
|
// of which only Verb and Args are modified to run the appropriate Go command.
|
||||||
// Inspired by setDefaultBuildMod in modload/init.go
|
// Inspired by setDefaultBuildMod in modload/init.go
|
||||||
func VendorEnabled(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON, bool, error) {
|
func VendorEnabled(ctx context.Context, inv Invocation, r *Runner) (bool, *ModuleJSON, error) {
|
||||||
mainMod, go114, err := getMainModuleAnd114(ctx, inv, r)
|
mainMod, go114, err := getMainModuleAnd114(ctx, inv, r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, false, err
|
return false, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// We check the GOFLAGS to see if there is anything overridden or not.
|
// We check the GOFLAGS to see if there is anything overridden or not.
|
||||||
@ -49,7 +49,7 @@ func VendorEnabled(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON,
|
|||||||
inv.Args = []string{"GOFLAGS"}
|
inv.Args = []string{"GOFLAGS"}
|
||||||
stdout, err := r.Run(ctx, inv)
|
stdout, err := r.Run(ctx, inv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, false, err
|
return false, nil, err
|
||||||
}
|
}
|
||||||
goflags := string(bytes.TrimSpace(stdout.Bytes()))
|
goflags := string(bytes.TrimSpace(stdout.Bytes()))
|
||||||
matches := modFlagRegexp.FindStringSubmatch(goflags)
|
matches := modFlagRegexp.FindStringSubmatch(goflags)
|
||||||
@ -57,25 +57,27 @@ func VendorEnabled(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON,
|
|||||||
if len(matches) != 0 {
|
if len(matches) != 0 {
|
||||||
modFlag = matches[1]
|
modFlag = matches[1]
|
||||||
}
|
}
|
||||||
if modFlag != "" {
|
// Don't override an explicit '-mod=' argument.
|
||||||
// Don't override an explicit '-mod=' argument.
|
if modFlag == "vendor" {
|
||||||
return mainMod, modFlag == "vendor", nil
|
return true, mainMod, nil
|
||||||
|
} else if modFlag != "" {
|
||||||
|
return false, nil, nil
|
||||||
}
|
}
|
||||||
if mainMod == nil || !go114 {
|
if mainMod == nil || !go114 {
|
||||||
return mainMod, false, nil
|
return false, nil, nil
|
||||||
}
|
}
|
||||||
// Check 1.14's automatic vendor mode.
|
// Check 1.14's automatic vendor mode.
|
||||||
if fi, err := os.Stat(filepath.Join(mainMod.Dir, "vendor")); err == nil && fi.IsDir() {
|
if fi, err := os.Stat(filepath.Join(mainMod.Dir, "vendor")); err == nil && fi.IsDir() {
|
||||||
if mainMod.GoVersion != "" && semver.Compare("v"+mainMod.GoVersion, "v1.14") >= 0 {
|
if mainMod.GoVersion != "" && semver.Compare("v"+mainMod.GoVersion, "v1.14") >= 0 {
|
||||||
// The Go version is at least 1.14, and a vendor directory exists.
|
// The Go version is at least 1.14, and a vendor directory exists.
|
||||||
// Set -mod=vendor by default.
|
// Set -mod=vendor by default.
|
||||||
return mainMod, true, nil
|
return true, mainMod, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return mainMod, false, nil
|
return false, nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// getMainModuleAnd114 gets the main module's information and whether the
|
// getMainModuleAnd114 gets one of the main modules' information and whether the
|
||||||
// go command in use is 1.14+. This is the information needed to figure out
|
// go command in use is 1.14+. This is the information needed to figure out
|
||||||
// if vendoring should be enabled.
|
// if vendoring should be enabled.
|
||||||
func getMainModuleAnd114(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON, bool, error) {
|
func getMainModuleAnd114(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON, bool, error) {
|
||||||
|
|||||||
2
vendor/golang.org/x/tools/internal/packagesinternal/packages.go
generated
vendored
2
vendor/golang.org/x/tools/internal/packagesinternal/packages.go
generated
vendored
@ -23,6 +23,8 @@ var GetGoCmdRunner = func(config interface{}) *gocommand.Runner { return nil }
|
|||||||
var SetGoCmdRunner = func(config interface{}, runner *gocommand.Runner) {}
|
var SetGoCmdRunner = func(config interface{}, runner *gocommand.Runner) {}
|
||||||
|
|
||||||
var TypecheckCgo int
|
var TypecheckCgo int
|
||||||
|
var DepsErrors int // must be set as a LoadMode to call GetDepsErrors
|
||||||
|
var ForTest int // must be set as a LoadMode to call GetForTest
|
||||||
|
|
||||||
var SetModFlag = func(config interface{}, value string) {}
|
var SetModFlag = func(config interface{}, value string) {}
|
||||||
var SetModFile = func(config interface{}, value string) {}
|
var SetModFile = func(config interface{}, value string) {}
|
||||||
|
|||||||
108
vendor/golang.org/x/tools/internal/typeparams/common.go
generated
vendored
108
vendor/golang.org/x/tools/internal/typeparams/common.go
generated
vendored
@ -16,11 +16,10 @@
|
|||||||
// Additionally, this package contains common utilities for working with the
|
// Additionally, this package contains common utilities for working with the
|
||||||
// new generic constructs, to supplement the standard library APIs. Notably,
|
// new generic constructs, to supplement the standard library APIs. Notably,
|
||||||
// the StructuralTerms API computes a minimal representation of the structural
|
// the StructuralTerms API computes a minimal representation of the structural
|
||||||
// restrictions on a type parameter. In the future, this API may be available
|
// restrictions on a type parameter.
|
||||||
// from go/types.
|
|
||||||
//
|
//
|
||||||
// See the example/README.md for a more detailed guide on how to update tools
|
// An external version of these APIs is available in the
|
||||||
// to support generics.
|
// golang.org/x/exp/typeparams module.
|
||||||
package typeparams
|
package typeparams
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -77,3 +76,104 @@ func IsTypeParam(t types.Type) bool {
|
|||||||
_, ok := t.(*TypeParam)
|
_, ok := t.(*TypeParam)
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// OriginMethod returns the origin method associated with the method fn.
|
||||||
|
// For methods on a non-generic receiver base type, this is just
|
||||||
|
// fn. However, for methods with a generic receiver, OriginMethod returns the
|
||||||
|
// corresponding method in the method set of the origin type.
|
||||||
|
//
|
||||||
|
// As a special case, if fn is not a method (has no receiver), OriginMethod
|
||||||
|
// returns fn.
|
||||||
|
func OriginMethod(fn *types.Func) *types.Func {
|
||||||
|
recv := fn.Type().(*types.Signature).Recv()
|
||||||
|
if recv == nil {
|
||||||
|
|
||||||
|
return fn
|
||||||
|
}
|
||||||
|
base := recv.Type()
|
||||||
|
p, isPtr := base.(*types.Pointer)
|
||||||
|
if isPtr {
|
||||||
|
base = p.Elem()
|
||||||
|
}
|
||||||
|
named, isNamed := base.(*types.Named)
|
||||||
|
if !isNamed {
|
||||||
|
// Receiver is a *types.Interface.
|
||||||
|
return fn
|
||||||
|
}
|
||||||
|
if ForNamed(named).Len() == 0 {
|
||||||
|
// Receiver base has no type parameters, so we can avoid the lookup below.
|
||||||
|
return fn
|
||||||
|
}
|
||||||
|
orig := NamedTypeOrigin(named)
|
||||||
|
gfn, _, _ := types.LookupFieldOrMethod(orig, true, fn.Pkg(), fn.Name())
|
||||||
|
return gfn.(*types.Func)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GenericAssignableTo is a generalization of types.AssignableTo that
|
||||||
|
// implements the following rule for uninstantiated generic types:
|
||||||
|
//
|
||||||
|
// If V and T are generic named types, then V is considered assignable to T if,
|
||||||
|
// for every possible instantation of V[A_1, ..., A_N], the instantiation
|
||||||
|
// T[A_1, ..., A_N] is valid and V[A_1, ..., A_N] implements T[A_1, ..., A_N].
|
||||||
|
//
|
||||||
|
// If T has structural constraints, they must be satisfied by V.
|
||||||
|
//
|
||||||
|
// For example, consider the following type declarations:
|
||||||
|
//
|
||||||
|
// type Interface[T any] interface {
|
||||||
|
// Accept(T)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// type Container[T any] struct {
|
||||||
|
// Element T
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// func (c Container[T]) Accept(t T) { c.Element = t }
|
||||||
|
//
|
||||||
|
// In this case, GenericAssignableTo reports that instantiations of Container
|
||||||
|
// are assignable to the corresponding instantiation of Interface.
|
||||||
|
func GenericAssignableTo(ctxt *Context, V, T types.Type) bool {
|
||||||
|
// If V and T are not both named, or do not have matching non-empty type
|
||||||
|
// parameter lists, fall back on types.AssignableTo.
|
||||||
|
|
||||||
|
VN, Vnamed := V.(*types.Named)
|
||||||
|
TN, Tnamed := T.(*types.Named)
|
||||||
|
if !Vnamed || !Tnamed {
|
||||||
|
return types.AssignableTo(V, T)
|
||||||
|
}
|
||||||
|
|
||||||
|
vtparams := ForNamed(VN)
|
||||||
|
ttparams := ForNamed(TN)
|
||||||
|
if vtparams.Len() == 0 || vtparams.Len() != ttparams.Len() || NamedTypeArgs(VN).Len() != 0 || NamedTypeArgs(TN).Len() != 0 {
|
||||||
|
return types.AssignableTo(V, T)
|
||||||
|
}
|
||||||
|
|
||||||
|
// V and T have the same (non-zero) number of type params. Instantiate both
|
||||||
|
// with the type parameters of V. This must always succeed for V, and will
|
||||||
|
// succeed for T if and only if the type set of each type parameter of V is a
|
||||||
|
// subset of the type set of the corresponding type parameter of T, meaning
|
||||||
|
// that every instantiation of V corresponds to a valid instantiation of T.
|
||||||
|
|
||||||
|
// Minor optimization: ensure we share a context across the two
|
||||||
|
// instantiations below.
|
||||||
|
if ctxt == nil {
|
||||||
|
ctxt = NewContext()
|
||||||
|
}
|
||||||
|
|
||||||
|
var targs []types.Type
|
||||||
|
for i := 0; i < vtparams.Len(); i++ {
|
||||||
|
targs = append(targs, vtparams.At(i))
|
||||||
|
}
|
||||||
|
|
||||||
|
vinst, err := Instantiate(ctxt, V, targs, true)
|
||||||
|
if err != nil {
|
||||||
|
panic("type parameters should satisfy their own constraints")
|
||||||
|
}
|
||||||
|
|
||||||
|
tinst, err := Instantiate(ctxt, T, targs, true)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return types.AssignableTo(vinst, tinst)
|
||||||
|
}
|
||||||
|
|||||||
122
vendor/golang.org/x/tools/internal/typeparams/coretype.go
generated
vendored
Normal file
122
vendor/golang.org/x/tools/internal/typeparams/coretype.go
generated
vendored
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
// Copyright 2022 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package typeparams
|
||||||
|
|
||||||
|
import (
|
||||||
|
"go/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CoreType returns the core type of T or nil if T does not have a core type.
|
||||||
|
//
|
||||||
|
// See https://go.dev/ref/spec#Core_types for the definition of a core type.
|
||||||
|
func CoreType(T types.Type) types.Type {
|
||||||
|
U := T.Underlying()
|
||||||
|
if _, ok := U.(*types.Interface); !ok {
|
||||||
|
return U // for non-interface types,
|
||||||
|
}
|
||||||
|
|
||||||
|
terms, err := _NormalTerms(U)
|
||||||
|
if len(terms) == 0 || err != nil {
|
||||||
|
// len(terms) -> empty type set of interface.
|
||||||
|
// err != nil => U is invalid, exceeds complexity bounds, or has an empty type set.
|
||||||
|
return nil // no core type.
|
||||||
|
}
|
||||||
|
|
||||||
|
U = terms[0].Type().Underlying()
|
||||||
|
var identical int // i in [0,identical) => Identical(U, terms[i].Type().Underlying())
|
||||||
|
for identical = 1; identical < len(terms); identical++ {
|
||||||
|
if !types.Identical(U, terms[identical].Type().Underlying()) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if identical == len(terms) {
|
||||||
|
// https://go.dev/ref/spec#Core_types
|
||||||
|
// "There is a single type U which is the underlying type of all types in the type set of T"
|
||||||
|
return U
|
||||||
|
}
|
||||||
|
ch, ok := U.(*types.Chan)
|
||||||
|
if !ok {
|
||||||
|
return nil // no core type as identical < len(terms) and U is not a channel.
|
||||||
|
}
|
||||||
|
// https://go.dev/ref/spec#Core_types
|
||||||
|
// "the type chan E if T contains only bidirectional channels, or the type chan<- E or
|
||||||
|
// <-chan E depending on the direction of the directional channels present."
|
||||||
|
for chans := identical; chans < len(terms); chans++ {
|
||||||
|
curr, ok := terms[chans].Type().Underlying().(*types.Chan)
|
||||||
|
if !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if !types.Identical(ch.Elem(), curr.Elem()) {
|
||||||
|
return nil // channel elements are not identical.
|
||||||
|
}
|
||||||
|
if ch.Dir() == types.SendRecv {
|
||||||
|
// ch is bidirectional. We can safely always use curr's direction.
|
||||||
|
ch = curr
|
||||||
|
} else if curr.Dir() != types.SendRecv && ch.Dir() != curr.Dir() {
|
||||||
|
// ch and curr are not bidirectional and not the same direction.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ch
|
||||||
|
}
|
||||||
|
|
||||||
|
// _NormalTerms returns a slice of terms representing the normalized structural
|
||||||
|
// type restrictions of a type, if any.
|
||||||
|
//
|
||||||
|
// For all types other than *types.TypeParam, *types.Interface, and
|
||||||
|
// *types.Union, this is just a single term with Tilde() == false and
|
||||||
|
// Type() == typ. For *types.TypeParam, *types.Interface, and *types.Union, see
|
||||||
|
// below.
|
||||||
|
//
|
||||||
|
// Structural type restrictions of a type parameter are created via
|
||||||
|
// non-interface types embedded in its constraint interface (directly, or via a
|
||||||
|
// chain of interface embeddings). For example, in the declaration type
|
||||||
|
// T[P interface{~int; m()}] int the structural restriction of the type
|
||||||
|
// parameter P is ~int.
|
||||||
|
//
|
||||||
|
// With interface embedding and unions, the specification of structural type
|
||||||
|
// restrictions may be arbitrarily complex. For example, consider the
|
||||||
|
// following:
|
||||||
|
//
|
||||||
|
// type A interface{ ~string|~[]byte }
|
||||||
|
//
|
||||||
|
// type B interface{ int|string }
|
||||||
|
//
|
||||||
|
// type C interface { ~string|~int }
|
||||||
|
//
|
||||||
|
// type T[P interface{ A|B; C }] int
|
||||||
|
//
|
||||||
|
// In this example, the structural type restriction of P is ~string|int: A|B
|
||||||
|
// expands to ~string|~[]byte|int|string, which reduces to ~string|~[]byte|int,
|
||||||
|
// which when intersected with C (~string|~int) yields ~string|int.
|
||||||
|
//
|
||||||
|
// _NormalTerms computes these expansions and reductions, producing a
|
||||||
|
// "normalized" form of the embeddings. A structural restriction is normalized
|
||||||
|
// if it is a single union containing no interface terms, and is minimal in the
|
||||||
|
// sense that removing any term changes the set of types satisfying the
|
||||||
|
// constraint. It is left as a proof for the reader that, modulo sorting, there
|
||||||
|
// is exactly one such normalized form.
|
||||||
|
//
|
||||||
|
// Because the minimal representation always takes this form, _NormalTerms
|
||||||
|
// returns a slice of tilde terms corresponding to the terms of the union in
|
||||||
|
// the normalized structural restriction. An error is returned if the type is
|
||||||
|
// invalid, exceeds complexity bounds, or has an empty type set. In the latter
|
||||||
|
// case, _NormalTerms returns ErrEmptyTypeSet.
|
||||||
|
//
|
||||||
|
// _NormalTerms makes no guarantees about the order of terms, except that it
|
||||||
|
// is deterministic.
|
||||||
|
func _NormalTerms(typ types.Type) ([]*Term, error) {
|
||||||
|
switch typ := typ.(type) {
|
||||||
|
case *TypeParam:
|
||||||
|
return StructuralTerms(typ)
|
||||||
|
case *Union:
|
||||||
|
return UnionTermSet(typ)
|
||||||
|
case *types.Interface:
|
||||||
|
return InterfaceTermSet(typ)
|
||||||
|
default:
|
||||||
|
return []*Term{NewTerm(false, typ)}, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
12
vendor/golang.org/x/tools/internal/typeparams/normalize.go
generated
vendored
12
vendor/golang.org/x/tools/internal/typeparams/normalize.go
generated
vendored
@ -24,20 +24,22 @@ var ErrEmptyTypeSet = errors.New("empty type set")
|
|||||||
// Structural type restrictions of a type parameter are created via
|
// Structural type restrictions of a type parameter are created via
|
||||||
// non-interface types embedded in its constraint interface (directly, or via a
|
// non-interface types embedded in its constraint interface (directly, or via a
|
||||||
// chain of interface embeddings). For example, in the declaration
|
// chain of interface embeddings). For example, in the declaration
|
||||||
// type T[P interface{~int; m()}] int
|
//
|
||||||
|
// type T[P interface{~int; m()}] int
|
||||||
|
//
|
||||||
// the structural restriction of the type parameter P is ~int.
|
// the structural restriction of the type parameter P is ~int.
|
||||||
//
|
//
|
||||||
// With interface embedding and unions, the specification of structural type
|
// With interface embedding and unions, the specification of structural type
|
||||||
// restrictions may be arbitrarily complex. For example, consider the
|
// restrictions may be arbitrarily complex. For example, consider the
|
||||||
// following:
|
// following:
|
||||||
//
|
//
|
||||||
// type A interface{ ~string|~[]byte }
|
// type A interface{ ~string|~[]byte }
|
||||||
//
|
//
|
||||||
// type B interface{ int|string }
|
// type B interface{ int|string }
|
||||||
//
|
//
|
||||||
// type C interface { ~string|~int }
|
// type C interface { ~string|~int }
|
||||||
//
|
//
|
||||||
// type T[P interface{ A|B; C }] int
|
// type T[P interface{ A|B; C }] int
|
||||||
//
|
//
|
||||||
// In this example, the structural type restriction of P is ~string|int: A|B
|
// In this example, the structural type restriction of P is ~string|int: A|B
|
||||||
// expands to ~string|~[]byte|int|string, which reduces to ~string|~[]byte|int,
|
// expands to ~string|~[]byte|int|string, which reduces to ~string|~[]byte|int,
|
||||||
|
|||||||
9
vendor/golang.org/x/tools/internal/typeparams/termlist.go
generated
vendored
9
vendor/golang.org/x/tools/internal/typeparams/termlist.go
generated
vendored
@ -97,15 +97,6 @@ func (xl termlist) norm() termlist {
|
|||||||
return rl
|
return rl
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the type set represented by xl is specified by a single (non-𝓤) term,
|
|
||||||
// structuralType returns that type. Otherwise it returns nil.
|
|
||||||
func (xl termlist) structuralType() types.Type {
|
|
||||||
if nl := xl.norm(); len(nl) == 1 {
|
|
||||||
return nl[0].typ // if nl.isAll() then typ is nil, which is ok
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// union returns the union xl ∪ yl.
|
// union returns the union xl ∪ yl.
|
||||||
func (xl termlist) union(yl termlist) termlist {
|
func (xl termlist) union(yl termlist) termlist {
|
||||||
return append(xl, yl...).norm()
|
return append(xl, yl...).norm()
|
||||||
|
|||||||
5
vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go
generated
vendored
5
vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go
generated
vendored
@ -185,6 +185,11 @@ func GetInstances(info *types.Info) map[*ast.Ident]Instance { return nil }
|
|||||||
// this Go version.
|
// this Go version.
|
||||||
type Context struct{}
|
type Context struct{}
|
||||||
|
|
||||||
|
// NewContext returns a placeholder Context instance.
|
||||||
|
func NewContext() *Context {
|
||||||
|
return &Context{}
|
||||||
|
}
|
||||||
|
|
||||||
// Instantiate is unsupported on this Go version, and panics.
|
// Instantiate is unsupported on this Go version, and panics.
|
||||||
func Instantiate(ctxt *Context, typ types.Type, targs []types.Type, validate bool) (types.Type, error) {
|
func Instantiate(ctxt *Context, typ types.Type, targs []types.Type, validate bool) (types.Type, error) {
|
||||||
unsupported()
|
unsupported()
|
||||||
|
|||||||
5
vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go
generated
vendored
5
vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go
generated
vendored
@ -140,6 +140,11 @@ func GetInstances(info *types.Info) map[*ast.Ident]Instance {
|
|||||||
// Context is an alias for types.Context.
|
// Context is an alias for types.Context.
|
||||||
type Context = types.Context
|
type Context = types.Context
|
||||||
|
|
||||||
|
// NewContext calls types.NewContext.
|
||||||
|
func NewContext() *Context {
|
||||||
|
return types.NewContext()
|
||||||
|
}
|
||||||
|
|
||||||
// Instantiate calls types.Instantiate.
|
// Instantiate calls types.Instantiate.
|
||||||
func Instantiate(ctxt *Context, typ types.Type, targs []types.Type, validate bool) (types.Type, error) {
|
func Instantiate(ctxt *Context, typ types.Type, targs []types.Type, validate bool) (types.Type, error) {
|
||||||
return types.Instantiate(ctxt, typ, targs, validate)
|
return types.Instantiate(ctxt, typ, targs, validate)
|
||||||
|
|||||||
158
vendor/golang.org/x/tools/internal/typesinternal/errorcode.go
generated
vendored
158
vendor/golang.org/x/tools/internal/typesinternal/errorcode.go
generated
vendored
@ -1365,4 +1365,162 @@ const (
|
|||||||
// return i
|
// return i
|
||||||
// }
|
// }
|
||||||
InvalidGo
|
InvalidGo
|
||||||
|
|
||||||
|
// All codes below were added in Go 1.17.
|
||||||
|
|
||||||
|
/* decl */
|
||||||
|
|
||||||
|
// BadDecl occurs when a declaration has invalid syntax.
|
||||||
|
BadDecl
|
||||||
|
|
||||||
|
// RepeatedDecl occurs when an identifier occurs more than once on the left
|
||||||
|
// hand side of a short variable declaration.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// func _() {
|
||||||
|
// x, y, y := 1, 2, 3
|
||||||
|
// }
|
||||||
|
RepeatedDecl
|
||||||
|
|
||||||
|
/* unsafe */
|
||||||
|
|
||||||
|
// InvalidUnsafeAdd occurs when unsafe.Add is called with a
|
||||||
|
// length argument that is not of integer type.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// import "unsafe"
|
||||||
|
//
|
||||||
|
// var p unsafe.Pointer
|
||||||
|
// var _ = unsafe.Add(p, float64(1))
|
||||||
|
InvalidUnsafeAdd
|
||||||
|
|
||||||
|
// InvalidUnsafeSlice occurs when unsafe.Slice is called with a
|
||||||
|
// pointer argument that is not of pointer type or a length argument
|
||||||
|
// that is not of integer type, negative, or out of bounds.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// import "unsafe"
|
||||||
|
//
|
||||||
|
// var x int
|
||||||
|
// var _ = unsafe.Slice(x, 1)
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// import "unsafe"
|
||||||
|
//
|
||||||
|
// var x int
|
||||||
|
// var _ = unsafe.Slice(&x, float64(1))
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// import "unsafe"
|
||||||
|
//
|
||||||
|
// var x int
|
||||||
|
// var _ = unsafe.Slice(&x, -1)
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// import "unsafe"
|
||||||
|
//
|
||||||
|
// var x int
|
||||||
|
// var _ = unsafe.Slice(&x, uint64(1) << 63)
|
||||||
|
InvalidUnsafeSlice
|
||||||
|
|
||||||
|
// All codes below were added in Go 1.18.
|
||||||
|
|
||||||
|
/* features */
|
||||||
|
|
||||||
|
// UnsupportedFeature occurs when a language feature is used that is not
|
||||||
|
// supported at this Go version.
|
||||||
|
UnsupportedFeature
|
||||||
|
|
||||||
|
/* type params */
|
||||||
|
|
||||||
|
// NotAGenericType occurs when a non-generic type is used where a generic
|
||||||
|
// type is expected: in type or function instantiation.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// type T int
|
||||||
|
//
|
||||||
|
// var _ T[int]
|
||||||
|
NotAGenericType
|
||||||
|
|
||||||
|
// WrongTypeArgCount occurs when a type or function is instantiated with an
|
||||||
|
// incorrent number of type arguments, including when a generic type or
|
||||||
|
// function is used without instantiation.
|
||||||
|
//
|
||||||
|
// Errors inolving failed type inference are assigned other error codes.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// type T[p any] int
|
||||||
|
//
|
||||||
|
// var _ T[int, string]
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// func f[T any]() {}
|
||||||
|
//
|
||||||
|
// var x = f
|
||||||
|
WrongTypeArgCount
|
||||||
|
|
||||||
|
// CannotInferTypeArgs occurs when type or function type argument inference
|
||||||
|
// fails to infer all type arguments.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// func f[T any]() {}
|
||||||
|
//
|
||||||
|
// func _() {
|
||||||
|
// f()
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// type N[P, Q any] struct{}
|
||||||
|
//
|
||||||
|
// var _ N[int]
|
||||||
|
CannotInferTypeArgs
|
||||||
|
|
||||||
|
// InvalidTypeArg occurs when a type argument does not satisfy its
|
||||||
|
// corresponding type parameter constraints.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// type T[P ~int] struct{}
|
||||||
|
//
|
||||||
|
// var _ T[string]
|
||||||
|
InvalidTypeArg // arguments? InferenceFailed
|
||||||
|
|
||||||
|
// InvalidInstanceCycle occurs when an invalid cycle is detected
|
||||||
|
// within the instantiation graph.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// func f[T any]() { f[*T]() }
|
||||||
|
InvalidInstanceCycle
|
||||||
|
|
||||||
|
// InvalidUnion occurs when an embedded union or approximation element is
|
||||||
|
// not valid.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// type _ interface {
|
||||||
|
// ~int | interface{ m() }
|
||||||
|
// }
|
||||||
|
InvalidUnion
|
||||||
|
|
||||||
|
// MisplacedConstraintIface occurs when a constraint-type interface is used
|
||||||
|
// outside of constraint position.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// type I interface { ~int }
|
||||||
|
//
|
||||||
|
// var _ I
|
||||||
|
MisplacedConstraintIface
|
||||||
|
|
||||||
|
// InvalidMethodTypeParams occurs when methods have type parameters.
|
||||||
|
//
|
||||||
|
// It cannot be encountered with an AST parsed using go/parser.
|
||||||
|
InvalidMethodTypeParams
|
||||||
|
|
||||||
|
// MisplacedTypeParam occurs when a type parameter is used in a place where
|
||||||
|
// it is not permitted.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// type T[P any] P
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// type T[P any] struct{ *P }
|
||||||
|
MisplacedTypeParam
|
||||||
)
|
)
|
||||||
|
|||||||
18
vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go
generated
vendored
18
vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go
generated
vendored
@ -138,11 +138,25 @@ func _() {
|
|||||||
_ = x[UnusedResults-128]
|
_ = x[UnusedResults-128]
|
||||||
_ = x[InvalidDefer-129]
|
_ = x[InvalidDefer-129]
|
||||||
_ = x[InvalidGo-130]
|
_ = x[InvalidGo-130]
|
||||||
|
_ = x[BadDecl-131]
|
||||||
|
_ = x[RepeatedDecl-132]
|
||||||
|
_ = x[InvalidUnsafeAdd-133]
|
||||||
|
_ = x[InvalidUnsafeSlice-134]
|
||||||
|
_ = x[UnsupportedFeature-135]
|
||||||
|
_ = x[NotAGenericType-136]
|
||||||
|
_ = x[WrongTypeArgCount-137]
|
||||||
|
_ = x[CannotInferTypeArgs-138]
|
||||||
|
_ = x[InvalidTypeArg-139]
|
||||||
|
_ = x[InvalidInstanceCycle-140]
|
||||||
|
_ = x[InvalidUnion-141]
|
||||||
|
_ = x[MisplacedConstraintIface-142]
|
||||||
|
_ = x[InvalidMethodTypeParams-143]
|
||||||
|
_ = x[MisplacedTypeParam-144]
|
||||||
}
|
}
|
||||||
|
|
||||||
const _ErrorCode_name = "TestBlankPkgNameMismatchedPkgNameInvalidPkgUseBadImportPathBrokenImportImportCRenamedUnusedImportInvalidInitCycleDuplicateDeclInvalidDeclCycleInvalidTypeCycleInvalidConstInitInvalidConstValInvalidConstTypeUntypedNilWrongAssignCountUnassignableOperandNoNewVarMultiValAssignOpInvalidIfaceAssignInvalidChanAssignIncompatibleAssignUnaddressableFieldAssignNotATypeInvalidArrayLenBlankIfaceMethodIncomparableMapKeyInvalidIfaceEmbedInvalidPtrEmbedBadRecvInvalidRecvDuplicateFieldAndMethodDuplicateMethodInvalidBlankInvalidIotaMissingInitBodyInvalidInitSigInvalidInitDeclInvalidMainDeclTooManyValuesNotAnExprTruncatedFloatNumericOverflowUndefinedOpMismatchedTypesDivByZeroNonNumericIncDecUnaddressableOperandInvalidIndirectionNonIndexableOperandInvalidIndexSwappedSliceIndicesNonSliceableOperandInvalidSliceExprInvalidShiftCountInvalidShiftOperandInvalidReceiveInvalidSendDuplicateLitKeyMissingLitKeyInvalidLitIndexOversizeArrayLitMixedStructLitInvalidStructLitMissingLitFieldDuplicateLitFieldUnexportedLitFieldInvalidLitFieldUntypedLitInvalidLitAmbiguousSelectorUndeclaredImportedNameUnexportedNameUndeclaredNameMissingFieldOrMethodBadDotDotDotSyntaxNonVariadicDotDotDotMisplacedDotDotDotInvalidDotDotDotOperandInvalidDotDotDotUncalledBuiltinInvalidAppendInvalidCapInvalidCloseInvalidCopyInvalidComplexInvalidDeleteInvalidImagInvalidLenSwappedMakeArgsInvalidMakeInvalidRealInvalidAssertImpossibleAssertInvalidConversionInvalidUntypedConversionBadOffsetofSyntaxInvalidOffsetofUnusedExprUnusedVarMissingReturnWrongResultCountOutOfScopeResultInvalidCondInvalidPostDeclInvalidChanRangeInvalidIterVarInvalidRangeExprMisplacedBreakMisplacedContinueMisplacedFallthroughDuplicateCaseDuplicateDefaultBadTypeKeywordInvalidTypeSwitchInvalidExprSwitchInvalidSelectCaseUndeclaredLabelDuplicateLabelMisplacedLabelUnusedLabelJumpOverDeclJumpIntoBlockInvalidMethodExprWrongArgCountInvalidCallUnusedResultsInvalidDeferInvalidGo"
|
const _ErrorCode_name = "TestBlankPkgNameMismatchedPkgNameInvalidPkgUseBadImportPathBrokenImportImportCRenamedUnusedImportInvalidInitCycleDuplicateDeclInvalidDeclCycleInvalidTypeCycleInvalidConstInitInvalidConstValInvalidConstTypeUntypedNilWrongAssignCountUnassignableOperandNoNewVarMultiValAssignOpInvalidIfaceAssignInvalidChanAssignIncompatibleAssignUnaddressableFieldAssignNotATypeInvalidArrayLenBlankIfaceMethodIncomparableMapKeyInvalidIfaceEmbedInvalidPtrEmbedBadRecvInvalidRecvDuplicateFieldAndMethodDuplicateMethodInvalidBlankInvalidIotaMissingInitBodyInvalidInitSigInvalidInitDeclInvalidMainDeclTooManyValuesNotAnExprTruncatedFloatNumericOverflowUndefinedOpMismatchedTypesDivByZeroNonNumericIncDecUnaddressableOperandInvalidIndirectionNonIndexableOperandInvalidIndexSwappedSliceIndicesNonSliceableOperandInvalidSliceExprInvalidShiftCountInvalidShiftOperandInvalidReceiveInvalidSendDuplicateLitKeyMissingLitKeyInvalidLitIndexOversizeArrayLitMixedStructLitInvalidStructLitMissingLitFieldDuplicateLitFieldUnexportedLitFieldInvalidLitFieldUntypedLitInvalidLitAmbiguousSelectorUndeclaredImportedNameUnexportedNameUndeclaredNameMissingFieldOrMethodBadDotDotDotSyntaxNonVariadicDotDotDotMisplacedDotDotDotInvalidDotDotDotOperandInvalidDotDotDotUncalledBuiltinInvalidAppendInvalidCapInvalidCloseInvalidCopyInvalidComplexInvalidDeleteInvalidImagInvalidLenSwappedMakeArgsInvalidMakeInvalidRealInvalidAssertImpossibleAssertInvalidConversionInvalidUntypedConversionBadOffsetofSyntaxInvalidOffsetofUnusedExprUnusedVarMissingReturnWrongResultCountOutOfScopeResultInvalidCondInvalidPostDeclInvalidChanRangeInvalidIterVarInvalidRangeExprMisplacedBreakMisplacedContinueMisplacedFallthroughDuplicateCaseDuplicateDefaultBadTypeKeywordInvalidTypeSwitchInvalidExprSwitchInvalidSelectCaseUndeclaredLabelDuplicateLabelMisplacedLabelUnusedLabelJumpOverDeclJumpIntoBlockInvalidMethodExprWrongArgCountInvalidCallUnusedResultsInvalidDeferInvalidGoBadDeclRepeatedDeclInvalidUnsafeAddInvalidUnsafeSliceUnsupportedFeatureNotAGenericTypeWrongTypeArgCountCannotInferTypeArgsInvalidTypeArgInvalidInstanceCycleInvalidUnionMisplacedConstraintIfaceInvalidMethodTypeParamsMisplacedTypeParam"
|
||||||
|
|
||||||
var _ErrorCode_index = [...]uint16{0, 4, 16, 33, 46, 59, 71, 85, 97, 113, 126, 142, 158, 174, 189, 205, 215, 231, 250, 258, 274, 292, 309, 327, 351, 359, 374, 390, 408, 425, 440, 447, 458, 481, 496, 508, 519, 534, 548, 563, 578, 591, 600, 614, 629, 640, 655, 664, 680, 700, 718, 737, 749, 768, 787, 803, 820, 839, 853, 864, 879, 892, 907, 923, 937, 953, 968, 985, 1003, 1018, 1028, 1038, 1055, 1077, 1091, 1105, 1125, 1143, 1163, 1181, 1204, 1220, 1235, 1248, 1258, 1270, 1281, 1295, 1308, 1319, 1329, 1344, 1355, 1366, 1379, 1395, 1412, 1436, 1453, 1468, 1478, 1487, 1500, 1516, 1532, 1543, 1558, 1574, 1588, 1604, 1618, 1635, 1655, 1668, 1684, 1698, 1715, 1732, 1749, 1764, 1778, 1792, 1803, 1815, 1828, 1845, 1858, 1869, 1882, 1894, 1903}
|
var _ErrorCode_index = [...]uint16{0, 4, 16, 33, 46, 59, 71, 85, 97, 113, 126, 142, 158, 174, 189, 205, 215, 231, 250, 258, 274, 292, 309, 327, 351, 359, 374, 390, 408, 425, 440, 447, 458, 481, 496, 508, 519, 534, 548, 563, 578, 591, 600, 614, 629, 640, 655, 664, 680, 700, 718, 737, 749, 768, 787, 803, 820, 839, 853, 864, 879, 892, 907, 923, 937, 953, 968, 985, 1003, 1018, 1028, 1038, 1055, 1077, 1091, 1105, 1125, 1143, 1163, 1181, 1204, 1220, 1235, 1248, 1258, 1270, 1281, 1295, 1308, 1319, 1329, 1344, 1355, 1366, 1379, 1395, 1412, 1436, 1453, 1468, 1478, 1487, 1500, 1516, 1532, 1543, 1558, 1574, 1588, 1604, 1618, 1635, 1655, 1668, 1684, 1698, 1715, 1732, 1749, 1764, 1778, 1792, 1803, 1815, 1828, 1845, 1858, 1869, 1882, 1894, 1903, 1910, 1922, 1938, 1956, 1974, 1989, 2006, 2025, 2039, 2059, 2071, 2095, 2118, 2136}
|
||||||
|
|
||||||
func (i ErrorCode) String() string {
|
func (i ErrorCode) String() string {
|
||||||
i -= 1
|
i -= 1
|
||||||
|
|||||||
2
vendor/golang.org/x/tools/internal/typesinternal/types.go
generated
vendored
2
vendor/golang.org/x/tools/internal/typesinternal/types.go
generated
vendored
@ -48,3 +48,5 @@ func ReadGo116ErrorData(err types.Error) (code ErrorCode, start, end token.Pos,
|
|||||||
}
|
}
|
||||||
return ErrorCode(data[0]), token.Pos(data[1]), token.Pos(data[2]), true
|
return ErrorCode(data[0]), token.Pos(data[1]), token.Pos(data[2]), true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var SetGoVersion = func(conf *types.Config, version string) bool { return false }
|
||||||
|
|||||||
19
vendor/golang.org/x/tools/internal/typesinternal/types_118.go
generated
vendored
Normal file
19
vendor/golang.org/x/tools/internal/typesinternal/types_118.go
generated
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// Copyright 2021 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build go1.18
|
||||||
|
// +build go1.18
|
||||||
|
|
||||||
|
package typesinternal
|
||||||
|
|
||||||
|
import (
|
||||||
|
"go/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
SetGoVersion = func(conf *types.Config, version string) bool {
|
||||||
|
conf.GoVersion = version
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
27
vendor/golang.org/x/xerrors/LICENSE
generated
vendored
27
vendor/golang.org/x/xerrors/LICENSE
generated
vendored
@ -1,27 +0,0 @@
|
|||||||
Copyright (c) 2019 The Go Authors. All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are
|
|
||||||
met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above
|
|
||||||
copyright notice, this list of conditions and the following disclaimer
|
|
||||||
in the documentation and/or other materials provided with the
|
|
||||||
distribution.
|
|
||||||
* Neither the name of Google Inc. nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
22
vendor/golang.org/x/xerrors/PATENTS
generated
vendored
22
vendor/golang.org/x/xerrors/PATENTS
generated
vendored
@ -1,22 +0,0 @@
|
|||||||
Additional IP Rights Grant (Patents)
|
|
||||||
|
|
||||||
"This implementation" means the copyrightable works distributed by
|
|
||||||
Google as part of the Go project.
|
|
||||||
|
|
||||||
Google hereby grants to You a perpetual, worldwide, non-exclusive,
|
|
||||||
no-charge, royalty-free, irrevocable (except as stated in this section)
|
|
||||||
patent license to make, have made, use, offer to sell, sell, import,
|
|
||||||
transfer and otherwise run, modify and propagate the contents of this
|
|
||||||
implementation of Go, where such license applies only to those patent
|
|
||||||
claims, both currently owned or controlled by Google and acquired in
|
|
||||||
the future, licensable by Google that are necessarily infringed by this
|
|
||||||
implementation of Go. This grant does not include claims that would be
|
|
||||||
infringed only as a consequence of further modification of this
|
|
||||||
implementation. If you or your agent or exclusive licensee institute or
|
|
||||||
order or agree to the institution of patent litigation against any
|
|
||||||
entity (including a cross-claim or counterclaim in a lawsuit) alleging
|
|
||||||
that this implementation of Go or any code incorporated within this
|
|
||||||
implementation of Go constitutes direct or contributory patent
|
|
||||||
infringement, or inducement of patent infringement, then any patent
|
|
||||||
rights granted to you under this License for this implementation of Go
|
|
||||||
shall terminate as of the date such litigation is filed.
|
|
||||||
2
vendor/golang.org/x/xerrors/README
generated
vendored
2
vendor/golang.org/x/xerrors/README
generated
vendored
@ -1,2 +0,0 @@
|
|||||||
This repository holds the transition packages for the new Go 1.13 error values.
|
|
||||||
See golang.org/design/29934-error-values.
|
|
||||||
193
vendor/golang.org/x/xerrors/adaptor.go
generated
vendored
193
vendor/golang.org/x/xerrors/adaptor.go
generated
vendored
@ -1,193 +0,0 @@
|
|||||||
// Copyright 2018 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package xerrors
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"reflect"
|
|
||||||
"strconv"
|
|
||||||
)
|
|
||||||
|
|
||||||
// FormatError calls the FormatError method of f with an errors.Printer
|
|
||||||
// configured according to s and verb, and writes the result to s.
|
|
||||||
func FormatError(f Formatter, s fmt.State, verb rune) {
|
|
||||||
// Assuming this function is only called from the Format method, and given
|
|
||||||
// that FormatError takes precedence over Format, it cannot be called from
|
|
||||||
// any package that supports errors.Formatter. It is therefore safe to
|
|
||||||
// disregard that State may be a specific printer implementation and use one
|
|
||||||
// of our choice instead.
|
|
||||||
|
|
||||||
// limitations: does not support printing error as Go struct.
|
|
||||||
|
|
||||||
var (
|
|
||||||
sep = " " // separator before next error
|
|
||||||
p = &state{State: s}
|
|
||||||
direct = true
|
|
||||||
)
|
|
||||||
|
|
||||||
var err error = f
|
|
||||||
|
|
||||||
switch verb {
|
|
||||||
// Note that this switch must match the preference order
|
|
||||||
// for ordinary string printing (%#v before %+v, and so on).
|
|
||||||
|
|
||||||
case 'v':
|
|
||||||
if s.Flag('#') {
|
|
||||||
if stringer, ok := err.(fmt.GoStringer); ok {
|
|
||||||
io.WriteString(&p.buf, stringer.GoString())
|
|
||||||
goto exit
|
|
||||||
}
|
|
||||||
// proceed as if it were %v
|
|
||||||
} else if s.Flag('+') {
|
|
||||||
p.printDetail = true
|
|
||||||
sep = "\n - "
|
|
||||||
}
|
|
||||||
case 's':
|
|
||||||
case 'q', 'x', 'X':
|
|
||||||
// Use an intermediate buffer in the rare cases that precision,
|
|
||||||
// truncation, or one of the alternative verbs (q, x, and X) are
|
|
||||||
// specified.
|
|
||||||
direct = false
|
|
||||||
|
|
||||||
default:
|
|
||||||
p.buf.WriteString("%!")
|
|
||||||
p.buf.WriteRune(verb)
|
|
||||||
p.buf.WriteByte('(')
|
|
||||||
switch {
|
|
||||||
case err != nil:
|
|
||||||
p.buf.WriteString(reflect.TypeOf(f).String())
|
|
||||||
default:
|
|
||||||
p.buf.WriteString("<nil>")
|
|
||||||
}
|
|
||||||
p.buf.WriteByte(')')
|
|
||||||
io.Copy(s, &p.buf)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
loop:
|
|
||||||
for {
|
|
||||||
switch v := err.(type) {
|
|
||||||
case Formatter:
|
|
||||||
err = v.FormatError((*printer)(p))
|
|
||||||
case fmt.Formatter:
|
|
||||||
v.Format(p, 'v')
|
|
||||||
break loop
|
|
||||||
default:
|
|
||||||
io.WriteString(&p.buf, v.Error())
|
|
||||||
break loop
|
|
||||||
}
|
|
||||||
if err == nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if p.needColon || !p.printDetail {
|
|
||||||
p.buf.WriteByte(':')
|
|
||||||
p.needColon = false
|
|
||||||
}
|
|
||||||
p.buf.WriteString(sep)
|
|
||||||
p.inDetail = false
|
|
||||||
p.needNewline = false
|
|
||||||
}
|
|
||||||
|
|
||||||
exit:
|
|
||||||
width, okW := s.Width()
|
|
||||||
prec, okP := s.Precision()
|
|
||||||
|
|
||||||
if !direct || (okW && width > 0) || okP {
|
|
||||||
// Construct format string from State s.
|
|
||||||
format := []byte{'%'}
|
|
||||||
if s.Flag('-') {
|
|
||||||
format = append(format, '-')
|
|
||||||
}
|
|
||||||
if s.Flag('+') {
|
|
||||||
format = append(format, '+')
|
|
||||||
}
|
|
||||||
if s.Flag(' ') {
|
|
||||||
format = append(format, ' ')
|
|
||||||
}
|
|
||||||
if okW {
|
|
||||||
format = strconv.AppendInt(format, int64(width), 10)
|
|
||||||
}
|
|
||||||
if okP {
|
|
||||||
format = append(format, '.')
|
|
||||||
format = strconv.AppendInt(format, int64(prec), 10)
|
|
||||||
}
|
|
||||||
format = append(format, string(verb)...)
|
|
||||||
fmt.Fprintf(s, string(format), p.buf.String())
|
|
||||||
} else {
|
|
||||||
io.Copy(s, &p.buf)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var detailSep = []byte("\n ")
|
|
||||||
|
|
||||||
// state tracks error printing state. It implements fmt.State.
|
|
||||||
type state struct {
|
|
||||||
fmt.State
|
|
||||||
buf bytes.Buffer
|
|
||||||
|
|
||||||
printDetail bool
|
|
||||||
inDetail bool
|
|
||||||
needColon bool
|
|
||||||
needNewline bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *state) Write(b []byte) (n int, err error) {
|
|
||||||
if s.printDetail {
|
|
||||||
if len(b) == 0 {
|
|
||||||
return 0, nil
|
|
||||||
}
|
|
||||||
if s.inDetail && s.needColon {
|
|
||||||
s.needNewline = true
|
|
||||||
if b[0] == '\n' {
|
|
||||||
b = b[1:]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
k := 0
|
|
||||||
for i, c := range b {
|
|
||||||
if s.needNewline {
|
|
||||||
if s.inDetail && s.needColon {
|
|
||||||
s.buf.WriteByte(':')
|
|
||||||
s.needColon = false
|
|
||||||
}
|
|
||||||
s.buf.Write(detailSep)
|
|
||||||
s.needNewline = false
|
|
||||||
}
|
|
||||||
if c == '\n' {
|
|
||||||
s.buf.Write(b[k:i])
|
|
||||||
k = i + 1
|
|
||||||
s.needNewline = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
s.buf.Write(b[k:])
|
|
||||||
if !s.inDetail {
|
|
||||||
s.needColon = true
|
|
||||||
}
|
|
||||||
} else if !s.inDetail {
|
|
||||||
s.buf.Write(b)
|
|
||||||
}
|
|
||||||
return len(b), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// printer wraps a state to implement an xerrors.Printer.
|
|
||||||
type printer state
|
|
||||||
|
|
||||||
func (s *printer) Print(args ...interface{}) {
|
|
||||||
if !s.inDetail || s.printDetail {
|
|
||||||
fmt.Fprint((*state)(s), args...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *printer) Printf(format string, args ...interface{}) {
|
|
||||||
if !s.inDetail || s.printDetail {
|
|
||||||
fmt.Fprintf((*state)(s), format, args...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *printer) Detail() bool {
|
|
||||||
s.inDetail = true
|
|
||||||
return s.printDetail
|
|
||||||
}
|
|
||||||
1
vendor/golang.org/x/xerrors/codereview.cfg
generated
vendored
1
vendor/golang.org/x/xerrors/codereview.cfg
generated
vendored
@ -1 +0,0 @@
|
|||||||
issuerepo: golang/go
|
|
||||||
22
vendor/golang.org/x/xerrors/doc.go
generated
vendored
22
vendor/golang.org/x/xerrors/doc.go
generated
vendored
@ -1,22 +0,0 @@
|
|||||||
// Copyright 2019 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Package xerrors implements functions to manipulate errors.
|
|
||||||
//
|
|
||||||
// This package is based on the Go 2 proposal for error values:
|
|
||||||
// https://golang.org/design/29934-error-values
|
|
||||||
//
|
|
||||||
// These functions were incorporated into the standard library's errors package
|
|
||||||
// in Go 1.13:
|
|
||||||
// - Is
|
|
||||||
// - As
|
|
||||||
// - Unwrap
|
|
||||||
//
|
|
||||||
// Also, Errorf's %w verb was incorporated into fmt.Errorf.
|
|
||||||
//
|
|
||||||
// Use this package to get equivalent behavior in all supported Go versions.
|
|
||||||
//
|
|
||||||
// No other features of this package were included in Go 1.13, and at present
|
|
||||||
// there are no plans to include any of them.
|
|
||||||
package xerrors // import "golang.org/x/xerrors"
|
|
||||||
33
vendor/golang.org/x/xerrors/errors.go
generated
vendored
33
vendor/golang.org/x/xerrors/errors.go
generated
vendored
@ -1,33 +0,0 @@
|
|||||||
// Copyright 2011 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package xerrors
|
|
||||||
|
|
||||||
import "fmt"
|
|
||||||
|
|
||||||
// errorString is a trivial implementation of error.
|
|
||||||
type errorString struct {
|
|
||||||
s string
|
|
||||||
frame Frame
|
|
||||||
}
|
|
||||||
|
|
||||||
// New returns an error that formats as the given text.
|
|
||||||
//
|
|
||||||
// The returned error contains a Frame set to the caller's location and
|
|
||||||
// implements Formatter to show this information when printed with details.
|
|
||||||
func New(text string) error {
|
|
||||||
return &errorString{text, Caller(1)}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *errorString) Error() string {
|
|
||||||
return e.s
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *errorString) Format(s fmt.State, v rune) { FormatError(e, s, v) }
|
|
||||||
|
|
||||||
func (e *errorString) FormatError(p Printer) (next error) {
|
|
||||||
p.Print(e.s)
|
|
||||||
e.frame.Format(p)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
187
vendor/golang.org/x/xerrors/fmt.go
generated
vendored
187
vendor/golang.org/x/xerrors/fmt.go
generated
vendored
@ -1,187 +0,0 @@
|
|||||||
// Copyright 2018 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package xerrors
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"strings"
|
|
||||||
"unicode"
|
|
||||||
"unicode/utf8"
|
|
||||||
|
|
||||||
"golang.org/x/xerrors/internal"
|
|
||||||
)
|
|
||||||
|
|
||||||
const percentBangString = "%!"
|
|
||||||
|
|
||||||
// Errorf formats according to a format specifier and returns the string as a
|
|
||||||
// value that satisfies error.
|
|
||||||
//
|
|
||||||
// The returned error includes the file and line number of the caller when
|
|
||||||
// formatted with additional detail enabled. If the last argument is an error
|
|
||||||
// the returned error's Format method will return it if the format string ends
|
|
||||||
// with ": %s", ": %v", or ": %w". If the last argument is an error and the
|
|
||||||
// format string ends with ": %w", the returned error implements an Unwrap
|
|
||||||
// method returning it.
|
|
||||||
//
|
|
||||||
// If the format specifier includes a %w verb with an error operand in a
|
|
||||||
// position other than at the end, the returned error will still implement an
|
|
||||||
// Unwrap method returning the operand, but the error's Format method will not
|
|
||||||
// return the wrapped error.
|
|
||||||
//
|
|
||||||
// It is invalid to include more than one %w verb or to supply it with an
|
|
||||||
// operand that does not implement the error interface. The %w verb is otherwise
|
|
||||||
// a synonym for %v.
|
|
||||||
func Errorf(format string, a ...interface{}) error {
|
|
||||||
format = formatPlusW(format)
|
|
||||||
// Support a ": %[wsv]" suffix, which works well with xerrors.Formatter.
|
|
||||||
wrap := strings.HasSuffix(format, ": %w")
|
|
||||||
idx, format2, ok := parsePercentW(format)
|
|
||||||
percentWElsewhere := !wrap && idx >= 0
|
|
||||||
if !percentWElsewhere && (wrap || strings.HasSuffix(format, ": %s") || strings.HasSuffix(format, ": %v")) {
|
|
||||||
err := errorAt(a, len(a)-1)
|
|
||||||
if err == nil {
|
|
||||||
return &noWrapError{fmt.Sprintf(format, a...), nil, Caller(1)}
|
|
||||||
}
|
|
||||||
// TODO: this is not entirely correct. The error value could be
|
|
||||||
// printed elsewhere in format if it mixes numbered with unnumbered
|
|
||||||
// substitutions. With relatively small changes to doPrintf we can
|
|
||||||
// have it optionally ignore extra arguments and pass the argument
|
|
||||||
// list in its entirety.
|
|
||||||
msg := fmt.Sprintf(format[:len(format)-len(": %s")], a[:len(a)-1]...)
|
|
||||||
frame := Frame{}
|
|
||||||
if internal.EnableTrace {
|
|
||||||
frame = Caller(1)
|
|
||||||
}
|
|
||||||
if wrap {
|
|
||||||
return &wrapError{msg, err, frame}
|
|
||||||
}
|
|
||||||
return &noWrapError{msg, err, frame}
|
|
||||||
}
|
|
||||||
// Support %w anywhere.
|
|
||||||
// TODO: don't repeat the wrapped error's message when %w occurs in the middle.
|
|
||||||
msg := fmt.Sprintf(format2, a...)
|
|
||||||
if idx < 0 {
|
|
||||||
return &noWrapError{msg, nil, Caller(1)}
|
|
||||||
}
|
|
||||||
err := errorAt(a, idx)
|
|
||||||
if !ok || err == nil {
|
|
||||||
// Too many %ws or argument of %w is not an error. Approximate the Go
|
|
||||||
// 1.13 fmt.Errorf message.
|
|
||||||
return &noWrapError{fmt.Sprintf("%sw(%s)", percentBangString, msg), nil, Caller(1)}
|
|
||||||
}
|
|
||||||
frame := Frame{}
|
|
||||||
if internal.EnableTrace {
|
|
||||||
frame = Caller(1)
|
|
||||||
}
|
|
||||||
return &wrapError{msg, err, frame}
|
|
||||||
}
|
|
||||||
|
|
||||||
func errorAt(args []interface{}, i int) error {
|
|
||||||
if i < 0 || i >= len(args) {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
err, ok := args[i].(error)
|
|
||||||
if !ok {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// formatPlusW is used to avoid the vet check that will barf at %w.
|
|
||||||
func formatPlusW(s string) string {
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return the index of the only %w in format, or -1 if none.
|
|
||||||
// Also return a rewritten format string with %w replaced by %v, and
|
|
||||||
// false if there is more than one %w.
|
|
||||||
// TODO: handle "%[N]w".
|
|
||||||
func parsePercentW(format string) (idx int, newFormat string, ok bool) {
|
|
||||||
// Loosely copied from golang.org/x/tools/go/analysis/passes/printf/printf.go.
|
|
||||||
idx = -1
|
|
||||||
ok = true
|
|
||||||
n := 0
|
|
||||||
sz := 0
|
|
||||||
var isW bool
|
|
||||||
for i := 0; i < len(format); i += sz {
|
|
||||||
if format[i] != '%' {
|
|
||||||
sz = 1
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
// "%%" is not a format directive.
|
|
||||||
if i+1 < len(format) && format[i+1] == '%' {
|
|
||||||
sz = 2
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
sz, isW = parsePrintfVerb(format[i:])
|
|
||||||
if isW {
|
|
||||||
if idx >= 0 {
|
|
||||||
ok = false
|
|
||||||
} else {
|
|
||||||
idx = n
|
|
||||||
}
|
|
||||||
// "Replace" the last character, the 'w', with a 'v'.
|
|
||||||
p := i + sz - 1
|
|
||||||
format = format[:p] + "v" + format[p+1:]
|
|
||||||
}
|
|
||||||
n++
|
|
||||||
}
|
|
||||||
return idx, format, ok
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parse the printf verb starting with a % at s[0].
|
|
||||||
// Return how many bytes it occupies and whether the verb is 'w'.
|
|
||||||
func parsePrintfVerb(s string) (int, bool) {
|
|
||||||
// Assume only that the directive is a sequence of non-letters followed by a single letter.
|
|
||||||
sz := 0
|
|
||||||
var r rune
|
|
||||||
for i := 1; i < len(s); i += sz {
|
|
||||||
r, sz = utf8.DecodeRuneInString(s[i:])
|
|
||||||
if unicode.IsLetter(r) {
|
|
||||||
return i + sz, r == 'w'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return len(s), false
|
|
||||||
}
|
|
||||||
|
|
||||||
type noWrapError struct {
|
|
||||||
msg string
|
|
||||||
err error
|
|
||||||
frame Frame
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *noWrapError) Error() string {
|
|
||||||
return fmt.Sprint(e)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *noWrapError) Format(s fmt.State, v rune) { FormatError(e, s, v) }
|
|
||||||
|
|
||||||
func (e *noWrapError) FormatError(p Printer) (next error) {
|
|
||||||
p.Print(e.msg)
|
|
||||||
e.frame.Format(p)
|
|
||||||
return e.err
|
|
||||||
}
|
|
||||||
|
|
||||||
type wrapError struct {
|
|
||||||
msg string
|
|
||||||
err error
|
|
||||||
frame Frame
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *wrapError) Error() string {
|
|
||||||
return fmt.Sprint(e)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *wrapError) Format(s fmt.State, v rune) { FormatError(e, s, v) }
|
|
||||||
|
|
||||||
func (e *wrapError) FormatError(p Printer) (next error) {
|
|
||||||
p.Print(e.msg)
|
|
||||||
e.frame.Format(p)
|
|
||||||
return e.err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *wrapError) Unwrap() error {
|
|
||||||
return e.err
|
|
||||||
}
|
|
||||||
34
vendor/golang.org/x/xerrors/format.go
generated
vendored
34
vendor/golang.org/x/xerrors/format.go
generated
vendored
@ -1,34 +0,0 @@
|
|||||||
// Copyright 2018 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package xerrors
|
|
||||||
|
|
||||||
// A Formatter formats error messages.
|
|
||||||
type Formatter interface {
|
|
||||||
error
|
|
||||||
|
|
||||||
// FormatError prints the receiver's first error and returns the next error in
|
|
||||||
// the error chain, if any.
|
|
||||||
FormatError(p Printer) (next error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// A Printer formats error messages.
|
|
||||||
//
|
|
||||||
// The most common implementation of Printer is the one provided by package fmt
|
|
||||||
// during Printf (as of Go 1.13). Localization packages such as golang.org/x/text/message
|
|
||||||
// typically provide their own implementations.
|
|
||||||
type Printer interface {
|
|
||||||
// Print appends args to the message output.
|
|
||||||
Print(args ...interface{})
|
|
||||||
|
|
||||||
// Printf writes a formatted string.
|
|
||||||
Printf(format string, args ...interface{})
|
|
||||||
|
|
||||||
// Detail reports whether error detail is requested.
|
|
||||||
// After the first call to Detail, all text written to the Printer
|
|
||||||
// is formatted as additional detail, or ignored when
|
|
||||||
// detail has not been requested.
|
|
||||||
// If Detail returns false, the caller can avoid printing the detail at all.
|
|
||||||
Detail() bool
|
|
||||||
}
|
|
||||||
56
vendor/golang.org/x/xerrors/frame.go
generated
vendored
56
vendor/golang.org/x/xerrors/frame.go
generated
vendored
@ -1,56 +0,0 @@
|
|||||||
// Copyright 2018 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package xerrors
|
|
||||||
|
|
||||||
import (
|
|
||||||
"runtime"
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Frame contains part of a call stack.
|
|
||||||
type Frame struct {
|
|
||||||
// Make room for three PCs: the one we were asked for, what it called,
|
|
||||||
// and possibly a PC for skipPleaseUseCallersFrames. See:
|
|
||||||
// https://go.googlesource.com/go/+/032678e0fb/src/runtime/extern.go#169
|
|
||||||
frames [3]uintptr
|
|
||||||
}
|
|
||||||
|
|
||||||
// Caller returns a Frame that describes a frame on the caller's stack.
|
|
||||||
// The argument skip is the number of frames to skip over.
|
|
||||||
// Caller(0) returns the frame for the caller of Caller.
|
|
||||||
func Caller(skip int) Frame {
|
|
||||||
var s Frame
|
|
||||||
runtime.Callers(skip+1, s.frames[:])
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
|
|
||||||
// location reports the file, line, and function of a frame.
|
|
||||||
//
|
|
||||||
// The returned function may be "" even if file and line are not.
|
|
||||||
func (f Frame) location() (function, file string, line int) {
|
|
||||||
frames := runtime.CallersFrames(f.frames[:])
|
|
||||||
if _, ok := frames.Next(); !ok {
|
|
||||||
return "", "", 0
|
|
||||||
}
|
|
||||||
fr, ok := frames.Next()
|
|
||||||
if !ok {
|
|
||||||
return "", "", 0
|
|
||||||
}
|
|
||||||
return fr.Function, fr.File, fr.Line
|
|
||||||
}
|
|
||||||
|
|
||||||
// Format prints the stack as error detail.
|
|
||||||
// It should be called from an error's Format implementation
|
|
||||||
// after printing any other error detail.
|
|
||||||
func (f Frame) Format(p Printer) {
|
|
||||||
if p.Detail() {
|
|
||||||
function, file, line := f.location()
|
|
||||||
if function != "" {
|
|
||||||
p.Printf("%s\n ", function)
|
|
||||||
}
|
|
||||||
if file != "" {
|
|
||||||
p.Printf("%s:%d\n", file, line)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
3
vendor/golang.org/x/xerrors/go.mod
generated
vendored
3
vendor/golang.org/x/xerrors/go.mod
generated
vendored
@ -1,3 +0,0 @@
|
|||||||
module golang.org/x/xerrors
|
|
||||||
|
|
||||||
go 1.11
|
|
||||||
8
vendor/golang.org/x/xerrors/internal/internal.go
generated
vendored
8
vendor/golang.org/x/xerrors/internal/internal.go
generated
vendored
@ -1,8 +0,0 @@
|
|||||||
// Copyright 2018 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package internal
|
|
||||||
|
|
||||||
// EnableTrace indicates whether stack information should be recorded in errors.
|
|
||||||
var EnableTrace = true
|
|
||||||
106
vendor/golang.org/x/xerrors/wrap.go
generated
vendored
106
vendor/golang.org/x/xerrors/wrap.go
generated
vendored
@ -1,106 +0,0 @@
|
|||||||
// Copyright 2018 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package xerrors
|
|
||||||
|
|
||||||
import (
|
|
||||||
"reflect"
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Wrapper provides context around another error.
|
|
||||||
type Wrapper interface {
|
|
||||||
// Unwrap returns the next error in the error chain.
|
|
||||||
// If there is no next error, Unwrap returns nil.
|
|
||||||
Unwrap() error
|
|
||||||
}
|
|
||||||
|
|
||||||
// Opaque returns an error with the same error formatting as err
|
|
||||||
// but that does not match err and cannot be unwrapped.
|
|
||||||
func Opaque(err error) error {
|
|
||||||
return noWrapper{err}
|
|
||||||
}
|
|
||||||
|
|
||||||
type noWrapper struct {
|
|
||||||
error
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e noWrapper) FormatError(p Printer) (next error) {
|
|
||||||
if f, ok := e.error.(Formatter); ok {
|
|
||||||
return f.FormatError(p)
|
|
||||||
}
|
|
||||||
p.Print(e.error)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unwrap returns the result of calling the Unwrap method on err, if err implements
|
|
||||||
// Unwrap. Otherwise, Unwrap returns nil.
|
|
||||||
func Unwrap(err error) error {
|
|
||||||
u, ok := err.(Wrapper)
|
|
||||||
if !ok {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return u.Unwrap()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Is reports whether any error in err's chain matches target.
|
|
||||||
//
|
|
||||||
// An error is considered to match a target if it is equal to that target or if
|
|
||||||
// it implements a method Is(error) bool such that Is(target) returns true.
|
|
||||||
func Is(err, target error) bool {
|
|
||||||
if target == nil {
|
|
||||||
return err == target
|
|
||||||
}
|
|
||||||
|
|
||||||
isComparable := reflect.TypeOf(target).Comparable()
|
|
||||||
for {
|
|
||||||
if isComparable && err == target {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if x, ok := err.(interface{ Is(error) bool }); ok && x.Is(target) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
// TODO: consider supporing target.Is(err). This would allow
|
|
||||||
// user-definable predicates, but also may allow for coping with sloppy
|
|
||||||
// APIs, thereby making it easier to get away with them.
|
|
||||||
if err = Unwrap(err); err == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// As finds the first error in err's chain that matches the type to which target
|
|
||||||
// points, and if so, sets the target to its value and returns true. An error
|
|
||||||
// matches a type if it is assignable to the target type, or if it has a method
|
|
||||||
// As(interface{}) bool such that As(target) returns true. As will panic if target
|
|
||||||
// is not a non-nil pointer to a type which implements error or is of interface type.
|
|
||||||
//
|
|
||||||
// The As method should set the target to its value and return true if err
|
|
||||||
// matches the type to which target points.
|
|
||||||
func As(err error, target interface{}) bool {
|
|
||||||
if target == nil {
|
|
||||||
panic("errors: target cannot be nil")
|
|
||||||
}
|
|
||||||
val := reflect.ValueOf(target)
|
|
||||||
typ := val.Type()
|
|
||||||
if typ.Kind() != reflect.Ptr || val.IsNil() {
|
|
||||||
panic("errors: target must be a non-nil pointer")
|
|
||||||
}
|
|
||||||
if e := typ.Elem(); e.Kind() != reflect.Interface && !e.Implements(errorType) {
|
|
||||||
panic("errors: *target must be interface or implement error")
|
|
||||||
}
|
|
||||||
targetType := typ.Elem()
|
|
||||||
for err != nil {
|
|
||||||
if reflect.TypeOf(err).AssignableTo(targetType) {
|
|
||||||
val.Elem().Set(reflect.ValueOf(err))
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if x, ok := err.(interface{ As(interface{}) bool }); ok && x.As(target) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
err = Unwrap(err)
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
var errorType = reflect.TypeOf((*error)(nil)).Elem()
|
|
||||||
7
vendor/modules.txt
vendored
7
vendor/modules.txt
vendored
@ -68,7 +68,7 @@ go.starlark.net/syntax
|
|||||||
## explicit
|
## explicit
|
||||||
golang.org/x/arch/arm64/arm64asm
|
golang.org/x/arch/arm64/arm64asm
|
||||||
golang.org/x/arch/x86/x86asm
|
golang.org/x/arch/x86/x86asm
|
||||||
# golang.org/x/mod v0.5.1
|
# golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4
|
||||||
golang.org/x/mod/semver
|
golang.org/x/mod/semver
|
||||||
# golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1
|
# golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1
|
||||||
## explicit
|
## explicit
|
||||||
@ -76,7 +76,7 @@ golang.org/x/sys/execabs
|
|||||||
golang.org/x/sys/internal/unsafeheader
|
golang.org/x/sys/internal/unsafeheader
|
||||||
golang.org/x/sys/unix
|
golang.org/x/sys/unix
|
||||||
golang.org/x/sys/windows
|
golang.org/x/sys/windows
|
||||||
# golang.org/x/tools v0.1.9
|
# golang.org/x/tools v0.1.11
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/tools/go/gcexportdata
|
golang.org/x/tools/go/gcexportdata
|
||||||
golang.org/x/tools/go/internal/gcimporter
|
golang.org/x/tools/go/internal/gcimporter
|
||||||
@ -91,8 +91,7 @@ golang.org/x/tools/internal/packagesinternal
|
|||||||
golang.org/x/tools/internal/typeparams
|
golang.org/x/tools/internal/typeparams
|
||||||
golang.org/x/tools/internal/typesinternal
|
golang.org/x/tools/internal/typesinternal
|
||||||
# golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1
|
# golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1
|
||||||
golang.org/x/xerrors
|
## explicit
|
||||||
golang.org/x/xerrors/internal
|
|
||||||
# gopkg.in/yaml.v2 v2.4.0
|
# gopkg.in/yaml.v2 v2.4.0
|
||||||
## explicit
|
## explicit
|
||||||
gopkg.in/yaml.v2
|
gopkg.in/yaml.v2
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user