Skip to main content

Command: fmt

The opentf fmt command is used to rewrite OpenTF configuration files to a canonical format and style. This command applies a subset of the OpenTF language style conventions, along with other minor adjustments for readability.

Other OpenTF commands that generate OpenTF configuration will produce configuration files that conform to the style imposed by opentf fmt, so using this style in your own files will ensure consistency.

The canonical format may change in minor ways between OpenTF versions, so after upgrading OpenTF we recommend to proactively run opentf fmt on your modules along with any other changes you are making to adopt the new version.

We don't consider new formatting rules in opentf fmt to be a breaking change in new versions of OpenTF, but we do aim to minimize changes for configurations that are already following the style examples shown in the OpenTF documentation. When adding new formatting rules, they will usually aim to apply more of the rules already shown in the configuration examples in the documentation, and so we recommend following the documented style even for decisions that opentf fmt doesn't yet apply automatically.

Formatting decisions are always subjective and so you might disagree with the decisions that opentf fmt makes. This command is intentionally opinionated and has no customization options because its primary goal is to encourage consistency of style between different OpenTF codebases, even though the chosen style can never be everyone's favorite.

We recommend that you follow the style conventions applied by opentf fmt when writing OpenTF modules, but if you find the results particularly objectionable then you may choose not to use this command, and possibly choose to use a third-party formatting tool instead. If you choose to use a third-party tool then you should also run it on files that are generated automatically by OpenTF, to get consistency between your hand-written files and the generated files.

Usage

Usage: opentf fmt [options] [target...]

By default, fmt scans the current directory for configuration files. If you provide a directory for the target argument, then fmt will scan that directory instead. If you provide a file, then fmt will process just that file. If you provide a single dash (-), then fmt will read from standard input (STDIN).

The command-line flags are all optional. The following flags are available:

  • -list=false - Don't list the files containing formatting inconsistencies.
  • -write=false - Don't overwrite the input files. (This is implied by -check or when the input is STDIN.)
  • -diff - Display diffs of formatting changes.
  • -check - Check if the input is formatted. Exit status will be 0 if all input is properly formatted. If not, exit status will be non-zero and the command will output a list of filenames whose files are not properly formatted.
  • -recursive - Also process files in subdirectories. By default, only the given directory (or current directory) is processed.