Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make it easy to list files that are covered/uncovered by formatting matches #244

Open
tmuehlbacher opened this issue Aug 24, 2023 · 2 comments
Labels
enhancement New feature or request

Comments

@tmuehlbacher
Copy link

Is your feature request related to a problem? Please describe.

I would like to be able to reliably tell that all of the files in my repo are covered by treefmt and also see files that are missing a formatter.

Describe the solution you'd like

An output similar to git ls-files, perhaps.
I could be a command line switch to report the status, a message when using the --verbose flag or separate CLI flags to report either one of the two groups.

Describe alternatives you've considered

I ran git ls-files and reduced the output using a manually written regex based on my treefmt.toml file.

@tmuehlbacher tmuehlbacher added the enhancement New feature or request label Aug 24, 2023
@tmuehlbacher
Copy link
Author

I have another use-case for this request.

I am looking into ways to integrate treefmt into Emacs for formatting on-save. For this it would be useful to be able to determine if one particular file can be formatted using treefmt. (The behavior of git ls-files would work here as well except that a non-zero exit code would be convenient if the path is not covered by treefmt.toml.)

That way I can enable calling treefmt on-save only if it's supported and otherwise maybe fall back to formatters that are configured globally by the editor (in my case by the Emacs format-all package).

@brianmcgee
Copy link
Member

@tmuehlbacher I have just implemented 1b517c6, which does a couple things.

By default, treefmt will log a warning for every path which does not match one or more formatters.

Note

Cached paths will not be emitted again until they have changed. So you'll see the warning the first time a file is added to the cache, and not on subsequent runs.

❯ nix fmt -- -c
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/.env
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/.envrc
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/.gitignore
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/LICENSE
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/docs/.vitepress/config.mts
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/docs/public/init.gif
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/docs/public/just-use-go.png
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/docs/public/logo.png
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/docs/public/logo.svg
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/docs/public/treefmt.gif
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/docs/vhs/init.tape
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/docs/vhs/treefmt.tape
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/flake.lock
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/go.mod
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/go.sum
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/gomod2nix.toml
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/init.toml
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/elm/src/Main.elm
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/go/go.mod
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/haskell-frontend/Main.hs
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/haskell-frontend/Setup.hs
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/haskell-frontend/haskell-frontend.cabal
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/haskell/Foo.hs
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/haskell/Main.hs
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/haskell/Nested/Foo.hs
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/haskell/Setup.hs
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/haskell/haskell.cabal
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/haskell/treefmt.toml
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/html/scripts/.gitkeep
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/nixpkgs.toml
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/python/main.py
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/python/requirements.txt
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/python/virtualenv_proxy.py
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/ruby/bundler.rb
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/rust/Cargo.toml
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/rust/src/main.rs
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/shell/foo.sh
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/terraform/main.tf
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/terraform/two.tf
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/touch.toml
WARN format: no formatter for path: /home/brian/Development/com/github/numtide/treefmt/test/examples/treefmt.toml
traversed 99 files
emitted 99 files for processing
matched 58 files to formatters
formatted 0 files in 542.674671ms

You can change this behaviour using the -u or --on-unmatched flag, changing the log level of the message.

nix fmt -- -c -u debug
nix fmt -- -c -u info
nix fmt -- -c -u warn
nix fmt -- -c -u error

# this will exit the process with an error on the first path found to have no formatter
nix fmt -- -c -u fatal 

In the long term I would like to add something like you describe above, but in the short term this might help.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants