In Go 1.16 error codes as well as start and end positions are added for go/types errors. This information is temporarily stored in unexported fields, until we're more confident in the correctness of both the API and the underlying data. Read this information using reflection and, if available, use it to set the corresponding field in compiler diagnostics. This establishes a positive feedback loop: in most cases this should improve the gopls diagnostic, and wherever it doesn't we can make a note and fall back on the old heuristics for that error code. For golang/go#42290 Change-Id: I37475189cbd14a0a5bcfde163f599c9a7b957372 Reviewed-on: https://go-review.googlesource.com/c/tools/+/268539 Run-TryBot: Robert Findley <rfindley@google.com> TryBot-Result: Go Bot <gobot@golang.org> gopls-CI: kokoro <noreply+kokoro@google.com> Trust: Robert Findley <rfindley@google.com> Reviewed-by: Rebecca Stambler <rstambler@golang.org> |
||
|---|---|---|
| .. | ||
| 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: https://pkg.go.dev/golang.org/x/tools/internal/lsp/tests#Data.Golden. 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