1
0
mirror of https://github.com/golang/go synced 2024-11-18 16:54:43 -07:00
go/internal/lsp
Rob Findley f9587291b6 internal/lsp/fake: add fakes for testing editor interaction
A lot of bug reports originating from LSP clients are related to either
the timing or sequence of editor interactions with gopls (or at least
they're originally reported this way). For example: "when I open a
package and then create a new file, I lose diagnostics for existing
files".  These conditions are often hard to reproduce, and to isolate as
either a gopls bug or a bug in the editor.

Right now we're relying on govim integration tests to catch these
regressions, but it's important to also have a testing framework that
can exercise this functionality in-process.  As a starting point this CL
adds test fakes that implement a high level API for scripting editor
interactions. A fake workspace can be used to sandbox file operations; a
fake editor provides an interface for text editing operations; a fake
LSP client can be used to connect the fake editor to a gopls instance.
Some tests are added to the lsprpc package to demonstrate the API.

The primary goal of these fakes should be to simulate an client that
complies to the LSP spec. Put another way: if we have a bug report that
we can't reproduce with our regression tests, it should either be a bug
in our test fakes or a bug in the LSP client originating the report.

I did my best to comply with the spec in this implementation, but it
will certainly develop as we write more tests. We will also need to add
to the editor API in the future for testing more language features.

Updates golang/go#36879
Updates golang/go#34111

Change-Id: Ib81188683a7066184b8a254275ed5525191a2d68
Reviewed-on: https://go-review.googlesource.com/c/tools/+/217598
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
2020-02-10 17:44:19 +00:00
..
browser internal/lsp: add version and bug commands 2019-05-11 04:16:02 +00:00
cache internal/lsp/cache: refactor functions that return PackageHandles 2020-02-07 22:39:43 +00:00
cmd internal/lsp: change debug instance to a struct 2020-02-07 11:26:02 +00:00
debug internal/lsp: change debug instance to a struct 2020-02-07 11:26:02 +00:00
diff internal/lsp: fix unified diffs of edits at the end of a file 2019-10-11 16:38:14 +00:00
fake internal/lsp/fake: add fakes for testing editor interaction 2020-02-10 17:44:19 +00:00
fuzzy internal/lsp: make golint happy 2019-12-23 18:17:04 +00:00
helper internal/lsp: change to helper.go to output a formatted file 2020-01-31 20:35:38 +00:00
lsprpc internal/lsp/fake: add fakes for testing editor interaction 2020-02-10 17:44:19 +00:00
mod internal/lsp/cache: improve ModTidyHandle cache key 2020-02-07 18:07:39 +00:00
protocol internal/lsp: refactor LSP server instantiation 2020-02-06 23:12:37 +00:00
snippet all: fix broken links to LSP specification 2019-10-02 18:32:53 +00:00
source internal/lsp: fix crash completing recursive pointer types 2020-02-07 22:44:06 +00:00
telemetry internal/lsp: log snapshot IDs, don't log context cancellation 2020-01-27 19:20:44 +00:00
testdata internal/lsp: fix crash completing recursive pointer types 2020-02-07 22:44:06 +00:00
tests internal/lsp/tests: move workspace symbol test helpers functions into util.go 2020-02-07 21:23:39 +00:00
code_action.go internal/lsp: add quickfixes for missing dependencies in go.mod 2020-02-07 00:16:14 +00:00
command.go internal/lsp: build overlays through the snapshot 2020-02-07 18:37:49 +00:00
completion_test.go internal/lsp: filter keyword completions in tests 2020-02-06 05:08:30 +00:00
completion.go internal/lsp: consolidate completion sorting 2020-01-17 20:30:43 +00:00
definition.go internal/lsp: don't show links in hover for test functions 2020-02-03 21:56:10 +00:00
diagnostics.go internal/lsp: don't use overlays from the session in the snapshot 2020-02-07 19:21:16 +00:00
folding_range.go internal/lsp: remove view.FindPosInPackage and view.FindMapperInPackage 2020-01-13 18:51:11 +00:00
format.go internal/lsp: remove view.FindPosInPackage and view.FindMapperInPackage 2020-01-13 18:51:11 +00:00
general.go internal/lsp: add support for workspace symbol 2020-02-05 19:03:17 +00:00
highlight.go internal/lsp: remove view.FindPosInPackage and view.FindMapperInPackage 2020-01-13 18:51:11 +00:00
hover.go internal/lsp: don't show links in hover for test functions 2020-02-03 21:56:10 +00:00
implementation.go internal/lsp: remove view.FindPosInPackage and view.FindMapperInPackage 2020-01-13 18:51:11 +00:00
link.go internal/lsp: remove view.FindPosInPackage and view.FindMapperInPackage 2020-01-13 18:51:11 +00:00
lsp_test.go internal/lsp: build overlays through the snapshot 2020-02-07 18:37:49 +00:00
references.go internal/lsp: refactor find-references and rename 2020-01-16 06:24:15 +00:00
rename.go internal/lsp: refactor find-references and rename 2020-01-16 06:24:15 +00:00
reset_golden.sh internal/lsp: fix regeneration of golden files 2019-09-25 13:16:59 +00:00
server_gen.go internal/lsp: add support for workspace symbol 2020-02-05 19:03:17 +00:00
server.go internal/lsp: refactor LSP server instantiation 2020-02-06 23:12:37 +00:00
signature_help.go internal/lsp: remove unnecessary source.SignatureInformation type 2020-02-06 19:05:38 +00:00
symbols.go internal/lsp: remove view.FindPosInPackage and view.FindMapperInPackage 2020-01-13 18:51:11 +00:00
text_synchronization.go internal/lsp: don't use overlays from the session in the snapshot 2020-02-07 19:21:16 +00:00
workspace_symbol.go internal/lsp: add support for workspace symbol 2020-02-05 19:03:17 +00:00
workspace.go internal/lsp: generate boilerplate stubs for type Server 2020-01-24 14:41:51 +00:00