625332f3c5
LSP https://microsoft.github.io/language-server-protocol/specifications/specification-current/#cancelRequest expects the server to send back the response even when the request is cancelled. Gopls LSP protocol implements the cancellation using the context cancellation. That is, upon a cancellation request from the client, the server calls the corresponding canceller that cancels the context passed to the handler. Reusing this cancelled context for the replyer is not safe because code in any layer can decide to shortcircuit and skip sending the data back to the client. E.g. https://cs.opensource.google/go/tools/+/master:internal/jsonrpc2/stream.go;l=63 This CL make sure to pass the detached context to the replier. Alternative, or a better approach to avoid any unexpected side-effect of using a detached context is to send out the response at the point of cancellation with a separate context. But that requires more significant code change. Testing is currently hard, but maybe doable once the current refactoring is done. Test is left as a TODO. Change-Id: I4611af00ad913e96b62c6b7180c6673b0465daf9 Reviewed-on: https://go-review.googlesource.com/c/tools/+/232300 Reviewed-by: Ian Cottrell <iancottrell@google.com> |
||
---|---|---|
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.