Elixir - Zed

# Elixir

Elixir support is available through the Elixir extension.

- Tree-sitter:
  - elixir-lang/tree-sitter-elixir
  - phoenixframework/tree-sitter-heex
- Language servers:
  - elixir-lsp/elixir-ls
  - elixir-tools/next-ls
  - lexical-lsp/lexical

## Choosing a language server

The Elixir extension offers language server support for `elixir-ls`, `next-ls`, and `lexical`.

`elixir-ls` is enabled by default.

To switch to `next-ls`, add the following to your `settings.json`:

    {
      "languages": {
        "Elixir": {
          "language_servers": ["next-ls", "!elixir-ls", "..."]
        }
      }
    }

To switch to `lexical`, add the following to your `settings.json`:

    {
      "languages": {
        "Elixir": {
          "language_servers": ["lexical", "!elixir-ls", "..."]
        }
      }
    }

## Setting up `elixir-ls`

1. Install `elixir`:

    brew install elixir

2. Install `elixir-ls`:

    brew install elixir-ls

3. Restart Zed

> If `elixir-ls` is not running in an elixir project, check the error log via the command palette action `zed: open log`. If you find an error message mentioning: `invalid LSP message header "Shall I install Hex? (if running non-interactively, use \"mix local.hex --force\") [Yn]`, you might need to install `Hex`. You run `elixir-ls` from the command line and accept the prompt to install `Hex`.

### Formatting with Mix

If you prefer to format your code with Mix, use the following snippet in your `settings.json` file to configure it as an external formatter. Formatting will occur on file save.

    {
      "languages": {
        "Elixir": {
          "format_on_save": {
            "external": {
              "command": "mix",
              "arguments": ["format", "--stdin-filename", "{buffer_path}", "-"]
            }
          }
        }
      }
    }

### Additional workspace configuration options

You can pass additional elixir-ls workspace configuration options via lsp settings in `settings.json`.

The following example disables dialyzer:

    "lsp": {
      "elixir-ls": {
        "settings": {
          "dialyzerEnabled": false
        }
      }
    }

See ElixirLS configuration settings for more options.

### HEEx

Zed also supports HEEx templates. HEEx is a mix of EEx (Embedded Elixir) and HTML, and is used in Phoenix LiveView applications.

- Tree-sitter: phoenixframework/tree-sitter-heex