| 1 | # Go Tools |
|---|---|
| 2 | |
| 3 | [](https://pkg.go.dev/golang.org/x/tools) |
| 4 | |
| 5 | This repository provides the `golang.org/x/tools` module, comprising |
| 6 | various tools and packages mostly for static analysis of Go programs, |
| 7 | some of which are listed below. |
| 8 | Use the "Go reference" link above for more information about any package. |
| 9 | |
| 10 | It also contains the |
| 11 | [`golang.org/x/tools/gopls`](https://pkg.go.dev/golang.org/x/tools/gopls) |
| 12 | module, whose root package is a language-server protocol (LSP) server for Go. |
| 13 | An LSP server analyses the source code of a project and |
| 14 | responds to requests from a wide range of editors such as VSCode and |
| 15 | Vim, allowing them to support IDE-like functionality. |
| 16 | |
| 17 | <!-- List only packages of general interest below. --> |
| 18 | |
| 19 | Selected commands: |
| 20 | |
| 21 | - `cmd/goimports` formats a Go program like `go fmt` and additionally |
| 22 | inserts import statements for any packages required by the file |
| 23 | after it is edited. |
| 24 | - `cmd/callgraph` prints the call graph of a Go program. |
| 25 | - `cmd/digraph` is a utility for manipulating directed graphs in textual notation. |
| 26 | - `cmd/stringer` generates declarations (including a `String` method) for "enum" types. |
| 27 | - `cmd/toolstash` is a utility to simplify working with multiple versions of the Go toolchain. |
| 28 | |
| 29 | These commands may be fetched with a command such as |
| 30 | ``` |
| 31 | go install golang.org/x/tools/cmd/goimports@latest |
| 32 | ``` |
| 33 | |
| 34 | Selected packages: |
| 35 | |
| 36 | - `go/ssa` provides a static single-assignment form (SSA) intermediate |
| 37 | representation (IR) for Go programs, similar to a typical compiler, |
| 38 | for use by analysis tools. |
| 39 | |
| 40 | - `go/packages` provides a simple interface for loading, parsing, and |
| 41 | type checking a complete Go program from source code. |
| 42 | |
| 43 | - `go/analysis` provides a framework for modular static analysis of Go |
| 44 | programs. |
| 45 | |
| 46 | - `go/callgraph` provides call graphs of Go programs using a variety |
| 47 | of algorithms with different trade-offs. |
| 48 | |
| 49 | - `go/ast/inspector` provides an optimized means of traversing a Go |
| 50 | parse tree for use in analysis tools. |
| 51 | |
| 52 | - `go/cfg` provides a simple control-flow graph (CFG) for a Go function. |
| 53 | |
| 54 | - `go/expect` reads Go source files used as test inputs and interprets |
| 55 | special comments within them as queries or assertions for testing. |
| 56 | |
| 57 | - `go/gcexportdata` and `go/gccgoexportdata` read and write the binary |
| 58 | files containing type information used by the standard and `gccgo` compilers. |
| 59 | |
| 60 | - `go/types/objectpath` provides a stable naming scheme for named |
| 61 | entities ("objects") in the `go/types` API. |
| 62 | |
| 63 | Numerous other packages provide more esoteric functionality. |
| 64 | |
| 65 | <!-- Some that didn't make the cut: |
| 66 | |
| 67 | golang.org/x/tools/benchmark/parse |
| 68 | golang.org/x/tools/go/ast/astutil |
| 69 | golang.org/x/tools/go/types/typeutil |
| 70 | golang.org/x/tools/go/vcs |
| 71 | golang.org/x/tools/godoc |
| 72 | golang.org/x/tools/playground |
| 73 | golang.org/x/tools/present |
| 74 | golang.org/x/tools/refactor/importgraph |
| 75 | golang.org/x/tools/refactor/rename |
| 76 | golang.org/x/tools/refactor/satisfy |
| 77 | golang.org/x/tools/txtar |
| 78 | |
| 79 | --> |
| 80 | |
| 81 | ## Contributing |
| 82 | |
| 83 | This repository uses Gerrit for code changes. |
| 84 | To learn how to submit changes, see https://golang.org/doc/contribute.html. |
| 85 | |
| 86 | The main issue tracker for the tools repository is located at |
| 87 | https://github.com/golang/go/issues. Prefix your issue with "x/tools/(your |
| 88 | subdir):" in the subject line, so it is easy to find. |
| 89 | |
| 90 | ### JavaScript and CSS Formatting |
| 91 | |
| 92 | This repository uses [prettier](https://prettier.io/) to format JS and CSS files. |
| 93 | |
| 94 | The version of `prettier` used is 1.18.2. |
| 95 | |
| 96 | It is encouraged that all JS and CSS code be run through this before submitting |
| 97 | a change. However, it is not a strict requirement enforced by CI. |
| 98 |
Members