Skip to content

Emacs

Setup

Download the latest release: https://github.com/elixir-lsp/elixir-ls/releases/latest and unzip it into a directory (this is the directory referred to as the "path-to-elixir-ls/release" below)

If using lsp-mode add this configuration:

(use-package lsp-mode
  :commands lsp
  :ensure t
  :diminish lsp-mode
  :hook
  (elixir-mode . lsp)
  :init
  (add-to-list 'exec-path "path-to-elixir-ls/release"))

For eglot users:

(require 'eglot)
;; This is optional. It automatically runs `M-x eglot` for you whenever you are in `elixir-mode`
(add-hook 'elixir-mode-hook 'eglot-ensure)
;; Make sure to edit the path appropriately, use the .bat script instead for Windows
(add-to-list 'eglot-server-programs '(elixir-mode "path-to-elixir-ls/release/language_server.sh"))

The official lsp-mode package includes a client for the Elixir Language Server.

Whenever opening a project for the first time, you will be prompted by emacs-lsp to select the correct project root. In that occasion, you also have the opportunity to blacklist projects. Information about projects is stored in a file pointed by the lsp-session-file variable. Its default location is ~/.emacs.d/.lsp-session-v1. You may need to prune or amend this file if you change your mind about blacklisting a project or if you erroneously select a project root. For more information about the lsp-session-file and emacs-lsp in general, please refer to the official documentation.

Remember that ElixirLS requires Erlang/OTP 22 and Elixir 1.10.0 or higher to run, so ensure that Erlang and Elixir are available in your PATH. This can be achieved, for example, by using the exec-path-from-shell Emacs package.

Restarting the language server

You may want to quickly restart the language server for a given workspace (e.g. after an update or in case of a server crash). To do so:

M-x lsp-workspace-restart

Troubleshooting

To be sure that you don't have outdated or incompatible packages installed, you may also want to rename your ~/.emacs.d directory while you are troubleshooting your ElixirLS Emacs setup.

Also, ensure that Erlang, Elixir (i.e. erl, escript and friends) and the language_server.sh script are all available in your PATH. If they are not, you can try the following:

;; Ensure your Emacs environment looks like your user's shell one
(package-require 'exec-path-from-shell)
(exec-path-from-shell-initialize)

Finally, to enable logging on the client-side, just:

(setq lsp-log-io t)

You can then follow the client logs for the current workspace by doing:

M-x lsp-workspace-show-log

Tips and Tricks

Shortcuts for code lenses and quick actions

You can run M-x lsp-avy-lens to show letters next to code lenses. You can then press those letters to trigger the respective action.

If your sideline is enabled ((setq lsp-ui-sideline-enable t)), you can also use M-x lsp-execute-code-action to trigger quick-fix actions.