mirror of https://github.com/containers/podman.git
fix(deps): update module golang.org/x/tools to v0.23.0
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This commit is contained in:
parent
c5841b0003
commit
1d9ac9a203
|
@ -7,7 +7,7 @@ require (
|
||||||
github.com/go-swagger/go-swagger v0.30.5
|
github.com/go-swagger/go-swagger v0.30.5
|
||||||
github.com/onsi/ginkgo/v2 v2.19.0
|
github.com/onsi/ginkgo/v2 v2.19.0
|
||||||
github.com/vbatts/git-validation v1.2.1
|
github.com/vbatts/git-validation v1.2.1
|
||||||
golang.org/x/tools v0.22.0
|
golang.org/x/tools v0.23.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
@ -65,9 +65,9 @@ require (
|
||||||
github.com/toqueteos/webbrowser v1.2.0 // indirect
|
github.com/toqueteos/webbrowser v1.2.0 // indirect
|
||||||
go.mongodb.org/mongo-driver v1.11.3 // indirect
|
go.mongodb.org/mongo-driver v1.11.3 // indirect
|
||||||
golang.org/x/crypto v0.17.0 // indirect
|
golang.org/x/crypto v0.17.0 // indirect
|
||||||
golang.org/x/mod v0.18.0 // indirect
|
golang.org/x/mod v0.19.0 // indirect
|
||||||
golang.org/x/sync v0.7.0 // indirect
|
golang.org/x/sync v0.7.0 // indirect
|
||||||
golang.org/x/sys v0.21.0 // indirect
|
golang.org/x/sys v0.22.0 // indirect
|
||||||
golang.org/x/text v0.15.0 // indirect
|
golang.org/x/text v0.15.0 // indirect
|
||||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
|
|
|
@ -416,8 +416,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0=
|
golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8=
|
||||||
golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||||
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-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
@ -453,7 +453,7 @@ golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1
|
||||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
|
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
|
||||||
golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ=
|
golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys=
|
||||||
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=
|
||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
|
@ -527,8 +527,8 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||||
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
|
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
|
||||||
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
|
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
|
||||||
|
@ -599,8 +599,8 @@ golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4f
|
||||||
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA=
|
golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg=
|
||||||
golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c=
|
golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI=
|
||||||
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-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=
|
||||||
|
|
|
@ -506,7 +506,6 @@ var badWindowsNames = []string{
|
||||||
"PRN",
|
"PRN",
|
||||||
"AUX",
|
"AUX",
|
||||||
"NUL",
|
"NUL",
|
||||||
"COM0",
|
|
||||||
"COM1",
|
"COM1",
|
||||||
"COM2",
|
"COM2",
|
||||||
"COM3",
|
"COM3",
|
||||||
|
@ -516,7 +515,6 @@ var badWindowsNames = []string{
|
||||||
"COM7",
|
"COM7",
|
||||||
"COM8",
|
"COM8",
|
||||||
"COM9",
|
"COM9",
|
||||||
"LPT0",
|
|
||||||
"LPT1",
|
"LPT1",
|
||||||
"LPT2",
|
"LPT2",
|
||||||
"LPT3",
|
"LPT3",
|
||||||
|
|
|
@ -50,3 +50,8 @@ func (m *mremapMmapper) Mremap(oldData []byte, newLength int, flags int) (data [
|
||||||
func Mremap(oldData []byte, newLength int, flags int) (data []byte, err error) {
|
func Mremap(oldData []byte, newLength int, flags int) (data []byte, err error) {
|
||||||
return mapper.Mremap(oldData, newLength, flags)
|
return mapper.Mremap(oldData, newLength, flags)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MremapPtr(oldAddr unsafe.Pointer, oldSize uintptr, newAddr unsafe.Pointer, newSize uintptr, flags int) (ret unsafe.Pointer, err error) {
|
||||||
|
xaddr, err := mapper.mremap(uintptr(oldAddr), oldSize, newSize, flags, uintptr(newAddr))
|
||||||
|
return unsafe.Pointer(xaddr), err
|
||||||
|
}
|
||||||
|
|
|
@ -542,6 +542,18 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//sys pthread_chdir_np(path string) (err error)
|
||||||
|
|
||||||
|
func PthreadChdir(path string) (err error) {
|
||||||
|
return pthread_chdir_np(path)
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys pthread_fchdir_np(fd int) (err error)
|
||||||
|
|
||||||
|
func PthreadFchdir(fd int) (err error) {
|
||||||
|
return pthread_fchdir_np(fd)
|
||||||
|
}
|
||||||
|
|
||||||
//sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error)
|
//sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error)
|
||||||
|
|
||||||
//sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error)
|
//sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error)
|
||||||
|
|
|
@ -154,6 +154,15 @@ func Munmap(b []byte) (err error) {
|
||||||
return mapper.Munmap(b)
|
return mapper.Munmap(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MmapPtr(fd int, offset int64, addr unsafe.Pointer, length uintptr, prot int, flags int) (ret unsafe.Pointer, err error) {
|
||||||
|
xaddr, err := mapper.mmap(uintptr(addr), length, prot, flags, fd, offset)
|
||||||
|
return unsafe.Pointer(xaddr), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func MunmapPtr(addr unsafe.Pointer, length uintptr) (err error) {
|
||||||
|
return mapper.munmap(uintptr(addr), length)
|
||||||
|
}
|
||||||
|
|
||||||
func Read(fd int, p []byte) (n int, err error) {
|
func Read(fd int, p []byte) (n int, err error) {
|
||||||
n, err = read(fd, p)
|
n, err = read(fd, p)
|
||||||
if raceenabled {
|
if raceenabled {
|
||||||
|
|
|
@ -760,6 +760,39 @@ var libc_sysctl_trampoline_addr uintptr
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func pthread_chdir_np(path string) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, _, e1 := syscall_syscall(libc_pthread_chdir_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_pthread_chdir_np_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_pthread_chdir_np pthread_chdir_np "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func pthread_fchdir_np(fd int) (err error) {
|
||||||
|
_, _, e1 := syscall_syscall(libc_pthread_fchdir_np_trampoline_addr, uintptr(fd), 0, 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_pthread_fchdir_np_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_pthread_fchdir_np pthread_fchdir_np "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
|
func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
|
||||||
_, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))
|
_, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
|
|
|
@ -228,6 +228,16 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
|
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_pthread_chdir_np_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_pthread_chdir_np(SB)
|
||||||
|
GLOBL ·libc_pthread_chdir_np_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_pthread_chdir_np_trampoline_addr(SB)/8, $libc_pthread_chdir_np_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_pthread_fchdir_np_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_pthread_fchdir_np(SB)
|
||||||
|
GLOBL ·libc_pthread_fchdir_np_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_pthread_fchdir_np_trampoline_addr(SB)/8, $libc_pthread_fchdir_np_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_sendfile(SB)
|
JMP libc_sendfile(SB)
|
||||||
GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8
|
||||||
|
|
|
@ -760,6 +760,39 @@ var libc_sysctl_trampoline_addr uintptr
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func pthread_chdir_np(path string) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, _, e1 := syscall_syscall(libc_pthread_chdir_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_pthread_chdir_np_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_pthread_chdir_np pthread_chdir_np "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func pthread_fchdir_np(fd int) (err error) {
|
||||||
|
_, _, e1 := syscall_syscall(libc_pthread_fchdir_np_trampoline_addr, uintptr(fd), 0, 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_pthread_fchdir_np_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_pthread_fchdir_np pthread_fchdir_np "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
|
func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
|
||||||
_, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))
|
_, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
|
|
|
@ -228,6 +228,16 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
|
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_pthread_chdir_np_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_pthread_chdir_np(SB)
|
||||||
|
GLOBL ·libc_pthread_chdir_np_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_pthread_chdir_np_trampoline_addr(SB)/8, $libc_pthread_chdir_np_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_pthread_fchdir_np_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_pthread_fchdir_np(SB)
|
||||||
|
GLOBL ·libc_pthread_fchdir_np_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_pthread_fchdir_np_trampoline_addr(SB)/8, $libc_pthread_fchdir_np_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_sendfile(SB)
|
JMP libc_sendfile(SB)
|
||||||
GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8
|
||||||
|
|
|
@ -894,7 +894,7 @@ type ACL struct {
|
||||||
aclRevision byte
|
aclRevision byte
|
||||||
sbz1 byte
|
sbz1 byte
|
||||||
aclSize uint16
|
aclSize uint16
|
||||||
aceCount uint16
|
AceCount uint16
|
||||||
sbz2 uint16
|
sbz2 uint16
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1087,6 +1087,27 @@ type EXPLICIT_ACCESS struct {
|
||||||
Trustee TRUSTEE
|
Trustee TRUSTEE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-ace_header
|
||||||
|
type ACE_HEADER struct {
|
||||||
|
AceType uint8
|
||||||
|
AceFlags uint8
|
||||||
|
AceSize uint16
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-access_allowed_ace
|
||||||
|
type ACCESS_ALLOWED_ACE struct {
|
||||||
|
Header ACE_HEADER
|
||||||
|
Mask ACCESS_MASK
|
||||||
|
SidStart uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Constants for AceType
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-ace_header
|
||||||
|
ACCESS_ALLOWED_ACE_TYPE = 0
|
||||||
|
ACCESS_DENIED_ACE_TYPE = 1
|
||||||
|
)
|
||||||
|
|
||||||
// This type is the union inside of TRUSTEE and must be created using one of the TrusteeValueFrom* functions.
|
// This type is the union inside of TRUSTEE and must be created using one of the TrusteeValueFrom* functions.
|
||||||
type TrusteeValue uintptr
|
type TrusteeValue uintptr
|
||||||
|
|
||||||
|
@ -1158,6 +1179,7 @@ type OBJECTS_AND_NAME struct {
|
||||||
//sys makeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURITY_DESCRIPTOR, selfRelativeSDSize *uint32) (err error) = advapi32.MakeSelfRelativeSD
|
//sys makeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURITY_DESCRIPTOR, selfRelativeSDSize *uint32) (err error) = advapi32.MakeSelfRelativeSD
|
||||||
|
|
||||||
//sys setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCESS, oldACL *ACL, newACL **ACL) (ret error) = advapi32.SetEntriesInAclW
|
//sys setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCESS, oldACL *ACL, newACL **ACL) (ret error) = advapi32.SetEntriesInAclW
|
||||||
|
//sys GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (ret error) = advapi32.GetAce
|
||||||
|
|
||||||
// Control returns the security descriptor control bits.
|
// Control returns the security descriptor control bits.
|
||||||
func (sd *SECURITY_DESCRIPTOR) Control() (control SECURITY_DESCRIPTOR_CONTROL, revision uint32, err error) {
|
func (sd *SECURITY_DESCRIPTOR) Control() (control SECURITY_DESCRIPTOR_CONTROL, revision uint32, err error) {
|
||||||
|
|
|
@ -91,6 +91,7 @@ var (
|
||||||
procEnumServicesStatusExW = modadvapi32.NewProc("EnumServicesStatusExW")
|
procEnumServicesStatusExW = modadvapi32.NewProc("EnumServicesStatusExW")
|
||||||
procEqualSid = modadvapi32.NewProc("EqualSid")
|
procEqualSid = modadvapi32.NewProc("EqualSid")
|
||||||
procFreeSid = modadvapi32.NewProc("FreeSid")
|
procFreeSid = modadvapi32.NewProc("FreeSid")
|
||||||
|
procGetAce = modadvapi32.NewProc("GetAce")
|
||||||
procGetLengthSid = modadvapi32.NewProc("GetLengthSid")
|
procGetLengthSid = modadvapi32.NewProc("GetLengthSid")
|
||||||
procGetNamedSecurityInfoW = modadvapi32.NewProc("GetNamedSecurityInfoW")
|
procGetNamedSecurityInfoW = modadvapi32.NewProc("GetNamedSecurityInfoW")
|
||||||
procGetSecurityDescriptorControl = modadvapi32.NewProc("GetSecurityDescriptorControl")
|
procGetSecurityDescriptorControl = modadvapi32.NewProc("GetSecurityDescriptorControl")
|
||||||
|
@ -1224,6 +1225,14 @@ func setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCE
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (ret error) {
|
||||||
|
r0, _, _ := syscall.Syscall(procGetAce.Addr(), 3, uintptr(unsafe.Pointer(acl)), uintptr(aceIndex), uintptr(unsafe.Pointer(pAce)))
|
||||||
|
if r0 == 0 {
|
||||||
|
ret = GetLastError()
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func SetKernelObjectSecurity(handle Handle, securityInformation SECURITY_INFORMATION, securityDescriptor *SECURITY_DESCRIPTOR) (err error) {
|
func SetKernelObjectSecurity(handle Handle, securityInformation SECURITY_INFORMATION, securityDescriptor *SECURITY_DESCRIPTOR) (err error) {
|
||||||
r1, _, e1 := syscall.Syscall(procSetKernelObjectSecurity.Addr(), 3, uintptr(handle), uintptr(securityInformation), uintptr(unsafe.Pointer(securityDescriptor)))
|
r1, _, e1 := syscall.Syscall(procSetKernelObjectSecurity.Addr(), 3, uintptr(handle), uintptr(securityInformation), uintptr(unsafe.Pointer(securityDescriptor)))
|
||||||
if r1 == 0 {
|
if r1 == 0 {
|
||||||
|
|
|
@ -106,8 +106,21 @@ func PathEnclosingInterval(root *ast.File, start, end token.Pos) (path []ast.Nod
|
||||||
|
|
||||||
// Does augmented child strictly contain [start, end)?
|
// Does augmented child strictly contain [start, end)?
|
||||||
if augPos <= start && end <= augEnd {
|
if augPos <= start && end <= augEnd {
|
||||||
_, isToken := child.(tokenNode)
|
if is[tokenNode](child) {
|
||||||
return isToken || visit(child)
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// childrenOf elides the FuncType node beneath FuncDecl.
|
||||||
|
// Add it back here for TypeParams, Params, Results,
|
||||||
|
// all FieldLists). But we don't add it back for the "func" token
|
||||||
|
// even though it is is the tree at FuncDecl.Type.Func.
|
||||||
|
if decl, ok := node.(*ast.FuncDecl); ok {
|
||||||
|
if fields, ok := child.(*ast.FieldList); ok && fields != decl.Recv {
|
||||||
|
path = append(path, decl.Type)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return visit(child)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Does [start, end) overlap multiple children?
|
// Does [start, end) overlap multiple children?
|
||||||
|
@ -313,6 +326,8 @@ func childrenOf(n ast.Node) []ast.Node {
|
||||||
//
|
//
|
||||||
// As a workaround, we inline the case for FuncType
|
// As a workaround, we inline the case for FuncType
|
||||||
// here and order things correctly.
|
// here and order things correctly.
|
||||||
|
// We also need to insert the elided FuncType just
|
||||||
|
// before the 'visit' recursion.
|
||||||
//
|
//
|
||||||
children = nil // discard ast.Walk(FuncDecl) info subtrees
|
children = nil // discard ast.Walk(FuncDecl) info subtrees
|
||||||
children = append(children, tok(n.Type.Func, len("func")))
|
children = append(children, tok(n.Type.Func, len("func")))
|
||||||
|
@ -632,3 +647,8 @@ func NodeDescription(n ast.Node) string {
|
||||||
}
|
}
|
||||||
panic(fmt.Sprintf("unexpected node type: %T", n))
|
panic(fmt.Sprintf("unexpected node type: %T", n))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func is[T any](x any) bool {
|
||||||
|
_, ok := x.(T)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ package astutil
|
||||||
import "go/ast"
|
import "go/ast"
|
||||||
|
|
||||||
// Unparen returns e with any enclosing parentheses stripped.
|
// Unparen returns e with any enclosing parentheses stripped.
|
||||||
|
// TODO(adonovan): use go1.22's ast.Unparen.
|
||||||
func Unparen(e ast.Expr) ast.Expr {
|
func Unparen(e ast.Expr) ast.Expr {
|
||||||
for {
|
for {
|
||||||
p, ok := e.(*ast.ParenExpr)
|
p, ok := e.(*ast.ParenExpr)
|
||||||
|
|
|
@ -1,54 +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 packagesdriver fetches type sizes for go/packages and go/analysis.
|
|
||||||
package packagesdriver
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"golang.org/x/tools/internal/gocommand"
|
|
||||||
)
|
|
||||||
|
|
||||||
// TODO(adonovan): move back into go/packages.
|
|
||||||
func GetSizesForArgsGolist(ctx context.Context, inv gocommand.Invocation, gocmdRunner *gocommand.Runner) (string, string, error) {
|
|
||||||
inv.Verb = "list"
|
|
||||||
inv.Args = []string{"-f", "{{context.GOARCH}} {{context.Compiler}}", "--", "unsafe"}
|
|
||||||
stdout, stderr, friendlyErr, rawErr := gocmdRunner.RunRaw(ctx, inv)
|
|
||||||
var goarch, compiler string
|
|
||||||
if rawErr != nil {
|
|
||||||
rawErrMsg := rawErr.Error()
|
|
||||||
if strings.Contains(rawErrMsg, "cannot find main module") ||
|
|
||||||
strings.Contains(rawErrMsg, "go.mod file not found") {
|
|
||||||
// User's running outside of a module.
|
|
||||||
// All bets are off. Get GOARCH and guess compiler is gc.
|
|
||||||
// TODO(matloob): Is this a problem in practice?
|
|
||||||
inv.Verb = "env"
|
|
||||||
inv.Args = []string{"GOARCH"}
|
|
||||||
envout, enverr := gocmdRunner.Run(ctx, inv)
|
|
||||||
if enverr != nil {
|
|
||||||
return "", "", enverr
|
|
||||||
}
|
|
||||||
goarch = strings.TrimSpace(envout.String())
|
|
||||||
compiler = "gc"
|
|
||||||
} else if friendlyErr != nil {
|
|
||||||
return "", "", friendlyErr
|
|
||||||
} else {
|
|
||||||
// This should be unreachable, but be defensive
|
|
||||||
// in case RunRaw's error results are inconsistent.
|
|
||||||
return "", "", rawErr
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
fields := strings.Fields(stdout.String())
|
|
||||||
if len(fields) < 2 {
|
|
||||||
return "", "", fmt.Errorf("could not parse GOARCH and Go compiler in format \"<GOARCH> <compiler>\":\nstdout: <<%s>>\nstderr: <<%s>>",
|
|
||||||
stdout.String(), stderr.String())
|
|
||||||
}
|
|
||||||
goarch = fields[0]
|
|
||||||
compiler = fields[1]
|
|
||||||
}
|
|
||||||
return compiler, goarch, nil
|
|
||||||
}
|
|
|
@ -21,7 +21,6 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
"unicode"
|
"unicode"
|
||||||
|
|
||||||
"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"
|
||||||
)
|
)
|
||||||
|
@ -149,7 +148,7 @@ func goListDriver(cfg *Config, patterns ...string) (_ *DriverResponse, err error
|
||||||
if cfg.Mode&NeedTypesSizes != 0 || cfg.Mode&NeedTypes != 0 {
|
if cfg.Mode&NeedTypesSizes != 0 || cfg.Mode&NeedTypes != 0 {
|
||||||
errCh := make(chan error)
|
errCh := make(chan error)
|
||||||
go func() {
|
go func() {
|
||||||
compiler, arch, err := packagesdriver.GetSizesForArgsGolist(ctx, state.cfgInvocation(), cfg.gocmdRunner)
|
compiler, arch, err := getSizesForArgs(ctx, state.cfgInvocation(), cfg.gocmdRunner)
|
||||||
response.dr.Compiler = compiler
|
response.dr.Compiler = compiler
|
||||||
response.dr.Arch = arch
|
response.dr.Arch = arch
|
||||||
errCh <- err
|
errCh <- err
|
||||||
|
@ -1024,3 +1023,44 @@ func cmdDebugStr(cmd *exec.Cmd) string {
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v GOPROXY=%v PWD=%v %v", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["GOPROXY"], env["PWD"], strings.Join(args, " "))
|
return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v GOPROXY=%v PWD=%v %v", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["GOPROXY"], env["PWD"], strings.Join(args, " "))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getSizesForArgs queries 'go list' for the appropriate
|
||||||
|
// Compiler and GOARCH arguments to pass to [types.SizesFor].
|
||||||
|
func getSizesForArgs(ctx context.Context, inv gocommand.Invocation, gocmdRunner *gocommand.Runner) (string, string, error) {
|
||||||
|
inv.Verb = "list"
|
||||||
|
inv.Args = []string{"-f", "{{context.GOARCH}} {{context.Compiler}}", "--", "unsafe"}
|
||||||
|
stdout, stderr, friendlyErr, rawErr := gocmdRunner.RunRaw(ctx, inv)
|
||||||
|
var goarch, compiler string
|
||||||
|
if rawErr != nil {
|
||||||
|
rawErrMsg := rawErr.Error()
|
||||||
|
if strings.Contains(rawErrMsg, "cannot find main module") ||
|
||||||
|
strings.Contains(rawErrMsg, "go.mod file not found") {
|
||||||
|
// User's running outside of a module.
|
||||||
|
// All bets are off. Get GOARCH and guess compiler is gc.
|
||||||
|
// TODO(matloob): Is this a problem in practice?
|
||||||
|
inv.Verb = "env"
|
||||||
|
inv.Args = []string{"GOARCH"}
|
||||||
|
envout, enverr := gocmdRunner.Run(ctx, inv)
|
||||||
|
if enverr != nil {
|
||||||
|
return "", "", enverr
|
||||||
|
}
|
||||||
|
goarch = strings.TrimSpace(envout.String())
|
||||||
|
compiler = "gc"
|
||||||
|
} else if friendlyErr != nil {
|
||||||
|
return "", "", friendlyErr
|
||||||
|
} else {
|
||||||
|
// This should be unreachable, but be defensive
|
||||||
|
// in case RunRaw's error results are inconsistent.
|
||||||
|
return "", "", rawErr
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fields := strings.Fields(stdout.String())
|
||||||
|
if len(fields) < 2 {
|
||||||
|
return "", "", fmt.Errorf("could not parse GOARCH and Go compiler in format \"<GOARCH> <compiler>\":\nstdout: <<%s>>\nstderr: <<%s>>",
|
||||||
|
stdout.String(), stderr.String())
|
||||||
|
}
|
||||||
|
goarch = fields[0]
|
||||||
|
compiler = fields[1]
|
||||||
|
}
|
||||||
|
return compiler, goarch, nil
|
||||||
|
}
|
||||||
|
|
|
@ -51,7 +51,7 @@ type Path string
|
||||||
//
|
//
|
||||||
// PO package->object Package.Scope.Lookup
|
// PO package->object Package.Scope.Lookup
|
||||||
// OT object->type Object.Type
|
// OT object->type Object.Type
|
||||||
// TT type->type Type.{Elem,Key,Params,Results,Underlying} [EKPRU]
|
// TT type->type Type.{Elem,Key,{,{,Recv}Type}Params,Results,Underlying} [EKPRUTrC]
|
||||||
// TO type->object Type.{At,Field,Method,Obj} [AFMO]
|
// TO type->object Type.{At,Field,Method,Obj} [AFMO]
|
||||||
//
|
//
|
||||||
// All valid paths start with a package and end at an object
|
// All valid paths start with a package and end at an object
|
||||||
|
@ -63,8 +63,8 @@ type Path string
|
||||||
// - The only PO operator is Package.Scope.Lookup, which requires an identifier.
|
// - The only PO operator is Package.Scope.Lookup, which requires an identifier.
|
||||||
// - The only OT operator is Object.Type,
|
// - The only OT operator is Object.Type,
|
||||||
// which we encode as '.' because dot cannot appear in an identifier.
|
// which we encode as '.' because dot cannot appear in an identifier.
|
||||||
// - The TT operators are encoded as [EKPRUTC];
|
// - The TT operators are encoded as [EKPRUTrC];
|
||||||
// one of these (TypeParam) requires an integer operand,
|
// two of these ({,Recv}TypeParams) require an integer operand,
|
||||||
// which is encoded as a string of decimal digits.
|
// which is encoded as a string of decimal digits.
|
||||||
// - The TO operators are encoded as [AFMO];
|
// - The TO operators are encoded as [AFMO];
|
||||||
// three of these (At,Field,Method) require an integer operand,
|
// three of these (At,Field,Method) require an integer operand,
|
||||||
|
@ -98,19 +98,20 @@ const (
|
||||||
opType = '.' // .Type() (Object)
|
opType = '.' // .Type() (Object)
|
||||||
|
|
||||||
// type->type operators
|
// type->type operators
|
||||||
opElem = 'E' // .Elem() (Pointer, Slice, Array, Chan, Map)
|
opElem = 'E' // .Elem() (Pointer, Slice, Array, Chan, Map)
|
||||||
opKey = 'K' // .Key() (Map)
|
opKey = 'K' // .Key() (Map)
|
||||||
opParams = 'P' // .Params() (Signature)
|
opParams = 'P' // .Params() (Signature)
|
||||||
opResults = 'R' // .Results() (Signature)
|
opResults = 'R' // .Results() (Signature)
|
||||||
opUnderlying = 'U' // .Underlying() (Named)
|
opUnderlying = 'U' // .Underlying() (Named)
|
||||||
opTypeParam = 'T' // .TypeParams.At(i) (Named, Signature)
|
opTypeParam = 'T' // .TypeParams.At(i) (Named, Signature)
|
||||||
opConstraint = 'C' // .Constraint() (TypeParam)
|
opRecvTypeParam = 'r' // .RecvTypeParams.At(i) (Signature)
|
||||||
|
opConstraint = 'C' // .Constraint() (TypeParam)
|
||||||
|
|
||||||
// type->object operators
|
// type->object operators
|
||||||
opAt = 'A' // .At(i) (Tuple)
|
opAt = 'A' // .At(i) (Tuple)
|
||||||
opField = 'F' // .Field(i) (Struct)
|
opField = 'F' // .Field(i) (Struct)
|
||||||
opMethod = 'M' // .Method(i) (Named or Interface; not Struct: "promoted" names are ignored)
|
opMethod = 'M' // .Method(i) (Named or Interface; not Struct: "promoted" names are ignored)
|
||||||
opObj = 'O' // .Obj() (Named, TypeParam)
|
opObj = 'O' // .Obj() (Named, TypeParam)
|
||||||
)
|
)
|
||||||
|
|
||||||
// For is equivalent to new(Encoder).For(obj).
|
// For is equivalent to new(Encoder).For(obj).
|
||||||
|
@ -286,7 +287,7 @@ func (enc *Encoder) For(obj types.Object) (Path, error) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if named, _ := T.(*types.Named); named != nil {
|
if named, _ := T.(*types.Named); named != nil {
|
||||||
if r := findTypeParam(obj, named.TypeParams(), path, nil); r != nil {
|
if r := findTypeParam(obj, named.TypeParams(), path, opTypeParam, nil); r != nil {
|
||||||
// generic named type
|
// generic named type
|
||||||
return Path(r), nil
|
return Path(r), nil
|
||||||
}
|
}
|
||||||
|
@ -462,7 +463,10 @@ func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName]
|
||||||
}
|
}
|
||||||
return find(obj, T.Elem(), append(path, opElem), seen)
|
return find(obj, T.Elem(), append(path, opElem), seen)
|
||||||
case *types.Signature:
|
case *types.Signature:
|
||||||
if r := findTypeParam(obj, T.TypeParams(), path, seen); r != nil {
|
if r := findTypeParam(obj, T.RecvTypeParams(), path, opRecvTypeParam, nil); r != nil {
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
if r := findTypeParam(obj, T.TypeParams(), path, opTypeParam, seen); r != nil {
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
if r := find(obj, T.Params(), append(path, opParams), seen); r != nil {
|
if r := find(obj, T.Params(), append(path, opParams), seen); r != nil {
|
||||||
|
@ -525,10 +529,10 @@ func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName]
|
||||||
panic(T)
|
panic(T)
|
||||||
}
|
}
|
||||||
|
|
||||||
func findTypeParam(obj types.Object, list *types.TypeParamList, path []byte, seen map[*types.TypeName]bool) []byte {
|
func findTypeParam(obj types.Object, list *types.TypeParamList, path []byte, op byte, seen map[*types.TypeName]bool) []byte {
|
||||||
for i := 0; i < list.Len(); i++ {
|
for i := 0; i < list.Len(); i++ {
|
||||||
tparam := list.At(i)
|
tparam := list.At(i)
|
||||||
path2 := appendOpArg(path, opTypeParam, i)
|
path2 := appendOpArg(path, op, i)
|
||||||
if r := find(obj, tparam, path2, seen); r != nil {
|
if r := find(obj, tparam, path2, seen); r != nil {
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
@ -580,10 +584,10 @@ func Object(pkg *types.Package, p Path) (types.Object, error) {
|
||||||
code := suffix[0]
|
code := suffix[0]
|
||||||
suffix = suffix[1:]
|
suffix = suffix[1:]
|
||||||
|
|
||||||
// Codes [AFM] have an integer operand.
|
// Codes [AFMTr] have an integer operand.
|
||||||
var index int
|
var index int
|
||||||
switch code {
|
switch code {
|
||||||
case opAt, opField, opMethod, opTypeParam:
|
case opAt, opField, opMethod, opTypeParam, opRecvTypeParam:
|
||||||
rest := strings.TrimLeft(suffix, "0123456789")
|
rest := strings.TrimLeft(suffix, "0123456789")
|
||||||
numerals := suffix[:len(suffix)-len(rest)]
|
numerals := suffix[:len(suffix)-len(rest)]
|
||||||
suffix = rest
|
suffix = rest
|
||||||
|
@ -664,6 +668,17 @@ func Object(pkg *types.Package, p Path) (types.Object, error) {
|
||||||
}
|
}
|
||||||
t = tparams.At(index)
|
t = tparams.At(index)
|
||||||
|
|
||||||
|
case opRecvTypeParam:
|
||||||
|
sig, ok := t.(*types.Signature) // Signature
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t)
|
||||||
|
}
|
||||||
|
rtparams := sig.RecvTypeParams()
|
||||||
|
if n := rtparams.Len(); index >= n {
|
||||||
|
return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n)
|
||||||
|
}
|
||||||
|
t = rtparams.At(index)
|
||||||
|
|
||||||
case opConstraint:
|
case opConstraint:
|
||||||
tparam, ok := t.(*types.TypeParam)
|
tparam, ok := t.(*types.TypeParam)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
@ -725,6 +740,10 @@ func Object(pkg *types.Package, p Path) (types.Object, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if obj == nil {
|
||||||
|
panic(p) // path does not end in an object-valued operator
|
||||||
|
}
|
||||||
|
|
||||||
if obj.Pkg() != pkg {
|
if obj.Pkg() != pkg {
|
||||||
return nil, fmt.Errorf("path denotes %s, which belongs to a different package", obj)
|
return nil, fmt.Errorf("path denotes %s, which belongs to a different package", obj)
|
||||||
}
|
}
|
||||||
|
|
|
@ -200,12 +200,14 @@ func (i *Invocation) runWithFriendlyError(ctx context.Context, stdout, stderr io
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error {
|
// logf logs if i.Logf is non-nil.
|
||||||
log := i.Logf
|
func (i *Invocation) logf(format string, args ...any) {
|
||||||
if log == nil {
|
if i.Logf != nil {
|
||||||
log = func(string, ...interface{}) {}
|
i.Logf(format, args...)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error {
|
||||||
goArgs := []string{i.Verb}
|
goArgs := []string{i.Verb}
|
||||||
|
|
||||||
appendModFile := func() {
|
appendModFile := func() {
|
||||||
|
@ -277,7 +279,12 @@ func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error {
|
||||||
cmd.Dir = i.WorkingDir
|
cmd.Dir = i.WorkingDir
|
||||||
}
|
}
|
||||||
|
|
||||||
defer func(start time.Time) { log("%s for %v", time.Since(start), cmdDebugStr(cmd)) }(time.Now())
|
debugStr := cmdDebugStr(cmd)
|
||||||
|
i.logf("starting %v", debugStr)
|
||||||
|
start := time.Now()
|
||||||
|
defer func() {
|
||||||
|
i.logf("%s for %v", time.Since(start), debugStr)
|
||||||
|
}()
|
||||||
|
|
||||||
return runCmdContext(ctx, cmd)
|
return runCmdContext(ctx, cmd)
|
||||||
}
|
}
|
||||||
|
@ -514,7 +521,7 @@ func WriteOverlays(overlay map[string][]byte) (filename string, cleanup func(),
|
||||||
for k, v := range overlay {
|
for k, v := range overlay {
|
||||||
// Use a unique basename for each file (001-foo.go),
|
// Use a unique basename for each file (001-foo.go),
|
||||||
// to avoid creating nested directories.
|
// to avoid creating nested directories.
|
||||||
base := fmt.Sprintf("%d-%s.go", 1+len(overlays), filepath.Base(k))
|
base := fmt.Sprintf("%d-%s", 1+len(overlays), filepath.Base(k))
|
||||||
filename := filepath.Join(dir, base)
|
filename := filepath.Join(dir, base)
|
||||||
err := os.WriteFile(filename, v, 0666)
|
err := os.WriteFile(filename, v, 0666)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -27,6 +27,7 @@ import (
|
||||||
"unicode"
|
"unicode"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
|
"golang.org/x/sync/errgroup"
|
||||||
"golang.org/x/tools/go/ast/astutil"
|
"golang.org/x/tools/go/ast/astutil"
|
||||||
"golang.org/x/tools/internal/event"
|
"golang.org/x/tools/internal/event"
|
||||||
"golang.org/x/tools/internal/gocommand"
|
"golang.org/x/tools/internal/gocommand"
|
||||||
|
@ -365,9 +366,7 @@ func (p *pass) load() ([]*ImportFix, bool) {
|
||||||
if p.loadRealPackageNames {
|
if p.loadRealPackageNames {
|
||||||
err := p.loadPackageNames(append(imports, p.candidates...))
|
err := p.loadPackageNames(append(imports, p.candidates...))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if p.env.Logf != nil {
|
p.env.logf("loading package names: %v", err)
|
||||||
p.env.Logf("loading package names: %v", err)
|
|
||||||
}
|
|
||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -563,7 +562,14 @@ func (p *pass) addCandidate(imp *ImportInfo, pkg *packageInfo) {
|
||||||
|
|
||||||
// fixImports adds and removes imports from f so that all its references are
|
// fixImports adds and removes imports from f so that all its references are
|
||||||
// satisfied and there are no unused imports.
|
// satisfied and there are no unused imports.
|
||||||
func fixImports(fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) error {
|
//
|
||||||
|
// This is declared as a variable rather than a function so goimports can
|
||||||
|
// easily be extended by adding a file with an init function.
|
||||||
|
//
|
||||||
|
// DO NOT REMOVE: used internally at Google.
|
||||||
|
var fixImports = fixImportsDefault
|
||||||
|
|
||||||
|
func fixImportsDefault(fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) error {
|
||||||
fixes, err := getFixes(context.Background(), fset, f, filename, env)
|
fixes, err := getFixes(context.Background(), fset, f, filename, env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -580,9 +586,7 @@ func getFixes(ctx context.Context, fset *token.FileSet, f *ast.File, filename st
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
srcDir := filepath.Dir(abs)
|
srcDir := filepath.Dir(abs)
|
||||||
if env.Logf != nil {
|
env.logf("fixImports(filename=%q), abs=%q, srcDir=%q ...", filename, abs, srcDir)
|
||||||
env.Logf("fixImports(filename=%q), abs=%q, srcDir=%q ...", filename, abs, srcDir)
|
|
||||||
}
|
|
||||||
|
|
||||||
// First pass: looking only at f, and using the naive algorithm to
|
// First pass: looking only at f, and using the naive algorithm to
|
||||||
// derive package names from import paths, see if the file is already
|
// derive package names from import paths, see if the file is already
|
||||||
|
@ -1014,16 +1018,26 @@ func (e *ProcessEnv) GetResolver() (Resolver, error) {
|
||||||
// already know the view type.
|
// already know the view type.
|
||||||
if len(e.Env["GOMOD"]) == 0 && len(e.Env["GOWORK"]) == 0 {
|
if len(e.Env["GOMOD"]) == 0 && len(e.Env["GOWORK"]) == 0 {
|
||||||
e.resolver = newGopathResolver(e)
|
e.resolver = newGopathResolver(e)
|
||||||
|
e.logf("created gopath resolver")
|
||||||
} else if r, err := newModuleResolver(e, e.ModCache); err != nil {
|
} else if r, err := newModuleResolver(e, e.ModCache); err != nil {
|
||||||
e.resolverErr = err
|
e.resolverErr = err
|
||||||
|
e.logf("failed to create module resolver: %v", err)
|
||||||
} else {
|
} else {
|
||||||
e.resolver = Resolver(r)
|
e.resolver = Resolver(r)
|
||||||
|
e.logf("created module resolver")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return e.resolver, e.resolverErr
|
return e.resolver, e.resolverErr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// logf logs if e.Logf is non-nil.
|
||||||
|
func (e *ProcessEnv) logf(format string, args ...any) {
|
||||||
|
if e.Logf != nil {
|
||||||
|
e.Logf(format, args...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// buildContext returns the build.Context to use for matching files.
|
// buildContext returns the build.Context to use for matching files.
|
||||||
//
|
//
|
||||||
// TODO(rfindley): support dynamic GOOS, GOARCH here, when doing cross-platform
|
// TODO(rfindley): support dynamic GOOS, GOARCH here, when doing cross-platform
|
||||||
|
@ -1127,8 +1141,8 @@ type Resolver interface {
|
||||||
// scan works with callback to search for packages. See scanCallback for details.
|
// scan works with callback to search for packages. See scanCallback for details.
|
||||||
scan(ctx context.Context, callback *scanCallback) error
|
scan(ctx context.Context, callback *scanCallback) error
|
||||||
|
|
||||||
// loadExports returns the set of exported symbols in the package at dir.
|
// loadExports returns the package name and set of exported symbols in the
|
||||||
// loadExports may be called concurrently.
|
// package at dir. loadExports may be called concurrently.
|
||||||
loadExports(ctx context.Context, pkg *pkg, includeTest bool) (string, []stdlib.Symbol, error)
|
loadExports(ctx context.Context, pkg *pkg, includeTest bool) (string, []stdlib.Symbol, error)
|
||||||
|
|
||||||
// scoreImportPath returns the relevance for an import path.
|
// scoreImportPath returns the relevance for an import path.
|
||||||
|
@ -1205,54 +1219,52 @@ func addExternalCandidates(ctx context.Context, pass *pass, refs references, fil
|
||||||
imp *ImportInfo
|
imp *ImportInfo
|
||||||
pkg *packageInfo
|
pkg *packageInfo
|
||||||
}
|
}
|
||||||
results := make(chan result, len(refs))
|
results := make([]*result, len(refs))
|
||||||
|
|
||||||
ctx, cancel := context.WithCancel(ctx)
|
g, ctx := errgroup.WithContext(ctx)
|
||||||
var wg sync.WaitGroup
|
|
||||||
defer func() {
|
searcher := symbolSearcher{
|
||||||
cancel()
|
logf: pass.env.logf,
|
||||||
wg.Wait()
|
srcDir: pass.srcDir,
|
||||||
}()
|
xtest: strings.HasSuffix(pass.f.Name.Name, "_test"),
|
||||||
var (
|
loadExports: resolver.loadExports,
|
||||||
firstErr error
|
}
|
||||||
firstErrOnce sync.Once
|
|
||||||
)
|
i := 0
|
||||||
for pkgName, symbols := range refs {
|
for pkgName, symbols := range refs {
|
||||||
wg.Add(1)
|
index := i // claim an index in results
|
||||||
go func(pkgName string, symbols map[string]bool) {
|
i++
|
||||||
defer wg.Done()
|
pkgName := pkgName
|
||||||
|
symbols := symbols
|
||||||
found, err := findImport(ctx, pass, found[pkgName], pkgName, symbols)
|
|
||||||
|
|
||||||
|
g.Go(func() error {
|
||||||
|
found, err := searcher.search(ctx, found[pkgName], pkgName, symbols)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
firstErrOnce.Do(func() {
|
return err
|
||||||
firstErr = err
|
|
||||||
cancel()
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if found == nil {
|
if found == nil {
|
||||||
return // No matching package.
|
return nil // No matching package.
|
||||||
}
|
}
|
||||||
|
|
||||||
imp := &ImportInfo{
|
imp := &ImportInfo{
|
||||||
ImportPath: found.importPathShort,
|
ImportPath: found.importPathShort,
|
||||||
}
|
}
|
||||||
|
|
||||||
pkg := &packageInfo{
|
pkg := &packageInfo{
|
||||||
name: pkgName,
|
name: pkgName,
|
||||||
exports: symbols,
|
exports: symbols,
|
||||||
}
|
}
|
||||||
results <- result{imp, pkg}
|
results[index] = &result{imp, pkg}
|
||||||
}(pkgName, symbols)
|
return nil
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if err := g.Wait(); err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
go func() {
|
|
||||||
wg.Wait()
|
|
||||||
close(results)
|
|
||||||
}()
|
|
||||||
|
|
||||||
for result := range results {
|
for _, result := range results {
|
||||||
|
if result == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
// Don't offer completions that would shadow predeclared
|
// Don't offer completions that would shadow predeclared
|
||||||
// names, such as github.com/coreos/etcd/error.
|
// names, such as github.com/coreos/etcd/error.
|
||||||
if types.Universe.Lookup(result.pkg.name) != nil { // predeclared
|
if types.Universe.Lookup(result.pkg.name) != nil { // predeclared
|
||||||
|
@ -1266,7 +1278,7 @@ func addExternalCandidates(ctx context.Context, pass *pass, refs references, fil
|
||||||
}
|
}
|
||||||
pass.addCandidate(result.imp, result.pkg)
|
pass.addCandidate(result.imp, result.pkg)
|
||||||
}
|
}
|
||||||
return firstErr
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// notIdentifier reports whether ch is an invalid identifier character.
|
// notIdentifier reports whether ch is an invalid identifier character.
|
||||||
|
@ -1610,9 +1622,7 @@ func loadExportsFromFiles(ctx context.Context, env *ProcessEnv, dir string, incl
|
||||||
fullFile := filepath.Join(dir, fi.Name())
|
fullFile := filepath.Join(dir, fi.Name())
|
||||||
f, err := parser.ParseFile(fset, fullFile, nil, 0)
|
f, err := parser.ParseFile(fset, fullFile, nil, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if env.Logf != nil {
|
env.logf("error parsing %v: %v", fullFile, err)
|
||||||
env.Logf("error parsing %v: %v", fullFile, err)
|
|
||||||
}
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if f.Name.Name == "documentation" {
|
if f.Name.Name == "documentation" {
|
||||||
|
@ -1648,9 +1658,7 @@ func loadExportsFromFiles(ctx context.Context, env *ProcessEnv, dir string, incl
|
||||||
}
|
}
|
||||||
sortSymbols(exports)
|
sortSymbols(exports)
|
||||||
|
|
||||||
if env.Logf != nil {
|
env.logf("loaded exports in dir %v (package %v): %v", dir, pkgName, exports)
|
||||||
env.Logf("loaded exports in dir %v (package %v): %v", dir, pkgName, exports)
|
|
||||||
}
|
|
||||||
return pkgName, exports, nil
|
return pkgName, exports, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1660,25 +1668,39 @@ func sortSymbols(syms []stdlib.Symbol) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// findImport searches for a package with the given symbols.
|
// A symbolSearcher searches for a package with a set of symbols, among a set
|
||||||
// If no package is found, findImport returns ("", false, nil)
|
// of candidates. See [symbolSearcher.search].
|
||||||
func findImport(ctx context.Context, pass *pass, candidates []pkgDistance, pkgName string, symbols map[string]bool) (*pkg, error) {
|
//
|
||||||
|
// The search occurs within the scope of a single file, with context captured
|
||||||
|
// in srcDir and xtest.
|
||||||
|
type symbolSearcher struct {
|
||||||
|
logf func(string, ...any)
|
||||||
|
srcDir string // directory containing the file
|
||||||
|
xtest bool // if set, the file containing is an x_test file
|
||||||
|
loadExports func(ctx context.Context, pkg *pkg, includeTest bool) (string, []stdlib.Symbol, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// search searches the provided candidates for a package containing all
|
||||||
|
// exported symbols.
|
||||||
|
//
|
||||||
|
// If successful, returns the resulting package.
|
||||||
|
func (s *symbolSearcher) search(ctx context.Context, candidates []pkgDistance, pkgName string, symbols map[string]bool) (*pkg, error) {
|
||||||
// Sort the candidates by their import package length,
|
// Sort the candidates by their import package length,
|
||||||
// assuming that shorter package names are better than long
|
// assuming that shorter package names are better than long
|
||||||
// ones. Note that this sorts by the de-vendored name, so
|
// ones. Note that this sorts by the de-vendored name, so
|
||||||
// there's no "penalty" for vendoring.
|
// there's no "penalty" for vendoring.
|
||||||
sort.Sort(byDistanceOrImportPathShortLength(candidates))
|
sort.Sort(byDistanceOrImportPathShortLength(candidates))
|
||||||
if pass.env.Logf != nil {
|
if s.logf != nil {
|
||||||
for i, c := range candidates {
|
for i, c := range candidates {
|
||||||
pass.env.Logf("%s candidate %d/%d: %v in %v", pkgName, i+1, len(candidates), c.pkg.importPathShort, c.pkg.dir)
|
s.logf("%s candidate %d/%d: %v in %v", pkgName, i+1, len(candidates), c.pkg.importPathShort, c.pkg.dir)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
resolver, err := pass.env.GetResolver()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Collect exports for packages with matching names.
|
// Arrange rescv so that we can we can await results in order of relevance
|
||||||
|
// and exit as soon as we find the first match.
|
||||||
|
//
|
||||||
|
// Search with bounded concurrency, returning as soon as the first result
|
||||||
|
// among rescv is non-nil.
|
||||||
rescv := make([]chan *pkg, len(candidates))
|
rescv := make([]chan *pkg, len(candidates))
|
||||||
for i := range candidates {
|
for i := range candidates {
|
||||||
rescv[i] = make(chan *pkg, 1)
|
rescv[i] = make(chan *pkg, 1)
|
||||||
|
@ -1686,6 +1708,7 @@ func findImport(ctx context.Context, pass *pass, candidates []pkgDistance, pkgNa
|
||||||
const maxConcurrentPackageImport = 4
|
const maxConcurrentPackageImport = 4
|
||||||
loadExportsSem := make(chan struct{}, maxConcurrentPackageImport)
|
loadExportsSem := make(chan struct{}, maxConcurrentPackageImport)
|
||||||
|
|
||||||
|
// Ensure that all work is completed at exit.
|
||||||
ctx, cancel := context.WithCancel(ctx)
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1693,6 +1716,7 @@ func findImport(ctx context.Context, pass *pass, candidates []pkgDistance, pkgNa
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
// Start the search.
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
|
@ -1703,55 +1727,67 @@ func findImport(ctx context.Context, pass *pass, candidates []pkgDistance, pkgNa
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i := i
|
||||||
|
c := c
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go func(c pkgDistance, resc chan<- *pkg) {
|
go func() {
|
||||||
defer func() {
|
defer func() {
|
||||||
<-loadExportsSem
|
<-loadExportsSem
|
||||||
wg.Done()
|
wg.Done()
|
||||||
}()
|
}()
|
||||||
|
if s.logf != nil {
|
||||||
if pass.env.Logf != nil {
|
s.logf("loading exports in dir %s (seeking package %s)", c.pkg.dir, pkgName)
|
||||||
pass.env.Logf("loading exports in dir %s (seeking package %s)", c.pkg.dir, pkgName)
|
|
||||||
}
|
}
|
||||||
// If we're an x_test, load the package under test's test variant.
|
pkg, err := s.searchOne(ctx, c, symbols)
|
||||||
includeTest := strings.HasSuffix(pass.f.Name.Name, "_test") && c.pkg.dir == pass.srcDir
|
|
||||||
_, exports, err := resolver.loadExports(ctx, c.pkg, includeTest)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if pass.env.Logf != nil {
|
if s.logf != nil && ctx.Err() == nil {
|
||||||
pass.env.Logf("loading exports in dir %s (seeking package %s): %v", c.pkg.dir, pkgName, err)
|
s.logf("loading exports in dir %s (seeking package %s): %v", c.pkg.dir, pkgName, err)
|
||||||
}
|
}
|
||||||
resc <- nil
|
pkg = nil
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
rescv[i] <- pkg // may be nil
|
||||||
exportsMap := make(map[string]bool, len(exports))
|
}()
|
||||||
for _, sym := range exports {
|
|
||||||
exportsMap[sym.Name] = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// If it doesn't have the right
|
|
||||||
// symbols, send nil to mean no match.
|
|
||||||
for symbol := range symbols {
|
|
||||||
if !exportsMap[symbol] {
|
|
||||||
resc <- nil
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
resc <- c.pkg
|
|
||||||
}(c, rescv[i])
|
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
// Await the first (best) result.
|
||||||
for _, resc := range rescv {
|
for _, resc := range rescv {
|
||||||
pkg := <-resc
|
select {
|
||||||
if pkg == nil {
|
case r := <-resc:
|
||||||
continue
|
if r != nil {
|
||||||
|
return r, nil
|
||||||
|
}
|
||||||
|
case <-ctx.Done():
|
||||||
|
return nil, ctx.Err()
|
||||||
}
|
}
|
||||||
return pkg, nil
|
|
||||||
}
|
}
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *symbolSearcher) searchOne(ctx context.Context, c pkgDistance, symbols map[string]bool) (*pkg, error) {
|
||||||
|
if ctx.Err() != nil {
|
||||||
|
return nil, ctx.Err()
|
||||||
|
}
|
||||||
|
// If we're considering the package under test from an x_test, load the
|
||||||
|
// test variant.
|
||||||
|
includeTest := s.xtest && c.pkg.dir == s.srcDir
|
||||||
|
_, exports, err := s.loadExports(ctx, c.pkg, includeTest)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
exportsMap := make(map[string]bool, len(exports))
|
||||||
|
for _, sym := range exports {
|
||||||
|
exportsMap[sym.Name] = true
|
||||||
|
}
|
||||||
|
for symbol := range symbols {
|
||||||
|
if !exportsMap[symbol] {
|
||||||
|
return nil, nil // no match
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return c.pkg, nil
|
||||||
|
}
|
||||||
|
|
||||||
// pkgIsCandidate reports whether pkg is a candidate for satisfying the
|
// pkgIsCandidate reports whether pkg is a candidate for satisfying the
|
||||||
// finding which package pkgIdent in the file named by filename is trying
|
// finding which package pkgIdent in the file named by filename is trying
|
||||||
// to refer to.
|
// to refer to.
|
||||||
|
@ -1771,58 +1807,24 @@ func pkgIsCandidate(filename string, refs references, pkg *pkg) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Speed optimization to minimize disk I/O:
|
// Speed optimization to minimize disk I/O:
|
||||||
// the last two components on disk must contain the
|
|
||||||
// package name somewhere.
|
|
||||||
//
|
//
|
||||||
// This permits mismatch naming like directory
|
// Use the matchesPath heuristic to filter to package paths that could
|
||||||
// "go-foo" being package "foo", or "pkg.v3" being "pkg",
|
// reasonably match a dangling reference.
|
||||||
// or directory "google.golang.org/api/cloudbilling/v1"
|
//
|
||||||
// being package "cloudbilling", but doesn't
|
// This permits mismatch naming like directory "go-foo" being package "foo",
|
||||||
// permit a directory "foo" to be package
|
// or "pkg.v3" being "pkg", or directory
|
||||||
// "bar", which is strongly discouraged
|
// "google.golang.org/api/cloudbilling/v1" being package "cloudbilling", but
|
||||||
// anyway. There's no reason goimports needs
|
// doesn't permit a directory "foo" to be package "bar", which is strongly
|
||||||
// to be slow just to accommodate that.
|
// discouraged anyway. There's no reason goimports needs to be slow just to
|
||||||
|
// accommodate that.
|
||||||
for pkgIdent := range refs {
|
for pkgIdent := range refs {
|
||||||
lastTwo := lastTwoComponents(pkg.importPathShort)
|
if matchesPath(pkgIdent, pkg.importPathShort) {
|
||||||
if strings.Contains(lastTwo, pkgIdent) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if hasHyphenOrUpperASCII(lastTwo) && !hasHyphenOrUpperASCII(pkgIdent) {
|
|
||||||
lastTwo = lowerASCIIAndRemoveHyphen(lastTwo)
|
|
||||||
if strings.Contains(lastTwo, pkgIdent) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func hasHyphenOrUpperASCII(s string) bool {
|
|
||||||
for i := 0; i < len(s); i++ {
|
|
||||||
b := s[i]
|
|
||||||
if b == '-' || ('A' <= b && b <= 'Z') {
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func lowerASCIIAndRemoveHyphen(s string) (ret string) {
|
|
||||||
buf := make([]byte, 0, len(s))
|
|
||||||
for i := 0; i < len(s); i++ {
|
|
||||||
b := s[i]
|
|
||||||
switch {
|
|
||||||
case b == '-':
|
|
||||||
continue
|
|
||||||
case 'A' <= b && b <= 'Z':
|
|
||||||
buf = append(buf, b+('a'-'A'))
|
|
||||||
default:
|
|
||||||
buf = append(buf, b)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return string(buf)
|
|
||||||
}
|
|
||||||
|
|
||||||
// canUse reports whether the package in dir is usable from filename,
|
// canUse reports whether the package in dir is usable from filename,
|
||||||
// respecting the Go "internal" and "vendor" visibility rules.
|
// respecting the Go "internal" and "vendor" visibility rules.
|
||||||
func canUse(filename, dir string) bool {
|
func canUse(filename, dir string) bool {
|
||||||
|
@ -1863,19 +1865,84 @@ func canUse(filename, dir string) bool {
|
||||||
return !strings.Contains(relSlash, "/vendor/") && !strings.Contains(relSlash, "/internal/") && !strings.HasSuffix(relSlash, "/internal")
|
return !strings.Contains(relSlash, "/vendor/") && !strings.Contains(relSlash, "/internal/") && !strings.HasSuffix(relSlash, "/internal")
|
||||||
}
|
}
|
||||||
|
|
||||||
// lastTwoComponents returns at most the last two path components
|
// matchesPath reports whether ident may match a potential package name
|
||||||
// of v, using either / or \ as the path separator.
|
// referred to by path, using heuristics to filter out unidiomatic package
|
||||||
func lastTwoComponents(v string) string {
|
// names.
|
||||||
|
//
|
||||||
|
// Specifically, it checks whether either of the last two '/'- or '\'-delimited
|
||||||
|
// path segments matches the identifier. The segment-matching heuristic must
|
||||||
|
// allow for various conventions around segment naming, including go-foo,
|
||||||
|
// foo-go, and foo.v3. To handle all of these, matching considers both (1) the
|
||||||
|
// entire segment, ignoring '-' and '.', as well as (2) the last subsegment
|
||||||
|
// separated by '-' or '.'. So the segment foo-go matches all of the following
|
||||||
|
// identifiers: foo, go, and foogo. All matches are case insensitive (for ASCII
|
||||||
|
// identifiers).
|
||||||
|
//
|
||||||
|
// See the docstring for [pkgIsCandidate] for an explanation of how this
|
||||||
|
// heuristic filters potential candidate packages.
|
||||||
|
func matchesPath(ident, path string) bool {
|
||||||
|
// Ignore case, for ASCII.
|
||||||
|
lowerIfASCII := func(b byte) byte {
|
||||||
|
if 'A' <= b && b <= 'Z' {
|
||||||
|
return b + ('a' - 'A')
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// match reports whether path[start:end] matches ident, ignoring [.-].
|
||||||
|
match := func(start, end int) bool {
|
||||||
|
ii := len(ident) - 1 // current byte in ident
|
||||||
|
pi := end - 1 // current byte in path
|
||||||
|
for ; pi >= start && ii >= 0; pi-- {
|
||||||
|
pb := path[pi]
|
||||||
|
if pb == '-' || pb == '.' {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
pb = lowerIfASCII(pb)
|
||||||
|
ib := lowerIfASCII(ident[ii])
|
||||||
|
if pb != ib {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
ii--
|
||||||
|
}
|
||||||
|
return ii < 0 && pi < start // all bytes matched
|
||||||
|
}
|
||||||
|
|
||||||
|
// segmentEnd and subsegmentEnd hold the end points of the current segment
|
||||||
|
// and subsegment intervals.
|
||||||
|
segmentEnd := len(path)
|
||||||
|
subsegmentEnd := len(path)
|
||||||
|
|
||||||
|
// Count slashes; we only care about the last two segments.
|
||||||
nslash := 0
|
nslash := 0
|
||||||
for i := len(v) - 1; i >= 0; i-- {
|
|
||||||
if v[i] == '/' || v[i] == '\\' {
|
for i := len(path) - 1; i >= 0; i-- {
|
||||||
|
switch b := path[i]; b {
|
||||||
|
// TODO(rfindley): we handle backlashes here only because the previous
|
||||||
|
// heuristic handled backslashes. This is perhaps overly defensive, but is
|
||||||
|
// the result of many lessons regarding Chesterton's fence and the
|
||||||
|
// goimports codebase.
|
||||||
|
//
|
||||||
|
// However, this function is only ever called with something called an
|
||||||
|
// 'importPath'. Is it possible that this is a real import path, and
|
||||||
|
// therefore we need only consider forward slashes?
|
||||||
|
case '/', '\\':
|
||||||
|
if match(i+1, segmentEnd) || match(i+1, subsegmentEnd) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
nslash++
|
nslash++
|
||||||
if nslash == 2 {
|
if nslash == 2 {
|
||||||
return v[i:]
|
return false // did not match above
|
||||||
}
|
}
|
||||||
|
segmentEnd, subsegmentEnd = i, i // reset
|
||||||
|
case '-', '.':
|
||||||
|
if match(i+1, subsegmentEnd) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
subsegmentEnd = i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return v
|
return match(0, segmentEnd) || match(0, subsegmentEnd)
|
||||||
}
|
}
|
||||||
|
|
||||||
type visitFn func(node ast.Node) ast.Visitor
|
type visitFn func(node ast.Node) ast.Visitor
|
||||||
|
|
|
@ -265,9 +265,7 @@ func (r *ModuleResolver) initAllMods() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if mod.Dir == "" {
|
if mod.Dir == "" {
|
||||||
if r.env.Logf != nil {
|
r.env.logf("module %v has not been downloaded and will be ignored", mod.Path)
|
||||||
r.env.Logf("module %v has not been downloaded and will be ignored", mod.Path)
|
|
||||||
}
|
|
||||||
// Can't do anything with a module that's not downloaded.
|
// Can't do anything with a module that's not downloaded.
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -766,9 +764,7 @@ func (r *ModuleResolver) scanDirForPackage(root gopathwalk.Root, dir string) dir
|
||||||
}
|
}
|
||||||
modPath, err := module.UnescapePath(filepath.ToSlash(matches[1]))
|
modPath, err := module.UnescapePath(filepath.ToSlash(matches[1]))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if r.env.Logf != nil {
|
r.env.logf("decoding module cache path %q: %v", subdir, err)
|
||||||
r.env.Logf("decoding module cache path %q: %v", subdir, err)
|
|
||||||
}
|
|
||||||
return directoryPackageInfo{
|
return directoryPackageInfo{
|
||||||
status: directoryScanned,
|
status: directoryScanned,
|
||||||
err: fmt.Errorf("decoding module cache path %q: %v", subdir, err),
|
err: fmt.Errorf("decoding module cache path %q: %v", subdir, err),
|
||||||
|
|
|
@ -23,6 +23,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"ErrWriteAfterClose", Var, 0},
|
{"ErrWriteAfterClose", Var, 0},
|
||||||
{"ErrWriteTooLong", Var, 0},
|
{"ErrWriteTooLong", Var, 0},
|
||||||
{"FileInfoHeader", Func, 1},
|
{"FileInfoHeader", Func, 1},
|
||||||
|
{"FileInfoNames", Type, 23},
|
||||||
{"Format", Type, 10},
|
{"Format", Type, 10},
|
||||||
{"FormatGNU", Const, 10},
|
{"FormatGNU", Const, 10},
|
||||||
{"FormatPAX", Const, 10},
|
{"FormatPAX", Const, 10},
|
||||||
|
@ -820,6 +821,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"(*ConnectionState).ExportKeyingMaterial", Method, 11},
|
{"(*ConnectionState).ExportKeyingMaterial", Method, 11},
|
||||||
{"(*Dialer).Dial", Method, 15},
|
{"(*Dialer).Dial", Method, 15},
|
||||||
{"(*Dialer).DialContext", Method, 15},
|
{"(*Dialer).DialContext", Method, 15},
|
||||||
|
{"(*ECHRejectionError).Error", Method, 23},
|
||||||
{"(*QUICConn).Close", Method, 21},
|
{"(*QUICConn).Close", Method, 21},
|
||||||
{"(*QUICConn).ConnectionState", Method, 21},
|
{"(*QUICConn).ConnectionState", Method, 21},
|
||||||
{"(*QUICConn).HandleData", Method, 21},
|
{"(*QUICConn).HandleData", Method, 21},
|
||||||
|
@ -827,6 +829,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"(*QUICConn).SendSessionTicket", Method, 21},
|
{"(*QUICConn).SendSessionTicket", Method, 21},
|
||||||
{"(*QUICConn).SetTransportParameters", Method, 21},
|
{"(*QUICConn).SetTransportParameters", Method, 21},
|
||||||
{"(*QUICConn).Start", Method, 21},
|
{"(*QUICConn).Start", Method, 21},
|
||||||
|
{"(*QUICConn).StoreSession", Method, 23},
|
||||||
{"(*SessionState).Bytes", Method, 21},
|
{"(*SessionState).Bytes", Method, 21},
|
||||||
{"(AlertError).Error", Method, 21},
|
{"(AlertError).Error", Method, 21},
|
||||||
{"(ClientAuthType).String", Method, 15},
|
{"(ClientAuthType).String", Method, 15},
|
||||||
|
@ -877,6 +880,8 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"Config.ClientSessionCache", Field, 3},
|
{"Config.ClientSessionCache", Field, 3},
|
||||||
{"Config.CurvePreferences", Field, 3},
|
{"Config.CurvePreferences", Field, 3},
|
||||||
{"Config.DynamicRecordSizingDisabled", Field, 7},
|
{"Config.DynamicRecordSizingDisabled", Field, 7},
|
||||||
|
{"Config.EncryptedClientHelloConfigList", Field, 23},
|
||||||
|
{"Config.EncryptedClientHelloRejectionVerify", Field, 23},
|
||||||
{"Config.GetCertificate", Field, 4},
|
{"Config.GetCertificate", Field, 4},
|
||||||
{"Config.GetClientCertificate", Field, 8},
|
{"Config.GetClientCertificate", Field, 8},
|
||||||
{"Config.GetConfigForClient", Field, 8},
|
{"Config.GetConfigForClient", Field, 8},
|
||||||
|
@ -902,6 +907,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"ConnectionState", Type, 0},
|
{"ConnectionState", Type, 0},
|
||||||
{"ConnectionState.CipherSuite", Field, 0},
|
{"ConnectionState.CipherSuite", Field, 0},
|
||||||
{"ConnectionState.DidResume", Field, 1},
|
{"ConnectionState.DidResume", Field, 1},
|
||||||
|
{"ConnectionState.ECHAccepted", Field, 23},
|
||||||
{"ConnectionState.HandshakeComplete", Field, 0},
|
{"ConnectionState.HandshakeComplete", Field, 0},
|
||||||
{"ConnectionState.NegotiatedProtocol", Field, 0},
|
{"ConnectionState.NegotiatedProtocol", Field, 0},
|
||||||
{"ConnectionState.NegotiatedProtocolIsMutual", Field, 0},
|
{"ConnectionState.NegotiatedProtocolIsMutual", Field, 0},
|
||||||
|
@ -925,6 +931,8 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"ECDSAWithP384AndSHA384", Const, 8},
|
{"ECDSAWithP384AndSHA384", Const, 8},
|
||||||
{"ECDSAWithP521AndSHA512", Const, 8},
|
{"ECDSAWithP521AndSHA512", Const, 8},
|
||||||
{"ECDSAWithSHA1", Const, 10},
|
{"ECDSAWithSHA1", Const, 10},
|
||||||
|
{"ECHRejectionError", Type, 23},
|
||||||
|
{"ECHRejectionError.RetryConfigList", Field, 23},
|
||||||
{"Ed25519", Const, 13},
|
{"Ed25519", Const, 13},
|
||||||
{"InsecureCipherSuites", Func, 14},
|
{"InsecureCipherSuites", Func, 14},
|
||||||
{"Listen", Func, 0},
|
{"Listen", Func, 0},
|
||||||
|
@ -943,6 +951,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"ParseSessionState", Func, 21},
|
{"ParseSessionState", Func, 21},
|
||||||
{"QUICClient", Func, 21},
|
{"QUICClient", Func, 21},
|
||||||
{"QUICConfig", Type, 21},
|
{"QUICConfig", Type, 21},
|
||||||
|
{"QUICConfig.EnableStoreSessionEvent", Field, 23},
|
||||||
{"QUICConfig.TLSConfig", Field, 21},
|
{"QUICConfig.TLSConfig", Field, 21},
|
||||||
{"QUICConn", Type, 21},
|
{"QUICConn", Type, 21},
|
||||||
{"QUICEncryptionLevel", Type, 21},
|
{"QUICEncryptionLevel", Type, 21},
|
||||||
|
@ -954,16 +963,20 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"QUICEvent.Data", Field, 21},
|
{"QUICEvent.Data", Field, 21},
|
||||||
{"QUICEvent.Kind", Field, 21},
|
{"QUICEvent.Kind", Field, 21},
|
||||||
{"QUICEvent.Level", Field, 21},
|
{"QUICEvent.Level", Field, 21},
|
||||||
|
{"QUICEvent.SessionState", Field, 23},
|
||||||
{"QUICEvent.Suite", Field, 21},
|
{"QUICEvent.Suite", Field, 21},
|
||||||
{"QUICEventKind", Type, 21},
|
{"QUICEventKind", Type, 21},
|
||||||
{"QUICHandshakeDone", Const, 21},
|
{"QUICHandshakeDone", Const, 21},
|
||||||
{"QUICNoEvent", Const, 21},
|
{"QUICNoEvent", Const, 21},
|
||||||
{"QUICRejectedEarlyData", Const, 21},
|
{"QUICRejectedEarlyData", Const, 21},
|
||||||
|
{"QUICResumeSession", Const, 23},
|
||||||
{"QUICServer", Func, 21},
|
{"QUICServer", Func, 21},
|
||||||
{"QUICSessionTicketOptions", Type, 21},
|
{"QUICSessionTicketOptions", Type, 21},
|
||||||
{"QUICSessionTicketOptions.EarlyData", Field, 21},
|
{"QUICSessionTicketOptions.EarlyData", Field, 21},
|
||||||
|
{"QUICSessionTicketOptions.Extra", Field, 23},
|
||||||
{"QUICSetReadSecret", Const, 21},
|
{"QUICSetReadSecret", Const, 21},
|
||||||
{"QUICSetWriteSecret", Const, 21},
|
{"QUICSetWriteSecret", Const, 21},
|
||||||
|
{"QUICStoreSession", Const, 23},
|
||||||
{"QUICTransportParameters", Const, 21},
|
{"QUICTransportParameters", Const, 21},
|
||||||
{"QUICTransportParametersRequired", Const, 21},
|
{"QUICTransportParametersRequired", Const, 21},
|
||||||
{"QUICWriteData", Const, 21},
|
{"QUICWriteData", Const, 21},
|
||||||
|
@ -1036,6 +1049,8 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"(*Certificate).Verify", Method, 0},
|
{"(*Certificate).Verify", Method, 0},
|
||||||
{"(*Certificate).VerifyHostname", Method, 0},
|
{"(*Certificate).VerifyHostname", Method, 0},
|
||||||
{"(*CertificateRequest).CheckSignature", Method, 5},
|
{"(*CertificateRequest).CheckSignature", Method, 5},
|
||||||
|
{"(*OID).UnmarshalBinary", Method, 23},
|
||||||
|
{"(*OID).UnmarshalText", Method, 23},
|
||||||
{"(*RevocationList).CheckSignatureFrom", Method, 19},
|
{"(*RevocationList).CheckSignatureFrom", Method, 19},
|
||||||
{"(CertificateInvalidError).Error", Method, 0},
|
{"(CertificateInvalidError).Error", Method, 0},
|
||||||
{"(ConstraintViolationError).Error", Method, 0},
|
{"(ConstraintViolationError).Error", Method, 0},
|
||||||
|
@ -1043,6 +1058,8 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"(InsecureAlgorithmError).Error", Method, 6},
|
{"(InsecureAlgorithmError).Error", Method, 6},
|
||||||
{"(OID).Equal", Method, 22},
|
{"(OID).Equal", Method, 22},
|
||||||
{"(OID).EqualASN1OID", Method, 22},
|
{"(OID).EqualASN1OID", Method, 22},
|
||||||
|
{"(OID).MarshalBinary", Method, 23},
|
||||||
|
{"(OID).MarshalText", Method, 23},
|
||||||
{"(OID).String", Method, 22},
|
{"(OID).String", Method, 22},
|
||||||
{"(PublicKeyAlgorithm).String", Method, 10},
|
{"(PublicKeyAlgorithm).String", Method, 10},
|
||||||
{"(SignatureAlgorithm).String", Method, 6},
|
{"(SignatureAlgorithm).String", Method, 6},
|
||||||
|
@ -1196,6 +1213,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"ParseCertificates", Func, 0},
|
{"ParseCertificates", Func, 0},
|
||||||
{"ParseDERCRL", Func, 0},
|
{"ParseDERCRL", Func, 0},
|
||||||
{"ParseECPrivateKey", Func, 1},
|
{"ParseECPrivateKey", Func, 1},
|
||||||
|
{"ParseOID", Func, 23},
|
||||||
{"ParsePKCS1PrivateKey", Func, 0},
|
{"ParsePKCS1PrivateKey", Func, 0},
|
||||||
{"ParsePKCS1PublicKey", Func, 10},
|
{"ParsePKCS1PublicKey", Func, 10},
|
||||||
{"ParsePKCS8PrivateKey", Func, 0},
|
{"ParsePKCS8PrivateKey", Func, 0},
|
||||||
|
@ -2541,6 +2559,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"PT_NOTE", Const, 0},
|
{"PT_NOTE", Const, 0},
|
||||||
{"PT_NULL", Const, 0},
|
{"PT_NULL", Const, 0},
|
||||||
{"PT_OPENBSD_BOOTDATA", Const, 16},
|
{"PT_OPENBSD_BOOTDATA", Const, 16},
|
||||||
|
{"PT_OPENBSD_NOBTCFI", Const, 23},
|
||||||
{"PT_OPENBSD_RANDOMIZE", Const, 16},
|
{"PT_OPENBSD_RANDOMIZE", Const, 16},
|
||||||
{"PT_OPENBSD_WXNEEDED", Const, 16},
|
{"PT_OPENBSD_WXNEEDED", Const, 16},
|
||||||
{"PT_PAX_FLAGS", Const, 16},
|
{"PT_PAX_FLAGS", Const, 16},
|
||||||
|
@ -3620,13 +3639,16 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"STT_COMMON", Const, 0},
|
{"STT_COMMON", Const, 0},
|
||||||
{"STT_FILE", Const, 0},
|
{"STT_FILE", Const, 0},
|
||||||
{"STT_FUNC", Const, 0},
|
{"STT_FUNC", Const, 0},
|
||||||
|
{"STT_GNU_IFUNC", Const, 23},
|
||||||
{"STT_HIOS", Const, 0},
|
{"STT_HIOS", Const, 0},
|
||||||
{"STT_HIPROC", Const, 0},
|
{"STT_HIPROC", Const, 0},
|
||||||
{"STT_LOOS", Const, 0},
|
{"STT_LOOS", Const, 0},
|
||||||
{"STT_LOPROC", Const, 0},
|
{"STT_LOPROC", Const, 0},
|
||||||
{"STT_NOTYPE", Const, 0},
|
{"STT_NOTYPE", Const, 0},
|
||||||
{"STT_OBJECT", Const, 0},
|
{"STT_OBJECT", Const, 0},
|
||||||
|
{"STT_RELC", Const, 23},
|
||||||
{"STT_SECTION", Const, 0},
|
{"STT_SECTION", Const, 0},
|
||||||
|
{"STT_SRELC", Const, 23},
|
||||||
{"STT_TLS", Const, 0},
|
{"STT_TLS", Const, 0},
|
||||||
{"STV_DEFAULT", Const, 0},
|
{"STV_DEFAULT", Const, 0},
|
||||||
{"STV_HIDDEN", Const, 0},
|
{"STV_HIDDEN", Const, 0},
|
||||||
|
@ -4544,11 +4566,14 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"URLEncoding", Var, 0},
|
{"URLEncoding", Var, 0},
|
||||||
},
|
},
|
||||||
"encoding/binary": {
|
"encoding/binary": {
|
||||||
|
{"Append", Func, 23},
|
||||||
{"AppendByteOrder", Type, 19},
|
{"AppendByteOrder", Type, 19},
|
||||||
{"AppendUvarint", Func, 19},
|
{"AppendUvarint", Func, 19},
|
||||||
{"AppendVarint", Func, 19},
|
{"AppendVarint", Func, 19},
|
||||||
{"BigEndian", Var, 0},
|
{"BigEndian", Var, 0},
|
||||||
{"ByteOrder", Type, 0},
|
{"ByteOrder", Type, 0},
|
||||||
|
{"Decode", Func, 23},
|
||||||
|
{"Encode", Func, 23},
|
||||||
{"LittleEndian", Var, 0},
|
{"LittleEndian", Var, 0},
|
||||||
{"MaxVarintLen16", Const, 0},
|
{"MaxVarintLen16", Const, 0},
|
||||||
{"MaxVarintLen32", Const, 0},
|
{"MaxVarintLen32", Const, 0},
|
||||||
|
@ -5308,6 +5333,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"ParenExpr.Rparen", Field, 0},
|
{"ParenExpr.Rparen", Field, 0},
|
||||||
{"ParenExpr.X", Field, 0},
|
{"ParenExpr.X", Field, 0},
|
||||||
{"Pkg", Const, 0},
|
{"Pkg", Const, 0},
|
||||||
|
{"Preorder", Func, 23},
|
||||||
{"Print", Func, 0},
|
{"Print", Func, 0},
|
||||||
{"RECV", Const, 0},
|
{"RECV", Const, 0},
|
||||||
{"RangeStmt", Type, 0},
|
{"RangeStmt", Type, 0},
|
||||||
|
@ -5898,7 +5924,12 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
},
|
},
|
||||||
"go/types": {
|
"go/types": {
|
||||||
{"(*Alias).Obj", Method, 22},
|
{"(*Alias).Obj", Method, 22},
|
||||||
|
{"(*Alias).Origin", Method, 23},
|
||||||
|
{"(*Alias).Rhs", Method, 23},
|
||||||
|
{"(*Alias).SetTypeParams", Method, 23},
|
||||||
{"(*Alias).String", Method, 22},
|
{"(*Alias).String", Method, 22},
|
||||||
|
{"(*Alias).TypeArgs", Method, 23},
|
||||||
|
{"(*Alias).TypeParams", Method, 23},
|
||||||
{"(*Alias).Underlying", Method, 22},
|
{"(*Alias).Underlying", Method, 22},
|
||||||
{"(*ArgumentError).Error", Method, 18},
|
{"(*ArgumentError).Error", Method, 18},
|
||||||
{"(*ArgumentError).Unwrap", Method, 18},
|
{"(*ArgumentError).Unwrap", Method, 18},
|
||||||
|
@ -5943,6 +5974,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"(*Func).Pkg", Method, 5},
|
{"(*Func).Pkg", Method, 5},
|
||||||
{"(*Func).Pos", Method, 5},
|
{"(*Func).Pos", Method, 5},
|
||||||
{"(*Func).Scope", Method, 5},
|
{"(*Func).Scope", Method, 5},
|
||||||
|
{"(*Func).Signature", Method, 23},
|
||||||
{"(*Func).String", Method, 5},
|
{"(*Func).String", Method, 5},
|
||||||
{"(*Func).Type", Method, 5},
|
{"(*Func).Type", Method, 5},
|
||||||
{"(*Info).ObjectOf", Method, 5},
|
{"(*Info).ObjectOf", Method, 5},
|
||||||
|
@ -6992,6 +7024,12 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"TempFile", Func, 0},
|
{"TempFile", Func, 0},
|
||||||
{"WriteFile", Func, 0},
|
{"WriteFile", Func, 0},
|
||||||
},
|
},
|
||||||
|
"iter": {
|
||||||
|
{"Pull", Func, 23},
|
||||||
|
{"Pull2", Func, 23},
|
||||||
|
{"Seq", Type, 23},
|
||||||
|
{"Seq2", Type, 23},
|
||||||
|
},
|
||||||
"log": {
|
"log": {
|
||||||
{"(*Logger).Fatal", Method, 0},
|
{"(*Logger).Fatal", Method, 0},
|
||||||
{"(*Logger).Fatalf", Method, 0},
|
{"(*Logger).Fatalf", Method, 0},
|
||||||
|
@ -7222,11 +7260,16 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"Writer", Type, 0},
|
{"Writer", Type, 0},
|
||||||
},
|
},
|
||||||
"maps": {
|
"maps": {
|
||||||
|
{"All", Func, 23},
|
||||||
{"Clone", Func, 21},
|
{"Clone", Func, 21},
|
||||||
|
{"Collect", Func, 23},
|
||||||
{"Copy", Func, 21},
|
{"Copy", Func, 21},
|
||||||
{"DeleteFunc", Func, 21},
|
{"DeleteFunc", Func, 21},
|
||||||
{"Equal", Func, 21},
|
{"Equal", Func, 21},
|
||||||
{"EqualFunc", Func, 21},
|
{"EqualFunc", Func, 21},
|
||||||
|
{"Insert", Func, 23},
|
||||||
|
{"Keys", Func, 23},
|
||||||
|
{"Values", Func, 23},
|
||||||
},
|
},
|
||||||
"math": {
|
"math": {
|
||||||
{"Abs", Func, 0},
|
{"Abs", Func, 0},
|
||||||
|
@ -7617,6 +7660,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
},
|
},
|
||||||
"math/rand/v2": {
|
"math/rand/v2": {
|
||||||
{"(*ChaCha8).MarshalBinary", Method, 22},
|
{"(*ChaCha8).MarshalBinary", Method, 22},
|
||||||
|
{"(*ChaCha8).Read", Method, 23},
|
||||||
{"(*ChaCha8).Seed", Method, 22},
|
{"(*ChaCha8).Seed", Method, 22},
|
||||||
{"(*ChaCha8).Uint64", Method, 22},
|
{"(*ChaCha8).Uint64", Method, 22},
|
||||||
{"(*ChaCha8).UnmarshalBinary", Method, 22},
|
{"(*ChaCha8).UnmarshalBinary", Method, 22},
|
||||||
|
@ -7636,6 +7680,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"(*Rand).NormFloat64", Method, 22},
|
{"(*Rand).NormFloat64", Method, 22},
|
||||||
{"(*Rand).Perm", Method, 22},
|
{"(*Rand).Perm", Method, 22},
|
||||||
{"(*Rand).Shuffle", Method, 22},
|
{"(*Rand).Shuffle", Method, 22},
|
||||||
|
{"(*Rand).Uint", Method, 23},
|
||||||
{"(*Rand).Uint32", Method, 22},
|
{"(*Rand).Uint32", Method, 22},
|
||||||
{"(*Rand).Uint32N", Method, 22},
|
{"(*Rand).Uint32N", Method, 22},
|
||||||
{"(*Rand).Uint64", Method, 22},
|
{"(*Rand).Uint64", Method, 22},
|
||||||
|
@ -7663,6 +7708,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"Rand", Type, 22},
|
{"Rand", Type, 22},
|
||||||
{"Shuffle", Func, 22},
|
{"Shuffle", Func, 22},
|
||||||
{"Source", Type, 22},
|
{"Source", Type, 22},
|
||||||
|
{"Uint", Func, 23},
|
||||||
{"Uint32", Func, 22},
|
{"Uint32", Func, 22},
|
||||||
{"Uint32N", Func, 22},
|
{"Uint32N", Func, 22},
|
||||||
{"Uint64", Func, 22},
|
{"Uint64", Func, 22},
|
||||||
|
@ -7743,6 +7789,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"(*DNSError).Error", Method, 0},
|
{"(*DNSError).Error", Method, 0},
|
||||||
{"(*DNSError).Temporary", Method, 0},
|
{"(*DNSError).Temporary", Method, 0},
|
||||||
{"(*DNSError).Timeout", Method, 0},
|
{"(*DNSError).Timeout", Method, 0},
|
||||||
|
{"(*DNSError).Unwrap", Method, 23},
|
||||||
{"(*Dialer).Dial", Method, 1},
|
{"(*Dialer).Dial", Method, 1},
|
||||||
{"(*Dialer).DialContext", Method, 7},
|
{"(*Dialer).DialContext", Method, 7},
|
||||||
{"(*Dialer).MultipathTCP", Method, 21},
|
{"(*Dialer).MultipathTCP", Method, 21},
|
||||||
|
@ -7809,6 +7856,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"(*TCPConn).RemoteAddr", Method, 0},
|
{"(*TCPConn).RemoteAddr", Method, 0},
|
||||||
{"(*TCPConn).SetDeadline", Method, 0},
|
{"(*TCPConn).SetDeadline", Method, 0},
|
||||||
{"(*TCPConn).SetKeepAlive", Method, 0},
|
{"(*TCPConn).SetKeepAlive", Method, 0},
|
||||||
|
{"(*TCPConn).SetKeepAliveConfig", Method, 23},
|
||||||
{"(*TCPConn).SetKeepAlivePeriod", Method, 2},
|
{"(*TCPConn).SetKeepAlivePeriod", Method, 2},
|
||||||
{"(*TCPConn).SetLinger", Method, 0},
|
{"(*TCPConn).SetLinger", Method, 0},
|
||||||
{"(*TCPConn).SetNoDelay", Method, 0},
|
{"(*TCPConn).SetNoDelay", Method, 0},
|
||||||
|
@ -7922,6 +7970,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"DNSError.IsTimeout", Field, 0},
|
{"DNSError.IsTimeout", Field, 0},
|
||||||
{"DNSError.Name", Field, 0},
|
{"DNSError.Name", Field, 0},
|
||||||
{"DNSError.Server", Field, 0},
|
{"DNSError.Server", Field, 0},
|
||||||
|
{"DNSError.UnwrapErr", Field, 23},
|
||||||
{"DefaultResolver", Var, 8},
|
{"DefaultResolver", Var, 8},
|
||||||
{"Dial", Func, 0},
|
{"Dial", Func, 0},
|
||||||
{"DialIP", Func, 0},
|
{"DialIP", Func, 0},
|
||||||
|
@ -7937,6 +7986,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"Dialer.DualStack", Field, 2},
|
{"Dialer.DualStack", Field, 2},
|
||||||
{"Dialer.FallbackDelay", Field, 5},
|
{"Dialer.FallbackDelay", Field, 5},
|
||||||
{"Dialer.KeepAlive", Field, 3},
|
{"Dialer.KeepAlive", Field, 3},
|
||||||
|
{"Dialer.KeepAliveConfig", Field, 23},
|
||||||
{"Dialer.LocalAddr", Field, 1},
|
{"Dialer.LocalAddr", Field, 1},
|
||||||
{"Dialer.Resolver", Field, 8},
|
{"Dialer.Resolver", Field, 8},
|
||||||
{"Dialer.Timeout", Field, 1},
|
{"Dialer.Timeout", Field, 1},
|
||||||
|
@ -7989,10 +8039,16 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"Interfaces", Func, 0},
|
{"Interfaces", Func, 0},
|
||||||
{"InvalidAddrError", Type, 0},
|
{"InvalidAddrError", Type, 0},
|
||||||
{"JoinHostPort", Func, 0},
|
{"JoinHostPort", Func, 0},
|
||||||
|
{"KeepAliveConfig", Type, 23},
|
||||||
|
{"KeepAliveConfig.Count", Field, 23},
|
||||||
|
{"KeepAliveConfig.Enable", Field, 23},
|
||||||
|
{"KeepAliveConfig.Idle", Field, 23},
|
||||||
|
{"KeepAliveConfig.Interval", Field, 23},
|
||||||
{"Listen", Func, 0},
|
{"Listen", Func, 0},
|
||||||
{"ListenConfig", Type, 11},
|
{"ListenConfig", Type, 11},
|
||||||
{"ListenConfig.Control", Field, 11},
|
{"ListenConfig.Control", Field, 11},
|
||||||
{"ListenConfig.KeepAlive", Field, 13},
|
{"ListenConfig.KeepAlive", Field, 13},
|
||||||
|
{"ListenConfig.KeepAliveConfig", Field, 23},
|
||||||
{"ListenIP", Func, 0},
|
{"ListenIP", Func, 0},
|
||||||
{"ListenMulticastUDP", Func, 0},
|
{"ListenMulticastUDP", Func, 0},
|
||||||
{"ListenPacket", Func, 0},
|
{"ListenPacket", Func, 0},
|
||||||
|
@ -8081,6 +8137,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"(*Request).Context", Method, 7},
|
{"(*Request).Context", Method, 7},
|
||||||
{"(*Request).Cookie", Method, 0},
|
{"(*Request).Cookie", Method, 0},
|
||||||
{"(*Request).Cookies", Method, 0},
|
{"(*Request).Cookies", Method, 0},
|
||||||
|
{"(*Request).CookiesNamed", Method, 23},
|
||||||
{"(*Request).FormFile", Method, 0},
|
{"(*Request).FormFile", Method, 0},
|
||||||
{"(*Request).FormValue", Method, 0},
|
{"(*Request).FormValue", Method, 0},
|
||||||
{"(*Request).MultipartReader", Method, 0},
|
{"(*Request).MultipartReader", Method, 0},
|
||||||
|
@ -8148,7 +8205,9 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"Cookie.HttpOnly", Field, 0},
|
{"Cookie.HttpOnly", Field, 0},
|
||||||
{"Cookie.MaxAge", Field, 0},
|
{"Cookie.MaxAge", Field, 0},
|
||||||
{"Cookie.Name", Field, 0},
|
{"Cookie.Name", Field, 0},
|
||||||
|
{"Cookie.Partitioned", Field, 23},
|
||||||
{"Cookie.Path", Field, 0},
|
{"Cookie.Path", Field, 0},
|
||||||
|
{"Cookie.Quoted", Field, 23},
|
||||||
{"Cookie.Raw", Field, 0},
|
{"Cookie.Raw", Field, 0},
|
||||||
{"Cookie.RawExpires", Field, 0},
|
{"Cookie.RawExpires", Field, 0},
|
||||||
{"Cookie.SameSite", Field, 11},
|
{"Cookie.SameSite", Field, 11},
|
||||||
|
@ -8225,7 +8284,9 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"NoBody", Var, 8},
|
{"NoBody", Var, 8},
|
||||||
{"NotFound", Func, 0},
|
{"NotFound", Func, 0},
|
||||||
{"NotFoundHandler", Func, 0},
|
{"NotFoundHandler", Func, 0},
|
||||||
|
{"ParseCookie", Func, 23},
|
||||||
{"ParseHTTPVersion", Func, 0},
|
{"ParseHTTPVersion", Func, 0},
|
||||||
|
{"ParseSetCookie", Func, 23},
|
||||||
{"ParseTime", Func, 1},
|
{"ParseTime", Func, 1},
|
||||||
{"Post", Func, 0},
|
{"Post", Func, 0},
|
||||||
{"PostForm", Func, 0},
|
{"PostForm", Func, 0},
|
||||||
|
@ -8252,6 +8313,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"Request.Host", Field, 0},
|
{"Request.Host", Field, 0},
|
||||||
{"Request.Method", Field, 0},
|
{"Request.Method", Field, 0},
|
||||||
{"Request.MultipartForm", Field, 0},
|
{"Request.MultipartForm", Field, 0},
|
||||||
|
{"Request.Pattern", Field, 23},
|
||||||
{"Request.PostForm", Field, 1},
|
{"Request.PostForm", Field, 1},
|
||||||
{"Request.Proto", Field, 0},
|
{"Request.Proto", Field, 0},
|
||||||
{"Request.ProtoMajor", Field, 0},
|
{"Request.ProtoMajor", Field, 0},
|
||||||
|
@ -8453,6 +8515,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"DefaultRemoteAddr", Const, 0},
|
{"DefaultRemoteAddr", Const, 0},
|
||||||
{"NewRecorder", Func, 0},
|
{"NewRecorder", Func, 0},
|
||||||
{"NewRequest", Func, 7},
|
{"NewRequest", Func, 7},
|
||||||
|
{"NewRequestWithContext", Func, 23},
|
||||||
{"NewServer", Func, 0},
|
{"NewServer", Func, 0},
|
||||||
{"NewTLSServer", Func, 0},
|
{"NewTLSServer", Func, 0},
|
||||||
{"NewUnstartedServer", Func, 0},
|
{"NewUnstartedServer", Func, 0},
|
||||||
|
@ -8917,6 +8980,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"Chown", Func, 0},
|
{"Chown", Func, 0},
|
||||||
{"Chtimes", Func, 0},
|
{"Chtimes", Func, 0},
|
||||||
{"Clearenv", Func, 0},
|
{"Clearenv", Func, 0},
|
||||||
|
{"CopyFS", Func, 23},
|
||||||
{"Create", Func, 0},
|
{"Create", Func, 0},
|
||||||
{"CreateTemp", Func, 16},
|
{"CreateTemp", Func, 16},
|
||||||
{"DevNull", Const, 0},
|
{"DevNull", Const, 0},
|
||||||
|
@ -9150,6 +9214,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"IsLocal", Func, 20},
|
{"IsLocal", Func, 20},
|
||||||
{"Join", Func, 0},
|
{"Join", Func, 0},
|
||||||
{"ListSeparator", Const, 0},
|
{"ListSeparator", Const, 0},
|
||||||
|
{"Localize", Func, 23},
|
||||||
{"Match", Func, 0},
|
{"Match", Func, 0},
|
||||||
{"Rel", Func, 0},
|
{"Rel", Func, 0},
|
||||||
{"Separator", Const, 0},
|
{"Separator", Const, 0},
|
||||||
|
@ -9232,6 +9297,8 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"(Value).Pointer", Method, 0},
|
{"(Value).Pointer", Method, 0},
|
||||||
{"(Value).Recv", Method, 0},
|
{"(Value).Recv", Method, 0},
|
||||||
{"(Value).Send", Method, 0},
|
{"(Value).Send", Method, 0},
|
||||||
|
{"(Value).Seq", Method, 23},
|
||||||
|
{"(Value).Seq2", Method, 23},
|
||||||
{"(Value).Set", Method, 0},
|
{"(Value).Set", Method, 0},
|
||||||
{"(Value).SetBool", Method, 0},
|
{"(Value).SetBool", Method, 0},
|
||||||
{"(Value).SetBytes", Method, 0},
|
{"(Value).SetBytes", Method, 0},
|
||||||
|
@ -9314,6 +9381,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"SelectSend", Const, 1},
|
{"SelectSend", Const, 1},
|
||||||
{"SendDir", Const, 0},
|
{"SendDir", Const, 0},
|
||||||
{"Slice", Const, 0},
|
{"Slice", Const, 0},
|
||||||
|
{"SliceAt", Func, 23},
|
||||||
{"SliceHeader", Type, 0},
|
{"SliceHeader", Type, 0},
|
||||||
{"SliceHeader.Cap", Field, 0},
|
{"SliceHeader.Cap", Field, 0},
|
||||||
{"SliceHeader.Data", Field, 0},
|
{"SliceHeader.Data", Field, 0},
|
||||||
|
@ -9655,6 +9723,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"BuildSetting", Type, 18},
|
{"BuildSetting", Type, 18},
|
||||||
{"BuildSetting.Key", Field, 18},
|
{"BuildSetting.Key", Field, 18},
|
||||||
{"BuildSetting.Value", Field, 18},
|
{"BuildSetting.Value", Field, 18},
|
||||||
|
{"CrashOptions", Type, 23},
|
||||||
{"FreeOSMemory", Func, 1},
|
{"FreeOSMemory", Func, 1},
|
||||||
{"GCStats", Type, 1},
|
{"GCStats", Type, 1},
|
||||||
{"GCStats.LastGC", Field, 1},
|
{"GCStats.LastGC", Field, 1},
|
||||||
|
@ -9672,6 +9741,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"PrintStack", Func, 0},
|
{"PrintStack", Func, 0},
|
||||||
{"ReadBuildInfo", Func, 12},
|
{"ReadBuildInfo", Func, 12},
|
||||||
{"ReadGCStats", Func, 1},
|
{"ReadGCStats", Func, 1},
|
||||||
|
{"SetCrashOutput", Func, 23},
|
||||||
{"SetGCPercent", Func, 1},
|
{"SetGCPercent", Func, 1},
|
||||||
{"SetMaxStack", Func, 2},
|
{"SetMaxStack", Func, 2},
|
||||||
{"SetMaxThreads", Func, 2},
|
{"SetMaxThreads", Func, 2},
|
||||||
|
@ -9742,10 +9812,15 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"WithRegion", Func, 11},
|
{"WithRegion", Func, 11},
|
||||||
},
|
},
|
||||||
"slices": {
|
"slices": {
|
||||||
|
{"All", Func, 23},
|
||||||
|
{"AppendSeq", Func, 23},
|
||||||
|
{"Backward", Func, 23},
|
||||||
{"BinarySearch", Func, 21},
|
{"BinarySearch", Func, 21},
|
||||||
{"BinarySearchFunc", Func, 21},
|
{"BinarySearchFunc", Func, 21},
|
||||||
|
{"Chunk", Func, 23},
|
||||||
{"Clip", Func, 21},
|
{"Clip", Func, 21},
|
||||||
{"Clone", Func, 21},
|
{"Clone", Func, 21},
|
||||||
|
{"Collect", Func, 23},
|
||||||
{"Compact", Func, 21},
|
{"Compact", Func, 21},
|
||||||
{"CompactFunc", Func, 21},
|
{"CompactFunc", Func, 21},
|
||||||
{"Compare", Func, 21},
|
{"Compare", Func, 21},
|
||||||
|
@ -9767,11 +9842,16 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"MaxFunc", Func, 21},
|
{"MaxFunc", Func, 21},
|
||||||
{"Min", Func, 21},
|
{"Min", Func, 21},
|
||||||
{"MinFunc", Func, 21},
|
{"MinFunc", Func, 21},
|
||||||
|
{"Repeat", Func, 23},
|
||||||
{"Replace", Func, 21},
|
{"Replace", Func, 21},
|
||||||
{"Reverse", Func, 21},
|
{"Reverse", Func, 21},
|
||||||
{"Sort", Func, 21},
|
{"Sort", Func, 21},
|
||||||
{"SortFunc", Func, 21},
|
{"SortFunc", Func, 21},
|
||||||
{"SortStableFunc", Func, 21},
|
{"SortStableFunc", Func, 21},
|
||||||
|
{"Sorted", Func, 23},
|
||||||
|
{"SortedFunc", Func, 23},
|
||||||
|
{"SortedStableFunc", Func, 23},
|
||||||
|
{"Values", Func, 23},
|
||||||
},
|
},
|
||||||
"sort": {
|
"sort": {
|
||||||
{"(Float64Slice).Len", Method, 0},
|
{"(Float64Slice).Len", Method, 0},
|
||||||
|
@ -9936,10 +10016,14 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"TrimSpace", Func, 0},
|
{"TrimSpace", Func, 0},
|
||||||
{"TrimSuffix", Func, 1},
|
{"TrimSuffix", Func, 1},
|
||||||
},
|
},
|
||||||
|
"structs": {
|
||||||
|
{"HostLayout", Type, 23},
|
||||||
|
},
|
||||||
"sync": {
|
"sync": {
|
||||||
{"(*Cond).Broadcast", Method, 0},
|
{"(*Cond).Broadcast", Method, 0},
|
||||||
{"(*Cond).Signal", Method, 0},
|
{"(*Cond).Signal", Method, 0},
|
||||||
{"(*Cond).Wait", Method, 0},
|
{"(*Cond).Wait", Method, 0},
|
||||||
|
{"(*Map).Clear", Method, 23},
|
||||||
{"(*Map).CompareAndDelete", Method, 20},
|
{"(*Map).CompareAndDelete", Method, 20},
|
||||||
{"(*Map).CompareAndSwap", Method, 20},
|
{"(*Map).CompareAndSwap", Method, 20},
|
||||||
{"(*Map).Delete", Method, 9},
|
{"(*Map).Delete", Method, 9},
|
||||||
|
@ -9986,13 +10070,17 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"(*Bool).Store", Method, 19},
|
{"(*Bool).Store", Method, 19},
|
||||||
{"(*Bool).Swap", Method, 19},
|
{"(*Bool).Swap", Method, 19},
|
||||||
{"(*Int32).Add", Method, 19},
|
{"(*Int32).Add", Method, 19},
|
||||||
|
{"(*Int32).And", Method, 23},
|
||||||
{"(*Int32).CompareAndSwap", Method, 19},
|
{"(*Int32).CompareAndSwap", Method, 19},
|
||||||
{"(*Int32).Load", Method, 19},
|
{"(*Int32).Load", Method, 19},
|
||||||
|
{"(*Int32).Or", Method, 23},
|
||||||
{"(*Int32).Store", Method, 19},
|
{"(*Int32).Store", Method, 19},
|
||||||
{"(*Int32).Swap", Method, 19},
|
{"(*Int32).Swap", Method, 19},
|
||||||
{"(*Int64).Add", Method, 19},
|
{"(*Int64).Add", Method, 19},
|
||||||
|
{"(*Int64).And", Method, 23},
|
||||||
{"(*Int64).CompareAndSwap", Method, 19},
|
{"(*Int64).CompareAndSwap", Method, 19},
|
||||||
{"(*Int64).Load", Method, 19},
|
{"(*Int64).Load", Method, 19},
|
||||||
|
{"(*Int64).Or", Method, 23},
|
||||||
{"(*Int64).Store", Method, 19},
|
{"(*Int64).Store", Method, 19},
|
||||||
{"(*Int64).Swap", Method, 19},
|
{"(*Int64).Swap", Method, 19},
|
||||||
{"(*Pointer).CompareAndSwap", Method, 19},
|
{"(*Pointer).CompareAndSwap", Method, 19},
|
||||||
|
@ -10000,18 +10088,24 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"(*Pointer).Store", Method, 19},
|
{"(*Pointer).Store", Method, 19},
|
||||||
{"(*Pointer).Swap", Method, 19},
|
{"(*Pointer).Swap", Method, 19},
|
||||||
{"(*Uint32).Add", Method, 19},
|
{"(*Uint32).Add", Method, 19},
|
||||||
|
{"(*Uint32).And", Method, 23},
|
||||||
{"(*Uint32).CompareAndSwap", Method, 19},
|
{"(*Uint32).CompareAndSwap", Method, 19},
|
||||||
{"(*Uint32).Load", Method, 19},
|
{"(*Uint32).Load", Method, 19},
|
||||||
|
{"(*Uint32).Or", Method, 23},
|
||||||
{"(*Uint32).Store", Method, 19},
|
{"(*Uint32).Store", Method, 19},
|
||||||
{"(*Uint32).Swap", Method, 19},
|
{"(*Uint32).Swap", Method, 19},
|
||||||
{"(*Uint64).Add", Method, 19},
|
{"(*Uint64).Add", Method, 19},
|
||||||
|
{"(*Uint64).And", Method, 23},
|
||||||
{"(*Uint64).CompareAndSwap", Method, 19},
|
{"(*Uint64).CompareAndSwap", Method, 19},
|
||||||
{"(*Uint64).Load", Method, 19},
|
{"(*Uint64).Load", Method, 19},
|
||||||
|
{"(*Uint64).Or", Method, 23},
|
||||||
{"(*Uint64).Store", Method, 19},
|
{"(*Uint64).Store", Method, 19},
|
||||||
{"(*Uint64).Swap", Method, 19},
|
{"(*Uint64).Swap", Method, 19},
|
||||||
{"(*Uintptr).Add", Method, 19},
|
{"(*Uintptr).Add", Method, 19},
|
||||||
|
{"(*Uintptr).And", Method, 23},
|
||||||
{"(*Uintptr).CompareAndSwap", Method, 19},
|
{"(*Uintptr).CompareAndSwap", Method, 19},
|
||||||
{"(*Uintptr).Load", Method, 19},
|
{"(*Uintptr).Load", Method, 19},
|
||||||
|
{"(*Uintptr).Or", Method, 23},
|
||||||
{"(*Uintptr).Store", Method, 19},
|
{"(*Uintptr).Store", Method, 19},
|
||||||
{"(*Uintptr).Swap", Method, 19},
|
{"(*Uintptr).Swap", Method, 19},
|
||||||
{"(*Value).CompareAndSwap", Method, 17},
|
{"(*Value).CompareAndSwap", Method, 17},
|
||||||
|
@ -10023,6 +10117,11 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"AddUint32", Func, 0},
|
{"AddUint32", Func, 0},
|
||||||
{"AddUint64", Func, 0},
|
{"AddUint64", Func, 0},
|
||||||
{"AddUintptr", Func, 0},
|
{"AddUintptr", Func, 0},
|
||||||
|
{"AndInt32", Func, 23},
|
||||||
|
{"AndInt64", Func, 23},
|
||||||
|
{"AndUint32", Func, 23},
|
||||||
|
{"AndUint64", Func, 23},
|
||||||
|
{"AndUintptr", Func, 23},
|
||||||
{"Bool", Type, 19},
|
{"Bool", Type, 19},
|
||||||
{"CompareAndSwapInt32", Func, 0},
|
{"CompareAndSwapInt32", Func, 0},
|
||||||
{"CompareAndSwapInt64", Func, 0},
|
{"CompareAndSwapInt64", Func, 0},
|
||||||
|
@ -10038,6 +10137,11 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"LoadUint32", Func, 0},
|
{"LoadUint32", Func, 0},
|
||||||
{"LoadUint64", Func, 0},
|
{"LoadUint64", Func, 0},
|
||||||
{"LoadUintptr", Func, 0},
|
{"LoadUintptr", Func, 0},
|
||||||
|
{"OrInt32", Func, 23},
|
||||||
|
{"OrInt64", Func, 23},
|
||||||
|
{"OrUint32", Func, 23},
|
||||||
|
{"OrUint64", Func, 23},
|
||||||
|
{"OrUintptr", Func, 23},
|
||||||
{"Pointer", Type, 19},
|
{"Pointer", Type, 19},
|
||||||
{"StoreInt32", Func, 0},
|
{"StoreInt32", Func, 0},
|
||||||
{"StoreInt64", Func, 0},
|
{"StoreInt64", Func, 0},
|
||||||
|
@ -16200,6 +16304,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"WSAEACCES", Const, 2},
|
{"WSAEACCES", Const, 2},
|
||||||
{"WSAECONNABORTED", Const, 9},
|
{"WSAECONNABORTED", Const, 9},
|
||||||
{"WSAECONNRESET", Const, 3},
|
{"WSAECONNRESET", Const, 3},
|
||||||
|
{"WSAENOPROTOOPT", Const, 23},
|
||||||
{"WSAEnumProtocols", Func, 2},
|
{"WSAEnumProtocols", Func, 2},
|
||||||
{"WSAID_CONNECTEX", Var, 1},
|
{"WSAID_CONNECTEX", Var, 1},
|
||||||
{"WSAIoctl", Func, 0},
|
{"WSAIoctl", Func, 0},
|
||||||
|
@ -17284,6 +17389,7 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"Encode", Func, 0},
|
{"Encode", Func, 0},
|
||||||
{"EncodeRune", Func, 0},
|
{"EncodeRune", Func, 0},
|
||||||
{"IsSurrogate", Func, 0},
|
{"IsSurrogate", Func, 0},
|
||||||
|
{"RuneLen", Func, 23},
|
||||||
},
|
},
|
||||||
"unicode/utf8": {
|
"unicode/utf8": {
|
||||||
{"AppendRune", Func, 18},
|
{"AppendRune", Func, 18},
|
||||||
|
@ -17306,6 +17412,11 @@ var PackageSymbols = map[string][]Symbol{
|
||||||
{"ValidRune", Func, 1},
|
{"ValidRune", Func, 1},
|
||||||
{"ValidString", Func, 0},
|
{"ValidString", Func, 0},
|
||||||
},
|
},
|
||||||
|
"unique": {
|
||||||
|
{"(Handle).Value", Method, 23},
|
||||||
|
{"Handle", Type, 23},
|
||||||
|
{"Make", Func, 23},
|
||||||
|
},
|
||||||
"unsafe": {
|
"unsafe": {
|
||||||
{"Add", Func, 0},
|
{"Add", Func, 0},
|
||||||
{"Alignof", Func, 0},
|
{"Alignof", Func, 0},
|
||||||
|
|
|
@ -48,3 +48,18 @@ 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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NameRelativeTo returns a types.Qualifier that qualifies members of
|
||||||
|
// all packages other than pkg, using only the package name.
|
||||||
|
// (By contrast, [types.RelativeTo] uses the complete package path,
|
||||||
|
// which is often excessive.)
|
||||||
|
//
|
||||||
|
// If pkg is nil, it is equivalent to [*types.Package.Name].
|
||||||
|
func NameRelativeTo(pkg *types.Package) types.Qualifier {
|
||||||
|
return func(other *types.Package) string {
|
||||||
|
if pkg != nil && pkg == other {
|
||||||
|
return "" // same package; unqualified
|
||||||
|
}
|
||||||
|
return other.Name()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -249,7 +249,7 @@ golang.org/x/crypto/bcrypt
|
||||||
golang.org/x/crypto/blowfish
|
golang.org/x/crypto/blowfish
|
||||||
golang.org/x/crypto/pbkdf2
|
golang.org/x/crypto/pbkdf2
|
||||||
golang.org/x/crypto/scrypt
|
golang.org/x/crypto/scrypt
|
||||||
# golang.org/x/mod v0.18.0
|
# golang.org/x/mod v0.19.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/mod/internal/lazyregexp
|
golang.org/x/mod/internal/lazyregexp
|
||||||
golang.org/x/mod/module
|
golang.org/x/mod/module
|
||||||
|
@ -257,7 +257,7 @@ golang.org/x/mod/semver
|
||||||
# golang.org/x/sync v0.7.0
|
# golang.org/x/sync v0.7.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/sync/errgroup
|
golang.org/x/sync/errgroup
|
||||||
# golang.org/x/sys v0.21.0
|
# golang.org/x/sys v0.22.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/sys/unix
|
golang.org/x/sys/unix
|
||||||
golang.org/x/sys/windows
|
golang.org/x/sys/windows
|
||||||
|
@ -266,7 +266,7 @@ golang.org/x/sys/windows
|
||||||
golang.org/x/text/runes
|
golang.org/x/text/runes
|
||||||
golang.org/x/text/transform
|
golang.org/x/text/transform
|
||||||
golang.org/x/text/unicode/norm
|
golang.org/x/text/unicode/norm
|
||||||
# golang.org/x/tools v0.22.0
|
# golang.org/x/tools v0.23.0
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
golang.org/x/tools/cmd/goimports
|
golang.org/x/tools/cmd/goimports
|
||||||
golang.org/x/tools/cover
|
golang.org/x/tools/cover
|
||||||
|
@ -275,7 +275,6 @@ golang.org/x/tools/go/ast/inspector
|
||||||
golang.org/x/tools/go/buildutil
|
golang.org/x/tools/go/buildutil
|
||||||
golang.org/x/tools/go/gcexportdata
|
golang.org/x/tools/go/gcexportdata
|
||||||
golang.org/x/tools/go/internal/cgo
|
golang.org/x/tools/go/internal/cgo
|
||||||
golang.org/x/tools/go/internal/packagesdriver
|
|
||||||
golang.org/x/tools/go/loader
|
golang.org/x/tools/go/loader
|
||||||
golang.org/x/tools/go/packages
|
golang.org/x/tools/go/packages
|
||||||
golang.org/x/tools/go/types/objectpath
|
golang.org/x/tools/go/types/objectpath
|
||||||
|
|
Loading…
Reference in New Issue