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