go/internal/lsp
Bryan C. Mills e212aff8fd internal/memoize: do not allow (*Generation).Acquire to fail
The Acquire method is nearly instantaneous; it only potentially blocks
on a small, constant sequence of cache misses, so there is no need to
avoid blocking in it when a Context is cancelled.

An early return when the passed-in Context is canceled was added in CL
242838 to avoid incrementing the Generation's WaitGroup after its
destruction has begun; however, that early return also bypasses the
WaitGroup accounting that blocks Destroy while the generation is still
in use. Instead, we need the invariant that Acquire is not called in
the first place after Destroy, which we can ensure by nilling out
the View's snapshot when we begin destroying it.

I was not able to reproduce golang/go#48774 locally, but I believe
that this CL will fix it. (It may, however, expose other races or
deadlocks that may have been masked by the early return, which we can
then fix separately.)

Fixes golang/go#48774

Change-Id: Iac36fceb06485f849da5ba0250b44b55f937c44b
Reviewed-on: https://go-review.googlesource.com/c/tools/+/367675
Trust: Bryan C. Mills <bcmills@google.com>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
gopls-CI: kokoro <noreply+kokoro@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
2021-12-02 03:25:35 +00:00
..
analysis x/tools: temporarily skip a couple of tests 2021-11-29 20:12:13 +00:00
browser all: replace all usages of os/exec with golang.org/x/sys/execabs 2021-01-19 22:25:03 +00:00
cache internal/memoize: do not allow (*Generation).Acquire to fail 2021-12-02 03:25:35 +00:00
cmd internal/lsp/protocol: update LSP definitions and stubs 2021-10-05 16:44:45 +00:00
command internal/lsp/command: fix typo in comment 2021-09-19 16:34:52 +00:00
debug internal/lsp/debug: improve readability of session options 2021-09-28 20:53:23 +00:00
diff all: add copyright notices to files that are missing them 2021-01-06 17:23:47 +00:00
fake /internal/lsp/source: apply directory filters to workspace symbols 2021-10-30 12:32:06 +00:00
fuzzy internal/lsp/fuzzy: add a new fuzzy matcher optimized for Go symbols 2021-08-09 20:21:06 +00:00
helper internal/lsp/protocol: update LSP definitions and stubs 2021-10-05 16:44:45 +00:00
lsppos internal/lsp/source: compute imports text edits from scratch 2021-07-22 17:13:07 +00:00
lsprpc internal/lsp/lsprpc: increase timeout for TestEnvForwarding 2021-11-11 03:25:14 +00:00
mod internal/lsp: in degraded mode, limit the workspace to active packages 2021-07-26 20:36:31 +00:00
progress internal/lsp: move the progress tracker to the session 2021-06-16 01:01:29 +00:00
protocol internal/lsp/protocol: fix whitespace in comments 2021-12-01 19:09:57 +00:00
regtest /internal/lsp/source: apply directory filters to workspace symbols 2021-10-30 12:32:06 +00:00
snippet internal/lsp/source/completion: add postfix snippet completions 2021-03-29 17:27:46 +00:00
source gopls: template suffix flags and documentation 2021-11-23 16:39:20 +00:00
template internal/lsp/template: fix error that causes crashes 2021-11-29 15:05:11 +00:00
testdata all: prepare for formatting any as 'any' in type strings 2021-11-16 14:26:19 +00:00
tests internal/lsp: temporarily strip subscripts from generic hover 2021-10-23 12:53:38 +00:00
README.md internal/lsp: add READMEs that describe tests, how to run tests 2020-12-03 17:03:53 +00:00
call_hierarchy.go internal/lsp: release resources for call hierarchy file requests 2020-08-07 21:04:51 +00:00
code_action.go internal/lsp: return all code action kinds with context.only prefix 2021-11-09 16:15:23 +00:00
code_lens.go internal/lsp: switch to the new command API 2021-02-09 22:09:28 +00:00
command.go internal/lsp/source: consider test variants when finding pkg from pos 2021-09-08 14:51:59 +00:00
completion.go internal/lsp/template: implement completions for template files 2021-09-14 19:06:02 +00:00
completion_test.go internal/lsp/completion: move postfix completions behind option 2021-03-29 18:55:49 +00:00
debounce.go internal/lsp: adopt bcmills' suggestion for an improved debouncer API 2021-07-13 16:40:23 +00:00
debounce_test.go internal/lsp: adopt bcmills' suggestion for an improved debouncer API 2021-07-13 16:40:23 +00:00
definition.go internal/lsp: check for invalid URIs in definition 2021-10-29 19:33:54 +00:00
diagnostics.go internal/lsp/diagnostics: avoid erroneous error message for orphaned files 2021-09-20 15:08:51 +00:00
folding_range.go all: add copyright notices to files that are missing them 2021-01-06 17:23:47 +00:00
format.go internal/lsp/cache: ref-count snapshots 2020-08-03 22:08:54 +00:00
general.go all: update install commands to go install pkg@version 2021-10-27 02:41:01 +00:00
highlight.go internal/lsp: support template files 2021-05-05 01:45:45 +00:00
hover.go internal/lsp: support template files 2021-05-05 01:45:45 +00:00
implementation.go internal/lsp/cache: ref-count snapshots 2020-08-03 22:08:54 +00:00
link.go internal/lsp: add ?utm_source=gopls to links to pkg.go.dev 2020-11-16 00:15:58 +00:00
lsp_test.go internal/lsp: temporarily strip subscripts from generic hover 2021-10-23 12:53:38 +00:00
references.go internal/lsp: support template files 2021-05-05 01:45:45 +00:00
rename.go internal/lsp/source: make it an error to rename embedded fields 2021-01-26 13:52:46 +00:00
reset_golden.sh
semantic.go internal/lsp: do not send semantic tokens that client doesn't support 2021-10-26 18:33:39 +00:00
server.go internal/lsp: add a setting to batch didChangeWatchedFile notifications 2021-07-08 19:55:54 +00:00
server_gen.go internal/lsp/protocol: bring the LSP stubs up to date 2021-12-01 15:05:46 +00:00
signature_help.go internal/lsp: update to latest version of LSP protocol 2021-02-02 11:32:59 +00:00
symbols.go internal/lsp: support template files 2021-05-05 01:45:45 +00:00
text_synchronization.go internal/lsp: signal diagnostic completion if modification failed 2021-07-13 20:49:08 +00:00
workspace.go internal/lsp: report used semantic token order in registerCapability 2021-05-19 16:08:23 +00:00
workspace_symbol.go internal/lsp/source: add a new symbolStyle configuration option 2020-06-26 17:13:37 +00:00

README.md

lsp

internal/lsp provides much of the Language Server Protocol (lsp) implementation for gopls.

Documentation for users and contributors can be found in the gopls/doc directory.