Problem with formatting elixir in vs code

Hello, I just started to learn elixir by following Alchemist Camp’s tutorial. And I had problem with formatting my code in vs code editor. I tried multiple formatter extensions. None of them worked for me. And the editor ran into compatibility problem. So, I deleted all the elixir related extension except ElixirLS. The editor finally stop giving me error. But it did not format my code either. Then I checked the “settings.json” file and updated the Elixir part as following:

“[elixir]”: {
“editor.defaultFormatter”: “JakeBecker.elixir-ls”
}

I tried to format it again after I reload vs code. It is not working still. Can someone help me with the format setting?

1 Like

You may find some configurations in a related thread:
https://elixirforum.com/t/how-can-i-start-using-the-new-heex-formatter-in-vs-code/51420/1

The one I posted there works fine for me.

The editor reports “Mix Formatter: Failed to format the document” with “Source: Elixir Mix Formatter(Extension)” when I try to format my code.

I am not sure that I can deduct the root cause of this problem by the provided error. Is there any chance that you have not installed the relevant plugins?

Hi @Haogudu I believe you are not configuring the right extension. You should be using GitHub - elixir-lsp/elixir-ls: A frontend-independent IDE "smartness" server for Elixir. Implements the "Language Server Protocol" standard and provides debugger support via the "Debug Adapter Protocol". The JackeBecker.elixir-ls is not the one to use.

1 Like

i actually haven’t been able to get any formatters to work properly. so i made a “stupid” solution.

I use the Run on Save extension to run mix format as it would in Bash (CLI). then all you need to do is make sure mix format actually works by using it in Bash.

2 Likes

Hi, @benwilson512 I have followed the link you post. It shows that I have already installed it. I uninstalled all the elixir extension and reinstalled the one in your link. Then I got a message “No mixfile found in project. To use a subdirectory, set elixirLS.projectDir in your settings” with “Source: ElixirLS: Elixir support and debugger(Extension)”. I have also tried @bdarla 's setting. Nothing works so far…

Hi @Haogudu can you show the project that you have?

My project folder only has a ex file with a few line of code. In its parent folder, I found a folder called “.elixir_ls” containing four files “.gitignore”, “calls.dets”, “modules.dets” and “tracer_db.manifest”. I am not sure if they are related to the issue I am having.

Do you have a file “.formatter.exs” with content such as the following?

[
  import_deps: [:ecto, :ecto_sql, :phoenix],
  subdirectories: ["priv/*/migrations"],
  plugins: [Phoenix.LiveView.HTMLFormatter],
  inputs: ["*.{heex,ex,exs}", "{config,lib,test}/**/*.{heex,ex,exs}", "priv/*/seeds.exs"]
]

It is yeah, Elixir LS expects a full mix project generally, it isn’t designed to work with just a handful of EX files.

It has some basic support for single files and dirs with no mix project but full feature set works only in mix projects

This is incorrect. The vscode extension is still using the original name. Unfortunately it’s not possible to rename a published extension. This is still a correct formatter config for ElixirLS config

"[elixir]": {
    "editor.defaultFormatter": "JakeBecker.elixir-ls"
  }
1 Like