commit | 84f0c7cf60ea8527a71a42a9a4c96a89ed911cda | [log] [tgz] |
---|---|---|
author | Heschi Kreinick <heschi@google.com> | Mon Dec 16 16:34:44 2019 -0500 |
committer | Heschi Kreinick <heschi@google.com> | Wed Dec 18 22:55:20 2019 +0000 |
tree | cb2f5bbcefa3a5a86dcf12f0338ba49dc48404ff | |
parent | ac281547760d49c8358b705650475af0f40fa52f [diff] |
internal/lsp/cache: don't forget files just because they change The situation in golang/go#35638 was as follows: didOpen main.go creates a snapshot that knows main.go is in package "mod.com". didChange main.go creates a snapshot. When a file changes, we discard its contents by leaving the file handle out of the "files" map. didOpen const.go creates a snapshot, and attempts to invalidate the metadata for packages in the same directory. The way we detect packages in the same directory is by iterating through the files in the snapshot. But we threw away the only file in "mod.com" in step 2 when its contents changed. If a diagnostics run happened to get in between the two steps, it would re-load main.go and the bug would go away. If not, step 3 would find no files and fail to invalidate "mod.com". The best way to fix this is to insert the new file handle eagerly during cloning. That way there's no confusion. Fixes golang/go#35638. Change-Id: I340bd28a96ad7b4cc912032065f3c2732c380bb2 Reviewed-on: https://go-review.googlesource.com/c/tools/+/211578 Run-TryBot: Heschi Kreinick <heschi@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rebecca Stambler <rstambler@golang.org>
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.