123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- // 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.
|