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