diff --git a/README.md b/README.md index 71a945aaf9..5cd8f0ac6e 100644 --- a/README.md +++ b/README.md @@ -2,23 +2,90 @@ [![PkgGoDev](https://pkg.go.dev/badge/golang.org/x/tools)](https://pkg.go.dev/golang.org/x/tools) -This subrepository holds the source for various packages and tools that support -the Go programming language. +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. -Some of the tools, `godoc` and `vet` for example, are included in binary Go -distributions. +It also contains the +[`golang.org/x/tools/gopls`](https://pkg.go.dev/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. -Others, including the Go `guru` and the test coverage tool, can be fetched with -`go install`. + -Packages include a type-checker for Go and an implementation of the -Static Single Assignment form (SSA) representation for Go programs. +Selected commands: -## Download/Install +- `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. -The easiest way to install is to run `go install golang.org/x/tools/...@latest`. +These commands may be fetched with a command such as +`go install golang.org/x/tools/cmd/goimports@latest`. -## JS/CSS Formatting +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. + + + +## Contributing + +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. + +### JavaScript and CSS Formatting This repository uses [prettier](https://prettier.io/) to format JS and CSS files. @@ -26,12 +93,3 @@ 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. - -## Report Issues / Send Patches - -This repository uses Gerrit for code changes. To learn how to submit changes to -this repository, 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.