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