Fully switch to the new generated command API, and remove the old dynamic command configuration. This involved several steps: + Switch the command dispatch in internal/lsp/command.go to go through the command package. This means that all commands must now use the new signature. + Update commandHandler to use the new command signatures. + Fix some errors discovered in the command interface now that we're actually using it. + Regenerate bindings. + Update all code lens and suggested fixes to new the new command constructors. + Generate values in the command package to hold command names and the full set of commands, so that they may be referenced by name. + Update any references to command names to use the command package. + Delete command metadata from the source package. Rename command.go to fix.go. + Update lsp tests to execute commands directly rather than use an internal API. This involved a bit of hackery to collect the edits. + Update document generation to use command metadata. Documenting the arguments is left to a later CL. + Various small fixes related to the above. This change is intended to be invisible to users. We have changed the command signatures, but have not (previously) committed to backwards compatibility for commands. Notably, the gopls.test and gopls.gc_details signatures are preserved, as these are the two cases where we are aware of LSP clients calling them directly, not from a code lens or diagnostic. For golang/go#40438 Change-Id: Ie1b92c95d6ce7e2fc25fc029d1f85b942f40e851 Reviewed-on: https://go-review.googlesource.com/c/tools/+/290111 Trust: Robert Findley <rfindley@google.com> Run-TryBot: Robert Findley <rfindley@google.com> gopls-CI: kokoro <noreply+kokoro@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Heschi Kreinick <heschi@google.com> |
||
|---|---|---|
| .. | ||
| README.md | ||
| normalizer.go | ||
| tests.go | ||
| util.go | ||
README.md
Testing
LSP has "marker tests" defined in internal/lsp/testdata, as well as
traditional tests.
Marker tests
Marker tests have a standard input file, like
internal/lsp/testdata/foo/bar.go, and some may have a corresponding golden
file, like internal/lsp/testdata/foo/bar.go.golden. The former is the "input"
and the latter is the expected output.
Each input file contains annotations like
//@suggestedfix("}", "refactor.rewrite"). These annotations are interpreted by
test runners to perform certain actions. The expected output after those actions
is encoded in the golden file.
When tests are run, each annotation results in a new subtest, which is encoded in the golden file with a heading like,
-- suggestedfix_bar_11_21 --
// expected contents go here
-- suggestedfix_bar_13_20 --
// expected contents go here
The format of these headings vary: they are defined by the
Golden
function for each annotation. In the case above, the format is: annotation
name, file name, annotation line location, annotation character location.
So, if internal/lsp/testdata/foo/bar.go has three suggestedfix annotations,
the golden file should have three headers with suggestedfix_bar_xx_yy
headings.
To see a list of all available annotations, see the exported "expectations" in tests.go.
To run marker tests,
cd /path/to/tools
# The marker tests are located in "internal/lsp", "internal/lsp/cmd, and
# "internal/lsp/source".
go test ./internal/lsp/...
There are quite a lot of marker tests, so to run one individually, pass the test path and heading into a -run argument:
cd /path/to/tools
go test ./internal/lsp -v -run TestLSP/Modules/SuggestedFix/bar_11_21
Resetting marker tests
Sometimes, a change is made to lsp that requires a change to multiple golden files. When this happens, you can run,
cd /path/to/tools
./internal/lsp/reset_golden.sh