mirror of
https://github.com/opentofu/opentofu.git
synced 2025-01-01 11:47:07 -06:00
cc41c7cfa0
This uses the `fmtcmd` package which has recently been merged into HCL. Per the usage text, this rewrites Terraform config files to their canonical formatting and style. Some notes about the implementation for this initial commit: - all of the fmtcmd options are exposed as CLI flags - it operates on all files that have a `.tf` suffix - it currently only operates on the working directory and doesn't accept a directory argument, but I'll extend this in subsequent commits - output is proxied through `cli.UiWriter` so that we write in the same way as other commands and we can capture the output during tests - the test uses a very simple fixture just to ensure that it is working correctly end-to-end; the fmtcmd package has more exhaustive tests - we have to write the fixture to a file in a temporary directory because it will be modified and for this reason it was easier to define the fixture contents as a raw string
76 lines
1.6 KiB
Go
76 lines
1.6 KiB
Go
package command
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/hashicorp/hcl/hcl/fmtcmd"
|
|
"github.com/mitchellh/cli"
|
|
)
|
|
|
|
const (
|
|
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
|
|
}
|
|
|
|
func (c *FmtCommand) Run(args []string) int {
|
|
args = c.Meta.process(args, false)
|
|
|
|
cmdFlags := flag.NewFlagSet("fmt", flag.ContinueOnError)
|
|
cmdFlags.BoolVar(&c.opts.List, "list", false, "list")
|
|
cmdFlags.BoolVar(&c.opts.Write, "write", false, "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) > 0 {
|
|
c.Ui.Error("The fmt command expects no arguments.")
|
|
cmdFlags.Usage()
|
|
return 1
|
|
}
|
|
|
|
dir := "."
|
|
output := &cli.UiWriter{Ui: c.Ui}
|
|
err := fmtcmd.Run([]string{dir}, []string{fileExtension}, nil, 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]
|
|
|
|
Rewrites all Terraform configuration files in the current working
|
|
directory to a canonical format.
|
|
|
|
Options:
|
|
|
|
-list List files whose formatting differs
|
|
|
|
-write Write result to source file instead of STDOUT
|
|
|
|
-diff Display diffs instead of rewriting files
|
|
|
|
`
|
|
return strings.TrimSpace(helpText)
|
|
}
|
|
|
|
func (c *FmtCommand) Synopsis() string {
|
|
return "Rewrites config files to canonical format"
|
|
}
|