summaryrefslogtreecommitdiffstats
path: root/man/gofmt.1
blob: 656d3de5a2e69cafb2a148d2fb7b40498279a251 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
.\"                                      Hey, EMACS: -*- nroff -*-
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.TH GOFMT 1 "2021-09-06"
.\" Please adjust this date whenever revising the manpage.
.SH NAME
gofmt \- format Go programs
.SH SYNOPSIS
.B gofmt
.RI [ flags ]
.RI [ "path ..." ]
.SH DESCRIPTION
Gofmt formats Go programs. It uses tabs for indentation and blanks for
alignment. Alignment assumes that an editor is using a fixed-width font.
.P
Without an explicit path, it processes the standard input. Given a file, it
operates on that file; given a directory, it operates on all .go files in
that directory, recursively. (Files starting with a period are ignored.) By
default, gofmt prints the reformatted sources to standard output.
.SH OPTIONS
.TP
.B \-d
Do not print reformatted sources to standard output.
If a file's formatting is different than gofmt's, print diffs
to standard output.
.TP
.B \-e
Print all (including spurious) errors.
.TP
.B \-l
Do not print reformatted sources to standard output.
If a file's formatting is different from gofmt's, print its name
to standard output.
.TP
.B \-r rule
Apply the rewrite rule to the source before reformatting.
.TP
.B \-s
Try to simplify code (after applying the rewrite rule, if any).
.TP
.B \-w
Do not print reformatted sources to standard output.
If a file's formatting is different from gofmt's, overwrite it
with gofmt's version. If an error occurred during overwriting,
the original file is restored from an automatic backup.
.P
Debugging support:
.TP
.BI "\-cpuprofile " filename
Write cpu profile to the specified file.
.P
The rewrite rule specified with the \-r flag must be a string of the
form:

.Vb 6
\&      pattern -> replacement
.Ve
.P
Both pattern and replacement must be valid Go expressions. In the pattern,
single-character lowercase identifiers serve as wildcards matching arbitrary
sub-expressions; those expressions will be substituted for the same
identifiers in the replacement.
.P
When gofmt reads from standard input, it accepts either a full Go program or
a program fragment. A program fragment must be a syntactically valid
declaration list, statement list, or expression. When formatting such a
fragment, gofmt preserves leading indentation as well as leading and
trailing spaces, so that individual sections of a Go program can be
formatted by piping them through gofmt.
.
.SH EXAMPLES
To check files for unnecessary parentheses:

.Vb 6
\&      gofmt \-r '(a) \-> a' \-l *.go
.Ve

To remove the parentheses:

.Vb 6
\&      gofmt \-r '(a) \-> a' \-w *.go
.Ve

To convert the package tree from explicit slice upper bounds to implicit
ones:

.Vb 6
\&      gofmt \-r 'α[β:len(α)] \-> α[β:]' \-w $GOROOT/src/pkg
.Ve
.
.SS The simplify command
.
When invoked with \-s gofmt will make the following source transformations
where possible.

.Vb 6
\&    An array, slice, or map composite literal of the form:
\&        []T{T{}, T{}}
\&    will be simplified to:
\&        []T{{}, {}}
.Ve

.Vb 6
\&    A slice expression of the form:
\&        s[a:len(s)]
\&    will be simplified to:
\&        s[a:]
.Ve

.Vb 6
\&    A range of the form:
\&        for x, _ = range v {...}
\&    will be simplified to:
\&        for x = range v {...}
.Ve

.Vb 6
\&    A range of the form:
\&        for _ = range v {...}
\&    will be simplified to:
\&        for range v {...}
.Ve
.P
This may result in changes that are incompatible with earlier versions of
Go.
.SH AUTHOR
This manual page was written by Michael Stapelberg <stapelberg@debian.org>
and is maintained by the
Debian Go Compiler Team <team+go-compiler@tracker.debian.org>
based on the output of 'go doc cmd/gofmt'
for the Debian project (and may be used by others).