Describe the bug
I have an umbrella project with a single .formatter.exs at the root. When Dexter formats-on-save a file with Phoenix LiveView's attr macro, it changes this:
to this
To reproduce
Here's my file tree:
| mix.exs
| .formatter.exs
/ apps
/ app_web
| mix.exs
/ lib
| component.ex
Expected behavior
I'd expect the locals_without_parens (from import_deps) present in the root-level .formatter.exs to prevent that.
Debug logs
2026/04/15 11:21:48 Formatter: started persistent process for /apps/app_web/.formatter.exs (pid 29467)
Environment
- Dexter version (
dexter --version): 0.5.3
- Elixir version (
elixir --version): 1.19.5
- Editor and version: Windsurf 1.110.1
- OS: macOS Tahoe 26.4
It appears that when attempting to resolve the nearest .formatter.exs, traversal stops when a directory containing a mix.exs is reached. The expected file layout for running mix format for umbrella apps isn't super well-documented, but this setup (a single .formatter.exs at the umbrella root) seems at least somewhat common. When no nested config file exists under apps/{app}/.formatter.exs, I'd expect the LSP to fallback to the umbrella root's file instead.
Describe the bug
I have an umbrella project with a single
.formatter.exsat the root. When Dexter formats-on-save a file with Phoenix LiveView'sattrmacro, it changes this:to this
To reproduce
Here's my file tree:
Expected behavior
I'd expect the
locals_without_parens(fromimport_deps) present in the root-level.formatter.exsto prevent that.Debug logs
Environment
dexter --version): 0.5.3elixir --version): 1.19.5It appears that when attempting to resolve the nearest
.formatter.exs, traversal stops when a directory containing amix.exsis reached. The expected file layout for runningmix formatfor umbrella apps isn't super well-documented, but this setup (a single.formatter.exsat the umbrella root) seems at least somewhat common. When no nested config file exists underapps/{app}/.formatter.exs, I'd expect the LSP to fallback to the umbrella root's file instead.