opentofu/command/fmt.go
Dan Carley 64c1280951 command/fmt: Improve documentation for -diff and defaults (#6398)
* command/fmt: Document -diff doesn't disable -write

As noted in hashicorp/terraform#6343, this description misleadingly
suggested that the `-diff` option disables the `-write` option.

This isn't the case and because of the default options (described in
c753390) the behaviour of `terraform fmt -diff` is actually the same as
`terraform fmt -write -list -diff`.

Replace the "instead of rewriting" description to clarify that.

Documentation in hcl/fmtcmd is corrected in hashicorp/hcl#117 but it's not
really necessary to bump the dependency version.

* command/fmt: Show flag defaults in help text

These were documented on the website but not in the `-help` text. This
should help to clarify that you need to pass `-list=false -write=false
-diff` if you only want to see diffs.

Accordingly I've replaced the word "disabled" with "always false" in the
STDIN special cases so that it matches the terminology used in the defaults
and better indicates that it is overridden.

NB: The 3x duplicated defaults and documentation makes me feel uneasy once
again. I'm not sure how to solve that, though.
2016-04-29 00:39:53 +01:00

95 lines
2.0 KiB
Go

package command
import (
"flag"
"fmt"
"io"
"os"
"strings"
"github.com/hashicorp/hcl/hcl/fmtcmd"
"github.com/mitchellh/cli"
)
const (
stdinArg = "-"
fileExtension = "tf"
)
// FmtCommand is a Command implementation that rewrites Terraform config
// files to a canonical format and style.
type FmtCommand struct {
Meta
opts fmtcmd.Options
input io.Reader // STDIN if nil
}
func (c *FmtCommand) Run(args []string) int {
if c.input == nil {
c.input = os.Stdin
}
args = c.Meta.process(args, false)
cmdFlags := flag.NewFlagSet("fmt", flag.ContinueOnError)
cmdFlags.BoolVar(&c.opts.List, "list", true, "list")
cmdFlags.BoolVar(&c.opts.Write, "write", true, "write")
cmdFlags.BoolVar(&c.opts.Diff, "diff", false, "diff")
cmdFlags.Usage = func() { c.Ui.Error(c.Help()) }
if err := cmdFlags.Parse(args); err != nil {
return 1
}
args = cmdFlags.Args()
if len(args) > 1 {
c.Ui.Error("The fmt command expects at most one argument.")
cmdFlags.Usage()
return 1
}
var dirs []string
if len(args) == 0 {
dirs = []string{"."}
} else if args[0] == stdinArg {
c.opts.List = false
c.opts.Write = false
} else {
dirs = []string{args[0]}
}
output := &cli.UiWriter{Ui: c.Ui}
err := fmtcmd.Run(dirs, []string{fileExtension}, c.input, output, c.opts)
if err != nil {
c.Ui.Error(fmt.Sprintf("Error running fmt: %s", err))
return 2
}
return 0
}
func (c *FmtCommand) Help() string {
helpText := `
Usage: terraform fmt [options] [DIR]
Rewrites all Terraform configuration files to a canonical format.
If DIR is not specified then the current working directory will be used.
If DIR is "-" then content will be read from STDIN.
Options:
-list=true List files whose formatting differs (always false if using STDIN)
-write=true Write result to source file instead of STDOUT (always false if using STDIN)
-diff=false Display diffs of formatting changes
`
return strings.TrimSpace(helpText)
}
func (c *FmtCommand) Synopsis() string {
return "Rewrites config files to canonical format"
}