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