- Notifications
You must be signed in to change notification settings - Fork0
one CLI to format your repo
License
KAction/treefmt
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Status: beta
treefmt
applies all the needed formatters to your project with one command line.
Before making contributions to any project, it’s common to get your code formatted according to the project’s standards. This task seems trivial from the first sight — you can simply set up the required language formatter in your IDE. But contributing to multiple projects requires more effort: you need to change the code formatter configs each time you switch between projects, or call formatters manually.
Formatting requires less effort if a universal formatter for multiple languages is in place, which is also project-specific.
treefmt
runs all your formatters with one command. It’s easy to configure and fast to execute.
Its main features are:
- Providing a unified CLI and output: You don’t need to remember which formatters are required for each project. Once you specify the formatters in the config file, you can trigger all of them with one command and get a standardized output.
- Running all the formatters in parallel: A standard script loops over your folders and runs each formatter consequentially. In contrast,
treefmt
runs formatters in parallel. This way, the formatting job takes less time. - Caching the changed files: When formatters are run in a script, they process all the files they encounter, no matter whether the code has changed. This unnecessary work can be eliminated if only the changed files are formatted.
treefmt
caches the changed files and marks them for re-formatting.
Just typetreefmt
in any folder to reformat the whole code tree. All in all, you get a fast and simple formatting solution.
You can install the tool by downloading the binary. Find the binaries for different architectureshere. Otherwise, you can install the package from the source code — either withcargo, or with help ofnix. We describe the installation process in detail in thedocs.
In order to usetreefmt
in your project, make sure the config filetreefmt.toml
is present in the root folder and is edited to your needs. You can generate it with:
$ treefmt --init
You can runtreefmt
in your project root folder like this:
$ treefmt
To explore the tool’s flags and options, type:
$treefmt --help
Additionally, there's a special tool calledtreefmt-nix
for using bothtreefmt
andnix
.
Fomatters are specified in the config filetreefmt.toml
, which is usually located in the project root folder. The generic way to specify a formatter is like this:
[formatter.<name>]command = "<formatter-command>"options = [“<formatter-option-1>”...]includes = ["<glob>"]
For example, if you want to usenixpkgs-fmt on your Nix project and rustfmt on your Rust project, thentreefmt.toml
will look as follows:
[formatter.nix]command = "nixpkgs-fmt"includes = ["*.nix"][formatter.rust]command = "rustfmt"options = ["--edition", "2018"]includes = ["*.rs"]
Before specifying the formatter in the config, make sure it’s installed.
To find and share existing formatter recipes, take a look at thedocs.
If you are a Nix user, you might also be interested intreefmt-nix to use Nix to configure and bring in formatters.
Treefmt
works with any formatter that adheres to thefollowing specification. For instance, you can go for:
- clang-format for Java
- gofmt for Golang
- Prettier for JavaScript/HTML/CSS
Find the full list of supported formattershere.
This project is still pretty new. Down the line we also want to add support for:
- IDE integration
- Pre-commit hooks
- Effective support of multiple formatters
- EditorConfig: unifies file indentationsconfiguration on a per-project basis.
- prettier: an opinionated code formatter for a number of languages.
- Super-Linter: a project by GitHub to lint all of your code.
- pre-commit: a framework for managing andmaintaining multi-language pre-commit hooks.
All contributions are welcome! We try to keep the project simple and focused. Please refer toContributing guidelines for more information.
Looking for help or customization?
Get in touch with Numtide to get a quote. We make it easy for companies towork with Open Source projects:https://numtide.com/contact
Unless explicitly stated otherwise, any contribution intentionally submitted for inclusion will be licensed under theMIT license without any additional terms or conditions.
About
one CLI to format your repo
Resources
License
Stars
Watchers
Forks
Packages0
Languages
- Rust89.1%
- Nix8.4%
- Shell2.0%
- Just0.5%