My env and context
- Elixir 1.19.1
- Erlang 28.1.1
- Editor: vscodium (Basically same as vscode)
- Vscodium Extension: ElixirLS v0.30.0
- Not sure if it matters: zsh, macos arm
- I’m a beginner in elixir and beam
My problem
I have a language agnostic repo, and I’m trying to get my editor to format my script files.
Example scripts/upcase
#!/usr/bin/env elixir
case System.argv() do
[] -> IO.read(:stdio, :all)
args -> Enum.join(args, " ")
end
|> String.upcase()
|> IO.puts()
When I open this file on my editor, it detects the language and syntax highlights correctly but format file command doesn’t work.
So I thought I could do it via mix format but that didn’t work either, silently exits without formatting.
What I tried
mix format scripts/upcaseis silently exiting, no changes.- Could it be because my lang agnostic repo doesn’t have
.formatter.exsfile?mix format –-dot-formatter ~/.formatter.exs scripts/upcase-
❯ cat ~/.formatter.exs [ inputs: ["scripts/upcase"] ] - still silently exiting, file is not changed.
- After reading the mix format docs carefully, I realized I can pipe string into
mix format --
mix format - < scripts/upcase > /tmp/temp && mv /tmp/temp scripts/upcase -
Yes this works, but it’s very clunky.
-
Why could this be?
So I dived into the source, and I think this block is the culprit
defp find_formatter_for_file(file, formatter_opts) do
# ...
cond do
# ...
ext in ~w(.ex .exs) ->
&elixir_format(&1, [file: file] ++ formatter_opts)
true ->
& &1
end
# ...
end
Can I create a formatter plugin for extensionless files?
I thought this could be a solution, but I am not sure what’s the best way to do this since elixir_format/2 is a private method, see on github.
Should I copy the method’s body, and use Code.format_string!/2 ?






















