Home | History | Annotate | Download | only in gofmt
      1 // Copyright 2009 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 /*
      6 Gofmt formats Go programs.
      7 It uses tabs (width = 8) for indentation and blanks for alignment.
      8 
      9 Without an explicit path, it processes the standard input.  Given a file,
     10 it operates on that file; given a directory, it operates on all .go files in
     11 that directory, recursively.  (Files starting with a period are ignored.)
     12 By default, gofmt prints the reformatted sources to standard output.
     13 
     14 Usage:
     15 	gofmt [flags] [path ...]
     16 
     17 The flags are:
     18 	-d
     19 		Do not print reformatted sources to standard output.
     20 		If a file's formatting is different than gofmt's, print diffs
     21 		to standard output.
     22 	-e
     23 		Print all (including spurious) errors.
     24 	-l
     25 		Do not print reformatted sources to standard output.
     26 		If a file's formatting is different from gofmt's, print its name
     27 		to standard output.
     28 	-r rule
     29 		Apply the rewrite rule to the source before reformatting.
     30 	-s
     31 		Try to simplify code (after applying the rewrite rule, if any).
     32 	-w
     33 		Do not print reformatted sources to standard output.
     34 		If a file's formatting is different from gofmt's, overwrite it
     35 		with gofmt's version.
     36 
     37 Debugging support:
     38 	-cpuprofile filename
     39 		Write cpu profile to the specified file.
     40 
     41 
     42 The rewrite rule specified with the -r flag must be a string of the form:
     43 
     44 	pattern -> replacement
     45 
     46 Both pattern and replacement must be valid Go expressions.
     47 In the pattern, single-character lowercase identifiers serve as
     48 wildcards matching arbitrary sub-expressions; those expressions
     49 will be substituted for the same identifiers in the replacement.
     50 
     51 When gofmt reads from standard input, it accepts either a full Go program
     52 or a program fragment.  A program fragment must be a syntactically
     53 valid declaration list, statement list, or expression.  When formatting
     54 such a fragment, gofmt preserves leading indentation as well as leading
     55 and trailing spaces, so that individual sections of a Go program can be
     56 formatted by piping them through gofmt.
     57 
     58 Examples
     59 
     60 To check files for unnecessary parentheses:
     61 
     62 	gofmt -r '(a) -> a' -l *.go
     63 
     64 To remove the parentheses:
     65 
     66 	gofmt -r '(a) -> a' -w *.go
     67 
     68 To convert the package tree from explicit slice upper bounds to implicit ones:
     69 
     70 	gofmt -r '[:len()] -> [:]' -w $GOROOT/src
     71 
     72 The simplify command
     73 
     74 When invoked with -s gofmt will make the following source transformations where possible.
     75 
     76 	An array, slice, or map composite literal of the form:
     77 		[]T{T{}, T{}}
     78 	will be simplified to:
     79 		[]T{{}, {}}
     80 
     81 	A slice expression of the form:
     82 		s[a:len(s)]
     83 	will be simplified to:
     84 		s[a:]
     85 
     86 	A range of the form:
     87 		for x, _ = range v {...}
     88 	will be simplified to:
     89 		for x = range v {...}
     90 
     91 	A range of the form:
     92 		for _ = range v {...}
     93 	will be simplified to:
     94 		for range v {...}
     95 
     96 This may result in changes that are incompatible with earlier versions of Go.
     97 */
     98 package main
     99 
    100 // BUG(rsc): The implementation of -r is a bit slow.
    101