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