Is there anyway to keep “mix format” running and watching files on a specific directory?
I tried to run it automatically whenever I save a file, but it takes some time and I’m that kind of dev that saves pretty much everytime.
I might be wrong, but I feel that a great deal of the time it takes to format the file is related to starting mix up.
1 Like
dbern
May 6, 2020, 10:18pm
2
I’m not aware of a daemon, but I do know that editors can take advantage of ElixirLS which is a server running in the background (like a daemon I suppose) and perform tasks like formatting your code. You can adjust settings in your editor to format on save or on-demand. Might be faster to use ElixirLS than spinning up mix to format each time.
Which editor do you use?
2 Likes
The problem with that is that it would modify file twice. You can “hand craft” something like that by using entr(1)
, however I would say that you should use pre-save hook in your editor.
3 Likes
Thanks, @dbern !
I’m using NeoVim, with coc-elixir using elixir-ls to lint and autocomplete my code. I didn’t know that elixir-ls could also handle code formatting.
So, turns out coc
has a feature to run the format command offered by the language servers. Here’s how to do it:
1- Run the command :CocConfig
2- Add elixir
to the following configuration:
{
coc: {
preferences : {
"formatOnSaveFiletypes": ["html", "javascript", "elixir"]
}
}
}
You can also use :call CocAction('format')
to format on demand.
Thanks again, @dbern and @hauleth !
NobbZ
May 6, 2020, 10:43pm
6
Your client need to support the code format action.
I know nothing about which features are supported by coc.vim. You need to consult its documentation.
Or perhaps @hauleth can help you. I know he uses vim + elixir-ls, though I do not know which client he uses.
1 Like
Thanks, @NobbZ .
I was doing just that
After I made the change formatting became instantaneous. mix format
was taking more than a couple seconds sometimes.
dbern
May 6, 2020, 11:46pm
8
Yep you got it. I do something really similar
My vim config has a lot of trash in it but feel free to peruse it to find other tips
Here’s what I’m using (auto format and re-run affected tests):
watchexec -e 'ex,exs,eex,leex' -- 'mix format && mix test --stale'
You need to configure your editor to properly pick up external changes automatically and not nag you with a popup.
2 Likes
This worked brilliantly! Amazing! Thank you very much.
if you have a program like say
or speak
, you can do really fun stuff like:
ls **/*.{ex,exs,heex} | entr sh -c "mix format; mix test && say 'tests all green' || say 'we have a problem, some test failed'"
1 Like