commit | 91fde38c0e0b43e4c335acec12c02202fbafe7bf | [log] [tgz] |
---|---|---|
author | Rob Findley <rfindley@google.com> | Fri Sep 15 12:13:15 2023 -0400 |
committer | Robert Findley <rfindley@google.com> | Mon Sep 18 22:08:15 2023 +0000 |
tree | 98ca6d3f206b1bbf843ffb0642aa11fc3516a585 | |
parent | a9b2439b862eccc29e5ed35012352ed4e888b6f5 [diff] |
gopls/internal/lsp/tests: eliminate several old marker types This CL is the unraveling of a single thread, which ended up spanning many different tests and markers. The goal was to eliminate the three remaining diagnostic markers in the old test framework, but due to the tightly bound nature of the old marker tests, that led to the elimination of Diagnostics, Definitions, TypeDefinitions, and UnimportedCompletions, along with the definition of several new markers in the new marker tests. The new tests are perhaps cleaner in some areas, but still a tangle: my goal is to delete the old marker tests ASAP, and it's easier to port them more-or-less faithfully rather than read through and fix bugs / broken assertions, verbose APIs, unexpected diagnostics, etc. To this end, the -ignore_extra_diags flag is introduced as some of the old tests had too many diagnostics for me to annotate. At least this looseness is contained only to the tests in which the flag is set. Also, the @rank and @snippet markers didn't make a ton of sense to me (they refer to completion items but only care about labels), but I didn't want to fix that. At a later time, I may go back through and change the way completion items are represented: the current style is rather verbose. Some completion markers in the old framework were changing settings for each mark, sometimes applying _multiple_ settings (see signatureHelp). The new marker framework does not support this (rightly so, in my opinion), and so where appropriate certain tests such as unimported completion had to be moved into a different test file so that they can use different settings. As for the tests themselves: they are _mostly_ the same as before, though I had to tweak them in various small ways to make them work. For example annotating diagnostics, redefining an import, changing the marker signature, etc. I don't think I meaningfully changed the test assertions, but I don't expect this to be carefully verified during review. I can only hope that the new state is slightly more maintainable than the old; and provides us a platform to eventually make the tests significantly more maintainable. For golang/go#54845 Change-Id: I701bfcbfecf32cd780caba9e324a134e2d9bd048 Reviewed-on: https://go-review.googlesource.com/c/tools/+/528736 Reviewed-by: Alan Donovan <adonovan@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This repository provides the golang.org/x/tools
module, comprising various tools and packages mostly for static analysis of Go programs, some of which are listed below. Use the “Go reference” link above for more information about any package.
It also contains the golang.org/x/tools/gopls
module, whose root package is a language-server protocol (LSP) server for Go. An LSP server analyses the source code of a project and responds to requests from a wide range of editors such as VSCode and Vim, allowing them to support IDE-like functionality.
Selected commands:
cmd/goimports
formats a Go program like go fmt
and additionally inserts import statements for any packages required by the file after it is edited.cmd/callgraph
prints the call graph of a Go program.cmd/digraph
is a utility for manipulating directed graphs in textual notation.cmd/stringer
generates declarations (including a String
method) for “enum” types.cmd/toolstash
is a utility to simplify working with multiple versions of the Go toolchain.These commands may be fetched with a command such as
go install golang.org/x/tools/cmd/goimports@latest
Selected packages:
go/ssa
provides a static single-assignment form (SSA) intermediate representation (IR) for Go programs, similar to a typical compiler, for use by analysis tools.
go/packages
provides a simple interface for loading, parsing, and type checking a complete Go program from source code.
go/analysis
provides a framework for modular static analysis of Go programs.
go/callgraph
provides call graphs of Go programs using a variety of algorithms with different trade-offs.
go/ast/inspector
provides an optimized means of traversing a Go parse tree for use in analysis tools.
go/cfg
provides a simple control-flow graph (CFG) for a Go function.
go/expect
reads Go source files used as test inputs and interprets special comments within them as queries or assertions for testing.
go/gcexportdata
and go/gccgoexportdata
read and write the binary files containing type information used by the standard and gccgo
compilers.
go/types/objectpath
provides a stable naming scheme for named entities (“objects”) in the go/types
API.
Numerous other packages provide more esoteric functionality.
This repository uses Gerrit for code changes. To learn how to submit changes, see https://golang.org/doc/contribute.html.
The main issue tracker for the tools repository is located at https://github.com/golang/go/issues. Prefix your issue with “x/tools/(your subdir):” in the subject line, so it is easy to find.
This repository uses prettier to format JS and CSS files.
The version of prettier
used is 1.18.2.
It is encouraged that all JS and CSS code be run through this before submitting a change. However, it is not a strict requirement enforced by CI.