commit | 76a3b8da50ef7c9da5c87b2fdff51392aad781a0 | [log] [tgz] |
---|---|---|
author | Heschi Kreinick <heschi@google.com> | Mon Nov 11 19:28:40 2019 -0500 |
committer | Heschi Kreinick <heschi@google.com> | Tue Nov 12 23:22:37 2019 +0000 |
tree | 909c6a8c61f9b81f58bcccd2a53f10e7cbbcf5c7 | |
parent | c81e7ae886d18e2eeb01e681ed56f6b90cf2d86c [diff] |
internal/memoize: propagate cancellation If a user is typing fast, they will quickly invalidate many snapshots. We don't want to stack up a bunch of stale type check and analysis operations, so we should propagate cancellation through the cache. Handles are long-lived, so we may cancel an operation only to restart it again later. Also, there may be multiple operations waiting on the same computation, and just because one is cancelled doesn't mean we should necessarily stop. The easiest way to support all that was to add an explicit state to each handle, and track the number of waiters. See the code for more details on Handle life cycles. As far as I can tell, the rest of gopls is prepared for this behavior. I added an explicit check to the type checking code, where I was worried it might get overly confused. But long-term it would probably be good to return an error from Get. Change-Id: I3ea6e141b52b94300a41248d3f2e039b023709d0 Reviewed-on: https://go-review.googlesource.com/c/tools/+/206879 Run-TryBot: Heschi Kreinick <heschi@google.com> Reviewed-by: Ian Cottrell <iancottrell@google.com>
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.
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
.
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.