brkn
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 ?
Trending in Questions
Hello!
Suppose you are building workflow (order / task / payment) processing system with the following requirements:
Each workflow con...
New
I’m aware of 2 such projects, are there others?
git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
Hi all,
I’m working on a Phoenix project where I need to make external HTTP requests and I’m trying to choose between Req and HTTPoison....
New
How do I tell Hologram not to escape HTML when substituting into templates?
{Textile.render(@product.long_description)}
escapes the HTM...
New
I’d like to create a file with 600 permissions (rw-------), but there’s a race condition if I create it and then change the permissions. ...
New
Hi,
we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New
When I use Mix.install with a git dependency, using git@github.com:... how do I change the SSH identity used?
I’ve got two Github accoun...
New
Other Trending Topics
Hey there,
I haven’t seen a list of useful Elixir specific skills for the popular AI tools yet so I’m starting one here with my first.
...
New
Hi everyone :waving_hand:
I wanted to share something I’ve been building — NowBlind, a random chat app designed to help people discover ...
New
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
(I just needed to vent somewhere and LinkedIn is full of hope, or hype, I’m not sure which exactly)
AI dream has many faces, but general...
New
Localize is the next generation localisation library for Elixir. Think of it as ex_cldr version 3.0. The first version will be released ...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #code-sync
- #discussion
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #ai
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #blog-post
- #elixirconf-us
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #security
- #elixirconf-eu
- #api
- #forms
- #performance










Showing Posts 1 to 3- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
Eiji
I would not recommend writing
Elixirscripts without extension. I understand that you don’t want to type.exs, but you can create a shell aliases for such cases. You can even write a simple look that would iterate all of your projects, enter the scripts directory, read files and create alias for each of them. In my opinion that the best you can do.However it’s not the limit of your possibilities. If you are fine with a workaround then you can add a custom plugin for your
formatter.exsconfiguration. Such plugin can register itself to""(empty string) as one of allowed extensions. SincePath.extname/1returns empty string only if a string does not have extension your plugin should always work only for the scripts you wanted.The rest is to call the standard formatter inside your plugin as you already did in your 3rd point in the shell.
For more information please take a look at the following documentation pages:
System.cmd/3@ Elixir documentationPath.extname/1@ Elixir documentationderek-zhou
I’d recommend to keep the .exs for source file, and make a separate installation of the scripts by:
~/bin, with extension drppedchmod a+xitThe same can be done for any scripting languages, not just elixir.
brkn
I know that I can copy, or even better create symlinks, but I would rather not.
It’s not impossible, vscode’s official typescript extension can handle this just fine. Try it yourself, it works for both unsaved editor or extensionless file.