105 lines
3.2 KiB
Go
105 lines
3.2 KiB
Go
|
// Copyright 2009 The Go Authors. All rights reserved.
|
|||
|
// Use of this source code is governed by a BSD-style
|
|||
|
// license that can be found in the LICENSE file.
|
|||
|
|
|||
|
/*
|
|||
|
Gofmt formats Go programs.
|
|||
|
It uses tabs for indentation and blanks for alignment.
|
|||
|
Alignment assumes that an editor is using a fixed-width font.
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
Usage:
|
|||
|
gofmt [flags] [path ...]
|
|||
|
|
|||
|
The flags are:
|
|||
|
-d
|
|||
|
Do not print reformatted sources to standard output.
|
|||
|
If a file's formatting is different than gofmt's, print diffs
|
|||
|
to standard output.
|
|||
|
-e
|
|||
|
Print all (including spurious) errors.
|
|||
|
-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.
|
|||
|
-r rule
|
|||
|
Apply the rewrite rule to the source before reformatting.
|
|||
|
-s
|
|||
|
Try to simplify code (after applying the rewrite rule, if any).
|
|||
|
-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.
|
|||
|
|
|||
|
Debugging support:
|
|||
|
-cpuprofile filename
|
|||
|
Write cpu profile to the specified file.
|
|||
|
|
|||
|
|
|||
|
The rewrite rule specified with the -r flag must be a string of the form:
|
|||
|
|
|||
|
pattern -> replacement
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
Examples
|
|||
|
|
|||
|
To check files for unnecessary parentheses:
|
|||
|
|
|||
|
gofmt -r '(a) -> a' -l *.go
|
|||
|
|
|||
|
To remove the parentheses:
|
|||
|
|
|||
|
gofmt -r '(a) -> a' -w *.go
|
|||
|
|
|||
|
To convert the package tree from explicit slice upper bounds to implicit ones:
|
|||
|
|
|||
|
gofmt -r 'α[β:len(α)] -> α[β:]' -w $GOROOT/src
|
|||
|
|
|||
|
The simplify command
|
|||
|
|
|||
|
When invoked with -s gofmt will make the following source transformations where possible.
|
|||
|
|
|||
|
An array, slice, or map composite literal of the form:
|
|||
|
[]T{T{}, T{}}
|
|||
|
will be simplified to:
|
|||
|
[]T{{}, {}}
|
|||
|
|
|||
|
A slice expression of the form:
|
|||
|
s[a:len(s)]
|
|||
|
will be simplified to:
|
|||
|
s[a:]
|
|||
|
|
|||
|
A range of the form:
|
|||
|
for x, _ = range v {...}
|
|||
|
will be simplified to:
|
|||
|
for x = range v {...}
|
|||
|
|
|||
|
A range of the form:
|
|||
|
for _ = range v {...}
|
|||
|
will be simplified to:
|
|||
|
for range v {...}
|
|||
|
|
|||
|
This may result in changes that are incompatible with earlier versions of Go.
|
|||
|
*/
|
|||
|
package main
|
|||
|
|
|||
|
// BUG(rsc): The implementation of -r is a bit slow.
|
|||
|
// BUG(gri): If -w fails, the restored original file may not have some of the
|
|||
|
// original file attributes.
|