Editors

Visual Studio Code

The official extension for Visual Studio Code (and its forks, such as Cursor) is available as Expert LSP in the Visual Studio Marketplate and in the Open VSX Registry.

The extension will take care of installing Expert for you, if you wish.

Neovim

nvim-lspconfig

nvim-lspconfig supports Expert.

vim.lsp.enable "expert"

Configuration

To configure Expert settings, use vim.lsp.config:

vim.lsp.config("expert", {
settings = {
workspaceSymbols = {
minQueryLength = 0
}
}
})

elixir-tools.nvim

In Progress

This plugin does not yet support Expert

Caution

If you are using a Neovim distribution like LunarVim, AstroVim, or NVChad, please make sure to disable any Elixir LSP support that comes out of the box, as it will interfere with elixir-tools.nvim.

There is no "official" plugin for Neovim, but the elixir-tools.nvim plugin was created and is maintained by an Expert core team member.

Expert support in elixir-tools.nvim is still in progress.

The plugin will take care of installing the Expert for you if you wish.

Zed

Expert is managed by the first party Zed Elixir Extension.

Head to the Zed documentation to learn more about installing extensions.

Configuration

To configure Expert settings, add the following to your settings.json:

{
"lsp": {
"expert": {
"settings": {
"workspaceSymbols": {
"minQueryLength": 0
}
}
}
}
}

Helix

Add the following config to your ~/.config/helix/languages.toml.

[[language]]
name = "elixir"
scope = "source.elixir"
language-server = { command = "path/to/expert", args = ["--stdio=true"] }

If you are using the latest git version of helix use this:

[[language]]
name = "elixir"
scope = "source.elixir"
language-servers = ["expert"]
[language-server.expert]
command = "path/to/expert"
args = ["--stdio=true"]

Configuration

To configure Expert settings, add a config section to the language server definition in your languages.toml:

[language-server.expert]
command = "path/to/expert"
args = ["--stdio=true"]
[language-server.expert.config]
workspaceSymbols = { minQueryLength = 0 }

Emacs

The emacs instructions assume you're using use-package.

Eglot

Emacs version >= 30

(use-package eglot
:ensure nil ;; eglot is included in emacs >= 29
:config
(setf (alist-get '(elixir-mode elixir-ts-mode heex-ts-mode)
eglot-server-programs
nil nil #'equal)
(eglot-alternatives '(("path/to/expert" "--stdio"))))
;; other config
)

Emacs version <= 29

(use-package eglot
:ensure nil ;; eglot is included in emacs >= 29, use :ensure t if using an older version
:config
(setf (alist-get 'elixir-mode eglot-server-programs)
(eglot-alternatives '(("path/to/expert" "--stdio"))))
;; other config
)

Note

If you are using elixir-ts-mode instead of elixir-mode replace (alist-get 'elixir-mode eglot-server-programs) from the snippet above with (alist-get '(elixir-mode elixir-ts-mode heex-ts-mode) eglot-server-programs)

Configuration

To configure Expert settings, use eglot-workspace-configuration:

(setq-default eglot-workspace-configuration
'(:expert (:workspaceSymbols (:minQueryLength 0))))

lsp-mode

(use-package lsp-mode
:ensure nil
:hook ((elixir-mode elixir-ts-mode heex-ts-mode) . lsp-deferred)
:config
(add-to-list 'lsp-disabled-clients 'elixir-ls)
(lsp-register-client
(make-lsp-client
:new-connection (lsp-stdio-connection
'("/path/to/expert_darwin_arm64" "--stdio"))
:activation-fn (lsp-activate-on "elixir")
:server-id 'expert-elixir)))

Configuration

To configure Expert settings, use lsp-register-custom-settings:

(lsp-register-custom-settings
'(("workspaceSymbols.minQueryLength" 0)))

Sublime

TODO