LSP plugin: settings field in .lsp.json not sent via workspace/didChangeConfiguration

Resolved 💬 4 comments Opened Mar 12, 2026 by klercker Closed Jun 24, 2026

Description

When configuring an LSP server via a project-level .lsp.json, the settings field appears to not be forwarded to the language server via workspace/didChangeConfiguration. This prevents language servers from receiving workspace-specific configuration.

Reproduction

  1. Install ElixirLS as a Claude Code LSP plugin (via local marketplace)
  2. Create a project where mix.exs is in a subdirectory (e.g., repo-root/proc_flow/mix.exs)
  3. Add .lsp.json at the project root:
{
  "elixir-ls": {
    "command": "path/to/elixir-ls",
    "extensionToLanguage": { ".ex": "elixir" },
    "settings": {
      "elixirLS": {
        "projectDir": "proc_flow"
      }
    }
  }
}
  1. Restart Claude Code
  2. ElixirLS starts but cannot find mix.exs — its cwd remains the repo root
  3. Cross-module go-to-definition and workspace symbols don't work

Expected behavior

The settings from .lsp.json should be sent to the LSP server via workspace/didChangeConfiguration after initialization, allowing ElixirLS to use projectDir to locate the mix project in a subdirectory.

Additional context

  • workspaceFolder field also doesn't appear to change the rootUri sent in the initialize request
  • initializationOptions are sent correctly (hover/docs work for opened files)
  • ElixirLS reads projectDir from settings via workspace/didChangeConfiguration, not from initializationOptions
  • This affects any monorepo layout where the language project root differs from the git root

Environment

  • Claude Code: latest
  • macOS
  • ElixirLS v0.30.0

View original on GitHub ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗