Releases: numtide/treefmt
v2.5.0
Features
- thanks to @jfly you can now set
no-positional-arg-supporton a formatter to work around tools that don't accept positional file arguments #636 #679 - upgraded to Go 1.26.1 #678
Nixpkgs Tracker
https://nixpkgs-tracker.ocfox.me/?pr=507711
Bugfixes
- fixed a context read bug in
gitandjujutsuwalkers #678
Changelog
- 40cade8: feat: add a
max-batch-sizeoption for formatters (@jfly) - 9855f4e: chore: rename
max-batch-sizetoviolates-rule-1(@jfly) - 56cfe32: chore: rename
violates-rule-1tono-positional-arg-support(@brianmcgee) - adec8d5: feat: upgrade to go 1.26.1 (@brianmcgee)
- 759af1e: fix: bad read ctx in git and jujutsu readers (@brianmcgee)
- b69ae67: Fix typo: processes -> process (@jfly)
- 25362da: fix(deps): update module mvdan.cc/sh/v3 to v3.13.1 (@renovate[bot])
- 6db9cd4: fix(deps): update module golang.org/x/sync to v0.20.0 (@renovate[bot])
Full Changelog: v2.4.1...v2.5.0
v2.4.1
Bugfixes
- we now skip git submodules, as they will have their own formatting rules #661
- cancelling execution with
ctrl-cshould now be respected again when formatting large repos (e.g. nixpkgs)
Nixpkgs Tracker
https://nixpkgs-tracker.ocfox.me/?pr=494652
Changelog
- flake: migrate from cachix to cache.numtide.com by @Mic92 in #655
- fix: ignore git submodules by @bitbloxhub in #661
- fix: context cancellation by @brianmcgee in #663
Full Changelog: v2.4.0...v2.4.1
v2.4.0
Features
- thanks to @delafthi we now support jujutsu #601 🎉
- temporary files for processing stdin are no longer created within the tree root #624
Nixpkgs Tracker
https://nixpkgs-tracker.ocfox.me/?pr=453282
Bugfixes
- global excludes are now handled correctly when processing stdin #641
- no longer segfaulting if tree root is a symlink #595
- force removal of cache db when clearing the cache #592
Changelog
- 718fbbb: Workaround for darwin build issue (@jfly)
- b5f54fa:
path ... not inside the tree root: Show computed relative path (@9999years) - de5d307: feat(walk): add jujutsu walker (@delafthi)
- d7cb4d2: feat: add
evalConfigfrom nixpkgs (@MattSturgeon) - b68d328: feat: introduce tmp path for stdin files (@brianmcgee)
- 6cfbdf0: fix(jujutsu): remove unnecessary unquoting of file paths (@delafthi)
- 109948a: fix:
treefmt .no longer segfaults if.is root and symlink (@jfly) - 3a3b57c: fix: add jujutsu to devshell (@brianmcgee)
- 8c25148: fix: force-remove db file when clearing cache (@brianmcgee)
- 5d318c2: fix: processing stdin with a globally excluded path (@brianmcgee)
- 3750fdb: fixup! fix: cachix/install-nix-action version in gh pages workflow (@brianmcgee)
- e8274d4: refactor: simplify one line of nix code (@MattSturgeon)
v2.3.1
Bugfixes
- automatic resolution of the tree root with
git rev-parse --show-toplevelwas only being applied whenwalkwas set togitand notauto.
Nixpkgs PR Tracker
https://nixpkgs-tracker.ocfox.me/?pr=409400
Changelog
- f24fc53: Merge pull request #588 from numtide/fix/default-tree-root-cmd (@brianmcgee)
- 288ee07: fix: better logic for tree-root-cmd defaulting when walk is auto (@brianmcgee)
v2.3.0
Features
- you can now specify the tree root with a command
--tree-root-cmdorTREEFMT_TREE_ROOT_CMD. When using thegitwalker, if no other tree root has been specified, it will default togit rev-parse --show-toplevel. This negates the need for--tree-root-file .git/config.
Bugfixes
- fixes handling of the tree root when it is a symlink.
Nixpkgs PR Tracker
https://nixpkgs-tracker.ocfox.me/?pr=407639
Changelog
- 3c8acf4: Fix broken link (@jfly)
- a22a307: Fix when tree root is symlink (@9999years)
- b97672a: feat: find tree root via a user-specified command (@brianmcgee)
- 1c19088: fix(deps): update module github.com/charmbracelet/log to v0.4.2 (@renovate[bot])
- 11ea13e: fix(deps): update module golang.org/x/sync to v0.14.0 (@renovate[bot])
- b74fbb4: fix(deps): update module golang.org/x/sys to v0.33.0 (@renovate[bot])
v2.2.1
Bugfixes
- respect
.gitignorewhen traversing untracked files ingitwalker.
Nixpkgs PR Tracker
https://nixpkgs-tracker.ocfox.me/?pr=397034
Changelog
v2.2.0
Features
- we now traverse untracked files in the git walker.
- a new
-q|--quietflag has been added which will suppress all output except for errors. - for users who don't quiet need
treefmt-nixbut still want to configuretreefmtwith nix, there are now
treefmt.withConfigandtreefmt.buildConfighelper functions exposed directly from the package itself (NixOS/nixpkgs#390147).
Bugfixes
- we now ignore symlinks when traversing.
- static shell completions should now work for
bash,zshandfish, and can be generated with
treefmt --completion <bash|zsh|fish>. - improved error reporting if a formatter command cannot be found.
- we no longer hang for 10 seconds when
stderris a dumbtty.
Nixpkgs PR Tracker
https://nixpkgs-tracker.ocfox.me/?pr=394906
Changelog
- 621144f: better error if command cannot be found (@Mic92)
- 855eb9a: docs(README): update motivation (@zimbatm)
- f4336fd: feat(docs): auto-generate usage snippet (@brianmcgee)
- 583681d: feat(docs): improve docs package (@brianmcgee)
- 5861604: feat(docs): refine setup (@brianmcgee)
- 3828aaf: feat(docs): rename content directory to site (@brianmcgee)
- b0731a2: feat: add
withConfig&buildConfigfrom nixpkgs (@MattSturgeon) - 10c9a72: feat: add a quiet flag to suppress all output except for errors (@brianmcgee)
- b76d839: feat: change default log level for unmatched to INFO instead of WARN (@brianmcgee)
- 43f943f: feat: enforce formatter name format (@brianmcgee)
- 30e1ecd: feat: improve error handling in format Run method (@brianmcgee)
- d182c6d: feat: log the config file used at DEBUG level instead of INFO (@brianmcgee)
- 21cefd7: feat: print stats to stderr instead of stdout (@brianmcgee)
- 9662ee6: feat: traverse untracked files in git walker (@brianmcgee)
- d17a8d6: feat: update to go 1.24 (@brianmcgee)
- e90b952: fix(go): update termenv to v0.16.0 (@zimbatm)
- d82a9fc: fix: bad usage of require.Errorf (@brianmcgee)
- ce65379: fix: ignoring symlinks (#528) (@gabyx)
- bbf3177: fix: move path resolution logging to debug instead of error (@brianmcgee)
- 2503227: fix: shell completions (@brianmcgee)
v2.1.1
Bugfixes
- fixes a subtle concurrency bug which can cause
treefmtto not exit with an error code if a formatter fails - fixes emojis and other non-ASCII characters in file paths 😂
Nixpkgs PR Tracker
https://nixpkgs-tracker.ocfox.me/?pr=360123
Changelog
- f8a1f44: README: fix coverage branch (@brianmcgee)
- d535b1d: README: new format (@zimbatm)
- e41339a: README: remove Rust to Go section (@brianmcgee)
- 3aaaf7c: README: remove golangci-lint workflow (@brianmcgee)
- 6698ee6: fix: bad links in README.md (@o-az)
- ab89e0b: fix: exiting with error if formatters fail (@brianmcgee)
- 887e9e9: fix: more bad links in README.md (@o-az)
- 91aef76: fix: non-ascii paths in git walker (@brianmcgee)
- a0be22d: fix: set go module to v2 (@brianmcgee)
- d5a39b0: fixup! fix: non-ascii paths in git walker (@brianmcgee)
v2.1.0
Better configuration
We replaced kong with cobra+viper for cli processing and configuration.
This brings two new features:
- Option overrides with environment variables.
- More options can now be configured in
treefmt.toml.
The order of precedence between flags, env variables, and config is now also correct.
See here for more info.
Simpler codebase
Many improvements have been made to simplify the codebase and make it easier to follow.
In addition, we no longer rely on go-git; instead, we use git itself.
We have seen some issues with go-git and decided that it wasn't adding much value and would always remain a source of discrepancy with git itself.
Better testing
Thanks to jfly and their (sometimes excruciating 😜) attention to detail, we have fixed some bugs, refined some features, and improved the quality of testing overall.
Better documentation
It might not look as pretty as before, but we moved back to mkdocs-material.
The main driver for the change was a better story around versioning, which is being provided by mike.
Nixpkgs PR Tracker
https://nixpkgs-tracker.ocfox.me/?pr=354455
Changelog
- d7c1064: Avoid hanging: ensure we always close
f.filesCh(@jfly) - e47674d: Clarify in the spec that the formatter MUST process the given files (@jfly)
- 962d695: ci: add mergify config (@brianmcgee)
- 94c53c5: ci: run golangci-lint as a flake check instead of github workflow (@brianmcgee)
- c131adc: feat: add connect timeout to bolt db (@brianmcgee)
- 45592a9: feat: add test helper for changing work directory (@brianmcgee)
- b834fa3: feat: best-effort application of files to formatters (@brianmcgee)
- 6bfe249: feat: bump golangci-lint version to 1.61.0 in github workflow (@brianmcgee)
- 6cadbbc: feat: create a separate docs devshell (@brianmcgee)
- b956dcd: feat: improve cache busting test (@brianmcgee)
- 9e45e55: feat: improve cache test (@brianmcgee)
- d7c39b6: feat: improve change detection (@brianmcgee)
- 9d9ea4e: feat: improve change working directory test (@brianmcgee)
- 500c356: feat: improve cpu profile test (@brianmcgee)
- 13849f2: feat: improve fail on change test (@brianmcgee)
- e32b5a2: feat: improve fail on change test (@brianmcgee)
- 782c7a0: feat: improve git test (@brianmcgee)
- 5659267: feat: improve missing formatter test (@brianmcgee)
- 57abb78: feat: improve paths handling (@brianmcgee)
- d0f5990: feat: improve prj root env test (@brianmcgee)
- 40e18a3: feat: improve specifying formatters test (@brianmcgee)
- 7a717ec: feat: improve unmatched test (@brianmcgee)
- 39774dc: feat: log treefmt command and output in tests (@brianmcgee)
- 71b262f: feat: match before checking cache (@brianmcgee)
- fc88f98: feat: more stringent golangci-lint rules (@brianmcgee)
- 21fbdc0: feat: refactor caching approach (@brianmcgee)
- ca655f5: feat: refactor processing (@brianmcgee)
- 66bdc82: feat: refine deterministic order test (@brianmcgee)
- 45ed5e8: feat: refine includes/excludes test (@brianmcgee)
- bda4138: feat: refine paths arg test (@brianmcgee)
- 41712b5: feat: refine run in subdir test (@brianmcgee)
- 9d53c96: feat: refine stdin test (@brianmcgee)
- 9fc9e67: feat: refine treefmt helper api in test (@brianmcgee)
- 9d521a9: feat: refine treefmt test helper (@brianmcgee)
- 48d4b4b: feat: remove globals from stats package (@brianmcgee)
- 202acb9: feat: remove relative path optimization in filesystem walker (@brianmcgee)
- bac4a0d: feat: replace kong with cobra/viper (@brianmcgee)
- 5d3de7c: feat: simplify .envrc (@brianmcgee)
- d195f79: feat: simplify devshell (@brianmcgee)
- 844f3fd: feat: simplify git walking (@brianmcgee)
- 93c8343: feat: simplify stats recording in filesystem reader (@brianmcgee)
- 8701a8f: feat: update flake inputs (@brianmcgee)
- 0ee561e: fix: correct handling of absolute and relative paths (@jfly)
- 4f1f3d6: fix: do not cache formatting errors (@brianmcgee)
- 6824497: fix: duplicate iota in walk.Type enum (@brianmcgee)
- 8aeee1d: fix: exit with error if any formatters fail (@brianmcgee)
- df4de90: fix: formatter_test (@brianmcgee)
- 2d3398c: fix: git module domain (@brianmcgee)
- f6d1b13: fix: golanci-lint workflow (@brianmcgee)
- 7740e3a: fix: gomod2nix.toml (@brianmcgee)
- 9ce6522: fix: normalize and enforce stdin paths as well (@jfly)
- 147dcdb: fix: path handling and checking git index (@brianmcgee)
- 5306a5e: fix: resolve commands relative to the root (@zimbatm)
- db7b305: fix: unmatched reporting global excludes (@brianmcgee)
- d490e98: fix: use PRJ_ROOT to find config (@brianmcgee)
v2.0.5
Bugfixes
- When walking the filesystem with
git, we were skipping executable files. There is a test which should have detected this. In this case, the test also had a bug 🤦♂️ Thanks to @akshaymankar for the fix. The test has also been updated. This affects users using formatters such asshellcheckorshfmtto format their executable shell scripts.
--fail-on-change improvement
We now log the path that has changed at error level, making it easier to understand why CI builds are failing.
Changelog
- c53a1f1: feat: log changed files at error level when --fail-on-change is enabled (@brianmcgee)
- a581352: fix: Do not exclude executables in git walker (@akshaymankar)
- 1734bcf: fix: remove assertFormatted, use assertStats instead (@brianmcgee)