Skip to content

elixir-tools/credo-language-server

Repository files navigation

Important

Next LS now has support for Credo, so Credo Language Server will not receive further significant updates.

credo-language-server

Discord Hex.pm GitHub Discussions

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:

    credo-language-server is included with lsp-mode and can be installed by running M-x lsp-install-server credo-language-server.

    You might want to set the lsp-credo-version to the latest release:

    (custom-set-variables '(lsp-credo-version "0.1.3"))

    or by running M-x customize-group lsp-credo and updating the version.

    Visit lsp-mode for detailed installation instructions.

    Using eglot:

    (require 'eglot)
    
    (add-to-list 'exec-path "path/to/credo-language-server/bin")
    
    (with-eval-after-load 'eglot
      (add-to-list 'eglot-server-programs
                   `((elixir-ts-mode heex-ts-mode elixir-mode) .
                     ("credo-language-server" "--stdio=true"))))
    
    (add-hook 'elixir-mode-hook 'eglot-ensure)
    (add-hook 'elixir-ts-mode-hook 'eglot-ensure)
    (add-hook 'heex-ts-mode-hook 'eglot-ensure)

    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 = false
    diagnostic-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.

Contributing

Running tests

# setup the test project
$ (cd test/support/project && mix deps.get)

# run the tests
$ mix test

Built with gen_lsp