• Stars
    star
    602
  • Rank 74,409 (Top 2 %)
  • Language
    Go
  • License
    MIT License
  • Created almost 4 years ago
  • Updated about 1 month ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

one CLI to format your repo [maintainers=@zimbatm,@brianmcgee]


logo
treefmt โ€” one CLI to format your repo

Support room on Matrix

Status: beta

treefmt applies all the needed formatters to your project with one command line.

Motivation

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.

About treefmt

treefmt runs all your formatters with one command. Itโ€™s easy to configure and fast to execute.

asciicast

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 type treefmt in any folder to reformat the whole code tree. All in all, you get a fast and simple formatting solution.

Installation

You can install the tool by downloading the binary. Find the binaries for different architectures here. Otherwise, you can install the package from the source code โ€” either with cargo, or with help of nix. We describe the installation process in detail in the docs.

Usage

In order to use treefmt in your project, make sure the config file treefmt.toml is present in the root folder and is edited to your needs. You can generate it with:

$ treefmt --init

You can run treefmt 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 called treefmt-nix for using both treefmt and nix.

Configuration

Fomatters are specified in the config file treefmt.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 use nixpkgs-fmt on your Nix project and rustfmt on your Rust project, then treefmt.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 the docs.

If you are a Nix user, you might also be interested in treefmt-nix to use Nix to configure and bring in formatters.

Compatibility

Treefmt works with any formatter that adheres to the following 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 formatters here.

Upcoming features

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

Related projects

  • EditorConfig: unifies file indentations configuration 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 and maintaining multi-language pre-commit hooks.

Contributing

All contributions are welcome! We try to keep the project simple and focused. Please refer to Contributing guidelines for more information.

License

Unless explicitly stated otherwise, any contribution intentionally submitted for inclusion will be licensed under the MIT license without any additional terms or conditions.

More Repositories

1

devshell

Per project developer environments
Nix
1,213
star
2

flake-utils

Pure Nix flake utility functions [maintainer=@zimbatm]
Nix
1,126
star
3

system-manager

Manage system config using nix on any distro
Rust
651
star
4

treefmt-nix

treefmt nix configuration
Nix
226
star
5

nix-filter

a small self-contained source filtering lib
Nix
194
star
6

nixpkgs-unfree

nixpkgs with the unfree bits enabled
Nix
89
star
7

nits

Nix & NATS
Go
78
star
8

nix-gl-host

Run OpenGL/Cuda programs built with Nix, on all Linux distributions.
Python
77
star
9

systemd-vaultd

Provide access to vault secrets to systemd services
Nix
63
star
10

nixos-facter

Declarative nixos-generate-config [maintainer=@brianmcgee]
Go
48
star
11

blueprint

Nix without the glue code
Nix
39
star
12

nix-vm-test

Re-use the NixOS VM test infrastructure to test Ubuntu, Debian, and Fedora machines.
Nix
34
star
13

nar-serve

Unpack and serve NAR file content on the fly
Go
30
star
14

terraform-provider-linuxbox

Configure Linux machines with Terraform
Go
29
star
15

bld

Build nix targets based on git repository directories
Go
29
star
16

prj-spec

Project Base Directory Specification
Shell
28
star
17

deploykit

Execute commands remote via ssh and locally in parallel with python
Python
27
star
18

nix-stdlib

experimental nix prelude
Nix
25
star
19

action-cli

GitHub Actions without JavaScript
Rust
19
star
20

nix-eval-cache

Skips build/evaluation based on modification date of nix files.
Rust
18
star
21

software-consulting-documents

Software Consulting Legal Documents
16
star
22

zero-to-odoo

Nix
15
star
23

github-deploy

Track deployments on GitHub PRs
Go
13
star
24

clean-git-action

Leave no build artifacts behind
Shell
11
star
25

serve-go

Like vercel/serve but for production. Serve SPA apps quickly.
Go
10
star
26

build-go-cache

buildGoCache speeds up nix's buildGoModule by pre-compiling imported go modules
Nix
10
star
27

nixos-rke2

NixOS modules for RKE2
Nix
9
star
28

nix-gitignore

filterSource using .gitignore (experiment)
Go
7
star
29

numtide-github-runner

the best self-hosted github runners on the market
Nix
7
star
30

terraform-deploy-nixos-flakes

Shell
6
star
31

nixos-facter-modules

A series of NixOS modules to be used in conjunction with https://github.com/numtide/nixos-facter [maintainer=@brianmcgee]
Nix
5
star
32

terraform-upload-ami

Upload and import the AMI from a VHD
HCL
5
star
33

generate-terraform-provider-shim

Handle third-party Terraform providers
Go
4
star
34

harvest-invoice-calculator

A little tool that helps generating invoices from Harvest data
Python
4
star
35

configure-nix-action

Configures Nix on GitHub Actions
Shell
4
star
36

terraform-nixos-install

HCL
3
star
37

nixpkgs-terraform

terraform-related packages with Nix
Nix
3
star
38

gh-v6.com

GitHub downloads, with IPv6
HTML
3
star
39

terraform-nix-build

Build Nix with the external provider
Python
2
star
40

kartusche

Go
2
star
41

terraform-linuxbox-traefik

HCL
2
star
42

terraform-linuxbox-monitorpack

Seed DevOps monitoring module
HCL
2
star
43

activate

A small resource converger tool
Nix
2
star
44

mkdocs-numtide

Our own mkdocs template, based on the material design
Nix
2
star
45

docker-host-forwarder

Docker image that will forward udp/tcp to docker host
Shell
2
star
46

nix-vm-test-demo

Dump of the code used in the nix-vm-test demo
Nix
2
star
47

terraform-nixos-amis

Fork of https://github.com/tweag/terraform-nixos/tree/master/aws_image_nixos
HCL
2
star
48

nixionary.org

HTML
2
star
49

NixOS-Fleet-Update-Provider

Terraform provider to update a homogeneous NixOS fleet configuration
Shell
2
star
50

yarnlock2json

Convert `yarn.lock` files to JSON
JavaScript
1
star
51

cert-wizard

Go
1
star
52

nixos-facter-docs

Documentation for NixOS Facter and NixOS Facter Modules
Nix
1
star
53

treefmt-docs

Treefmt Docs
Nix
1
star
54

.github

GitHub Settings for the org
1
star