5d34a75004
Filesystem walks of large GOPATHs/module caches can take seconds, especially on systems with slow filesystems like MacOS and WSL. We don't want to block completion requests on walks finishing. At the same time, cancelling a walk midway through results in an unusable cache, where we don't know which parts have been scanned so far. The best option is to run the walks in a separate goroutine. Then we can detach and let them finish. On the other side, we need to be able to reattach for the next completion request. Introduce a new method on caches, ScanAndListen, which first processes all the items in the cache, then notifies of any new items. This allows us to reattach to an existing scan without missing anything. The background scan introduces concurrency to the resolvers where there wasn't any before. We can't use mutexes, because there's no way to stop Lock() when a context expires. Use a 1-element semaphore channel to accomplish the same effect. Along the way: Only rescan GOPATH if the resolver has been cleared. None of this makes sense for GOPATH without that. Fix a bug where we were scanning the main module twice in module mode. Stop loading exports in module tests, it slows them down a ton. Change-Id: I978efae733ccba0c0cdc8e8fe6892bf5f15feac8 Reviewed-on: https://go-review.googlesource.com/c/tools/+/213217 Run-TryBot: Heschi Kreinick <heschi@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rebecca Stambler <rstambler@golang.org> |
||
---|---|---|
benchmark/parse | ||
blog | ||
cmd | ||
container/intsets | ||
cover | ||
go | ||
godoc | ||
gopls | ||
imports | ||
internal | ||
playground | ||
present | ||
refactor | ||
txtar | ||
.gitattributes | ||
.gitignore | ||
AUTHORS | ||
codereview.cfg | ||
CONTRIBUTING.md | ||
CONTRIBUTORS | ||
go.mod | ||
go.sum | ||
LICENSE | ||
PATENTS | ||
README.md |
Go Tools
This subrepository holds the source for various packages and tools that support the Go programming language.
Some of the tools, godoc
and vet
for example, are included in binary Go
distributions.
Others, including the Go guru
and the test coverage tool, can be fetched with
go get
.
Packages include a type-checker for Go and an implementation of the Static Single Assignment form (SSA) representation for Go programs.
Download/Install
The easiest way to install is to run go get -u golang.org/x/tools/...
. You can
also manually git clone the repository to $GOPATH/src/golang.org/x/tools
.
Report Issues / Send Patches
This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://golang.org/doc/contribute.html.
The main issue tracker for the tools repository is located at https://github.com/golang/go/issues. Prefix your issue with "x/tools/(your subdir):" in the subject line, so it is easy to find.