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