This CL pulls in the latest changes from go/internal/gcimporter, while avoiding breaking the build on older go versions. To help maintain compatibility with older Go versions while minimizing the diff with the standard library importer, the internal/typeparams package was significantly expanded. I decided to use type aliases in the internal/typeparams package on Go version >= go1.18, and placeholder types on Go version < go1.18. This reduces the amount of copying needed in the APIs, though it might not be the best decision if we ever decide to export this package. Documentation was also updated to be more concise and specific to the Go version being used. In order to actually fix the x/tools Trybot for packages using generics in the standard library, we need to switch from the 'typeparams' build constraint to the 'go1.18' build constraint. This means if we make any additional API changes in go/types we'll have to submit them with a broken x/tools Trybot and then immediately fix the x/tools build. Change-Id: Ifa0b1c37b89dc549ee295fa3a959f03deda86e56 Reviewed-on: https://go-review.googlesource.com/c/tools/+/349949 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: Robert Griesemer <gri@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. 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