Introducing ElixirLS, the Elixir Language Server

Version 0.5.0 was released today! :confetti_ball:

Here are the highlights:

General:

Major changes:

Changes:

  • Support WorkspaceSymbols (go to symbol in workspace) without dialyzer being enabled (thanks Jason Axelson) #263
  • Add completions for @moduledoc false and @doc false (thanks Jason Axelson) #288
  • No longer always return a static list of keywords for completion (thanks Jason Axelson) #259

Bug Fixes:

Also numerous https://github.com/elixir-lsp/elixir_sense/ changes, improvements, and bug fixes

VSCode Changes

Updating to the latest release should happen automatically

  • Major improvement: Support workspaces with multiple elixir projects (especially those where the Elixir project is not part in the root) (thanks Alessandro Tagliapietra) #70
    • Support per-folder configuration for many settings (makes the multi-workspace support more powerful) (thanks AJ Foster) #110
  • Major improvement: Improved support for phoenix templates (thanks Marlus Saraiva) #93
    • Shows errors in .eex and .leex files (instead of associated .ex file)
  • Improve syntax highlighting following pipes (thanks Dusty Pomerleau) #81
  • Activate extension whenever workspace contains elixir files (thanks Jason Axelson) #107
  • Make heredocs and most sigils auto-close when used with quotes and triple quotes (thanks Jarrod Davis) #101
  • Improve syntax highlighting following pipes (thanks Dusty Pomerleau) #81
  • Make % a dedicated punctuation scope in elixir syntax file (thanks Dusty Pomerleau) #72

I want to give a huge thanks to all the contributors to this release! :heart: As you can see from the changelog there are quite a few!

Full changelog

(Note: if you’re using the “ElixirLS Fork” version of the VSCode plugin you should switch back to ElixirLS)

51 Likes

It was a bit late but a pull request for upgrading elixir-ls v0.5.0 was open in vim-lsp here.

2 Likes

Would love it if someone could upload the VSCode package to https://open-vsx.org/ so that users of the latest version of VSCodium – the fully open source binary of VSCode – can access ElixirLS via that marketplace without having to hack around to the Microsoft marketplace (as newer versions of VSCodium now require).

3 Likes

Just published ElixirLS to the openvsx marketplace! :confetti_ball:

5 Likes

Hey Folks! Just curious if anyone has tried ElixirLS with the Release Candidate of Neovim 0.5.

(It is supposed to have a built-in LSP client! - https://neovim.io/roadmap/)

1 Like

I have been using it with nvim-lsp package which’s provide language server setup including ElixirLS.

Version 0.6.0 was released today! :confetti_ball:

Here are the highlights:

General:

Major changes:

Improvements:

Bug Fixes:

  • Fix issue with formatting and deps handling (thanks Thanabodee Charoenpiriyakij) #345
    • This would manifest as ** (Mix.Error) Unknown dependency :ecto_sql given to :import_deps in the formatter configuration.
  • Fix formatting files in umbrella projects (thanks Drew Olson)#350
  • Fix callback suggesions (thanks Łukasz Samson) #359

Note: MIX_TARGET support was added in 0.5.0 but wasn’t added to the changelog until later:

  • Support MIX_TARGET so the language server can have target specific contexts, like with Nerves (thanks Jon Carstens) #299

Potentially breaking changes:

  • Do not format files that are not listed in inputs of .formatter.exs (thanks Tan Jay Jun) #315
    • Note this is especially important for files like mix.lock
  • Drop OTP 20 and Elixir 1.7.x support and set some version support guidelines (thanks Jason Axelson) #337

I want to give a huge thanks to all the contributors to this release! :heart:

Full Changelog

30 Likes

This is an awesome release :heart_eyes: Kudos to all who contributed!

I’ve just upgraded but the extension seems to have issues loading.

I’ve opened an issue here https://github.com/elixir-lsp/elixir-ls/issues/371 and will try to address later when time permits.


Update: seems to be a VS Code package issue so moved it to the right repo https://github.com/elixir-lsp/vscode-elixir-ls/issues/145

3 Likes

Yeah, turns out there were a couple issues with the packaging for the VSCode extension for 0.6.0. I’ve released a new version of the VSCode extension (0.6.1) that resolves them.

2 Likes

Apologies if I am just barging in to ask – what is the status of an Emacs LSP-mode integrated server? I am looking for something like in Rust where you can automatically call format on save, jump to definitions, run various mix sub-commands.

Last few updates I’ve seen:

Is there anything newer? Is there an officially blessed way to run ElixirLS with Emacs?

ElixirLS can do all of those except running arbitrary mix commands.

There’s two main LSP packages to use with Emacs, lsp-mode and eglot. lsp-mode is more featureful and what I would generally recommend (and is what I personally use). This wiki is generally up to date and a good overview: Emacs - Elixir Setup Configuration Wiki

4 Likes

Took me some fighting until I pinpoint where and what to put in ~/.spacemacs but it looks like it’s working now. Thank you for the pointer!

Is there an option to run mix format on a file after save?

Yes:

2 Likes

Thanks. I’m using Spacemacs casually for several months and still haven’t learned to properly customize it. Any idea where exactly in its init file should I put this block?

You do not need the full block, I just posted the full area because it was simpler for me :smiley: And sadly I can not tell where to put that in spacemacs.

Its basically the reason why I dropped spacemacs. All packages READMEs assumed vanilla emacs + use-package. It usually took me hours to find out where to put stuff.

After I dropped spacemacs and did a free form emacs config, which I later split into many files, organized similar to how Steve Purcell did, it became a lot easier. Eventually I got to the point where I had everything I need in my emacs config, and even though I did not leverage lazy loading, the config loaded within 5 to 7 seconds, while spacemacs never really got below 20, despite the fact that it advertised itself as “fast”.

Also, perhaps its time that someone opens an issue at spacemacs and tells them that Alchemist is not state of the art anymore but anyone uses lsp-mode/eglot + the LS.

PS: The important part is actually this:

(add-hook 'elixir-mode-hook ;; when we enter elixir mode
          (lambda ()        ;; call this function
            ;; Format on save, this buffer only.
            (add-hook 'before-save-hook #'lsp-format-buffer nil t)))

If you use eglot rather than lsp-mode you need to figure out what function you have to put there in the hook.

3 Likes

Thank you. Only added that last block to Spacemacs’ dotspacemacs/user-config function so now it looks like this:

(defun dotspacemacs/user-config ()
  (use-package lsp-mode
    :commands lsp
    :ensure t
    :diminish lsp-mode
    :hook
    (elixir-mode . lsp)
    :init
    (add-to-list 'exec-path "/Users/dimi/bin/elixir-ls/release"))

  (add-hook 'elixir-mode-hook
            (lambda ()
              (add-hook 'before-save-hook #'lsp-format-buffer nil t)))
  )

lsp-mode plus elixir-ls work, and so does formatting on save.

Very grateful for the assist. :023:

1 Like

Version 0.6.2 was released today! :tada:

Here are the highlights.

Improvements:

  • Add setup.bat support for windows (thanks E14) #374
  • Add a message when done fetching deps #380

Changes:

  • Remove query prefixes from workspace symbol search (the functionality is now longer supported by VSCode) (thanks Łukasz Samson) #396

Bug Fixes:

  • Improve formatting speed (thanks Matt Baker) #390
  • Fix warnings and errors around starting wx (thanks Łukasz Samson) #388
    • This fixes an issue when running ElixirLS in VSCode remote dev containers
  • Fix formatting on windows (thanks Po Chen) #375

VSCode:

Also:

As always, I want to give a huge thanks to all the contributors to this release! :heart:

Full changelog

9 Likes

The patch is open on vim-lsp-settings https://github.com/mattn/vim-lsp-settings/pull/341. :slight_smile:

1 Like

Did a git pull the other day and then git checkout v0.6.2. Both Elixir and Rust language servers fail with reasons I can’t find. Where should I look?

With Elixir I get “Server <…> status:starting exited with status exit. Do you want to restart it?”-- even if I press Y the same things happens until I press N.

Can anyone help?

EDIT: Sorry, had a bad day. It was as simple as asdf local erlang 23.1.5 because my project used an older version that I’ve since deleted. Apologies for polluting the thread.

2 Likes

Version 0.6.3 was released today! :confetti_ball:

Here are the highlights:

Major changes:

Improvements:

Bug Fixes:

Housekeeping:

VSCode:

As always, I want to give a huge thanks to all the contributors to this release! :heart:

Full changelog

33 Likes