credo-language-server
credo-language-server is an LSP implementation for Credo.
Features
- Project wide diagnostics
- Code Actions
Editor Support
- Neovim: elixir-tools.nvim
- VSCode: elixir-tools.vscode
-
Emacs
Using lsp-mode:
Support for credo-language-server is currently in progress: https://github.com/emacs-lsp/lsp-mode/pull/4068.
Using eglot:
(require 'eglot)(setq exec-path(append exec-path '("path/to/credo-language-server/bin")))(add-to-list'eglot-server-programs'((elixir-mode elixir-ts-mode) .'("credo-language-server" "--stdio=true")))Eglot only allows one server per mode, but it is possible to configure eglot alternatives to prompt for a specific language server.
(require 'eglot)(setq exec-path(append exec-path'("path/to/credo-language-server/bin""path/to/elixir-ls/bin")))(add-to-list'eglot-server-programs`((elixir-mode elixir-ts-mode heex-ts-mode) .,(eglot-alternatives`(,(if (and (fboundp 'w32-shell-dos-semantics)(w32-shell-dos-semantics))'("language_server.bat")'("language_server.sh"))("credo-language-server" "--stdio=true"))))) -
Helix
Here is an example configuration for
languages.toml[[language]]name = "elixir"scope = "source.elixir"injection-regex = "elixir"file-types = ["ex", "exs"]roots = ["mix.exs"]auto-format = falsediagnostic-severity = "Hint"comment-token = "#"indent = {tab-width = 2, unit = " "}language-servers = ["elixir-ls", "credo"][language-server.elixir-ls]command = "elixir-ls"config = { elixirLS.dialyzerEnabled = true }[language-server.credo]command = "/path/to/executable/credo-language-server"args = ["--stdio=true", "--port=999"]
Installation
The preferred way to use credo-language-server is through one of the supported editor extensions.
If you need to install credo-language-server on it's own, you can download the executable hosted by the GitHub release. The executable is an Elixir script that utilizes Mix.install/2.
Note
Credo Language Server creates an .elixir-tools hidden directory in your project.
This should be added to your project's .gitignore.
Code Actions
DisableCheck
Check: all
If there is a check that you'd wish to disable, you can trigger the code action on that line to insert a magic comment to disable that check.
ModuleDocFalse
Check: Credo.Check.Readability.ModuleDoc
Inject a @moduledoc false snippet into the module.
Built with gen_lsp