Editors

Visual Studio Code

In Progress

This extension is not yet published to the marketplace.

expert-lsp/vscode-expert is the official Visual Studio Code extension.

The extension is not yet stable and is not yet published to the extension marketplaces.

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

Neovim

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.

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
}
}
})

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 t
:config
(lsp-elixir-server-command '("path/to/expert" "--stdio")))
;; other config
)

Configuration

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

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

Sublime

TODO