1
0
mirror of https://github.com/golang/go synced 2024-11-18 18:44:42 -07:00
The Go programming language
Go to file
Heschi Kreinick 5d34a75004 internal/imports: don't block completions on walks
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>
2020-01-09 22:24:46 +00:00
benchmark/parse benchmark/parse: add unit test for String function 2019-12-16 21:43:19 +00:00
blog blog: fix swallowed error 2019-12-18 19:17:56 +00:00
cmd cmd/gopls: delete legacy gopls 2019-12-27 05:11:00 +00:00
container/intsets x/tools/container/intsets: add LowerBound 2017-08-21 16:11:21 +00:00
cover cover: significantly improve the speed of cover.ParseProfiles 2019-10-24 07:44:52 +00:00
go go/ssa: add position data in indexed range loops 2020-01-09 17:47:59 +00:00
godoc godoc/static: update copyright year to 2013 2020-01-02 16:51:58 +00:00
gopls gopls/integration: save more precise parsing information 2020-01-02 18:22:54 +00:00
imports imports: pass more of the environment 2019-12-17 00:36:01 +00:00
internal internal/imports: don't block completions on walks 2020-01-09 22:24:46 +00:00
playground playground/socket: handle multi-file present play snippets 2019-12-03 04:46:16 +00:00
present all: remove many cases of space-space 2019-12-30 19:07:42 +00:00
refactor all: fix more typos 2019-09-11 15:13:14 +00:00
txtar txtar/archive: add unit test function for Format 2019-11-20 20:49:00 +00:00
.gitattributes tools: copying .gitattributes to all subrepositories (fixes windows build) 2014-12-23 06:32:51 +00:00
.gitignore .gitignore: roll back ".gitignore: ignore emacs backup files" 2018-02-13 00:43:28 +00:00
AUTHORS go.empty: prototype for new subrepository 2012-01-25 14:45:13 -05:00
codereview.cfg tools: add codereview.cfg 2015-03-18 17:04:00 +00:00
CONTRIBUTING.md CONTRIBUTING.md: remove note about not accepting Pull Requests 2018-03-14 18:02:17 +00:00
CONTRIBUTORS go.empty: prototype for new subrepository 2012-01-25 14:45:13 -05:00
go.mod internal/lsp: create parseModHandle for storing go.mod data 2019-12-13 22:03:54 +00:00
go.sum internal/lsp: create parseModHandle for storing go.mod data 2019-12-13 22:03:54 +00:00
LICENSE LICENSE: add 2012-03-17 15:20:58 +11:00
PATENTS go.empty: add PATENTS file to the subrepo. 2012-04-16 11:24:04 +10:00
README.md README: switch to Markdown and add links 2017-09-27 05:40:07 +00:00

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.