github.com/spotify/syslog-redirector-golang@v0.0.0-20140320174030-4859f03d829a/src/cmd/gofmt/doc.go (about)

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