Known formatters
Here is a list of all the formatters we tested. Feel free to send a PR to add other ones!
Contents
Single-language formatters:
- Cabal
- cabal-fmt
- Elm
- elm-format
- Golang
- gofmt
- gofumpt
- Haskell
- hlint
- ormolu
- stylish-haskell
- Lua
- StyLua
- Nix
- alejandra
- nixpkgs-fmt
- OCaml
- ocamlformat
- PureScript
- purs-tidy
- Python
- black
- Ruby
- rufo
- Rust
- rustfmt
- Scala
- scalafmt
- Shell
- shellcheck
- shfmt
- Terraform
- terraform fmt
- Typst
- typstfmt
Multilanguage formatters:
Cabal
cabal-fmt
Elm
elm-format
Golang
gofmt
gofumpt
Haskell
hlint
Ormolu
Make sure to use ormolu 0.1.4.0+ as older versions don't adhere to the spec.
command = "ormolu"
options = [
"--ghc-opt", "-XBangPatterns",
"--ghc-opt", "-XPatternSynonyms",
"--ghc-opt", "-XTypeApplications",
"--mode", "inplace",
"--check-idempotence",
]
includes = ["*.hs"]
stylish-haskell
Lua
StyLua
Nix
Alejandra
nixpkgs-fmt
OCaml
ocamlformat
PureScript
purs-tidy
Python
black
Ruby
rufo
Rufo is an opinionated ruby formatter. By default it exits with status 3 on file change so you have to pass the -x
option.
Rust
cargo fmt is not supported as it doesn't follow the spec. It doesn't allow to pass arbitrary files to be formatter, an ability which treefmt
relies on. Use rustfmt instead (which is what cargo fmt uses under the hood).
rustfmt
Scala
scalafmt
Shell
shellcheck
shfmt
command = "shfmt"
options = [
"-i",
"2", # indent 2
"-s", # simplify the code
"-w", # write back to the file
]
includes = ["*.sh"]
Terraform
terraform
Make sure to use terraform 1.3.0 or later versions, as earlier versions format only one file at a time. See the details here.
Typst
typstfmt
Multi-language formatters
clang-format
A tool to format C/C++/Java/JavaScript/Objective-C/Protobuf/C# code.
Note: This example focuses on C/C++ but can be modified to be used with other languages.
Prettier
An opinionated code formatter that supports many languages.