Skip to content

Configurable LSP workspace/configuration and didChangeConfiguration Support in Copilot CLI #3402

@webevt

Description

@webevt

Describe the feature or problem you'd like to solve

Add support for configuring arbitrary Language Server Protocol (LSP) configuration payloads in Copilot CLI.

Proposed solution

Currently, Copilot CLI can launch LSP servers, but there is no way to control what is sent through the following LSP methods:

  • workspace/didChangeConfiguration
  • workspace/configuration

This makes many language servers partially unusable because critical settings cannot be provided to the server.

Problem

Many LSP servers rely heavily on runtime configuration delivered through LSP configuration requests instead of command-line arguments or environment variables.

For example, intelephense requires configuration for:

  • excluded file patterns
  • storage/indexing behavior
  • diagnostics
  • stubs
  • file size limits

Without support for configuration payloads:

  • large monorepos become slow or unusable
  • excluded/vendor/generated files cannot be filtered
  • indexing behavior cannot be tuned
  • workspace-specific settings cannot be applied

At the moment, Copilot CLI appears to start the server successfully but provides no mechanism for forwarding user-defined configuration objects to the LSP server. The option initializationOptions does not solve this problem either because many LSP servers - including Intelephense - expect runtime settings to be delivered specifically through the standard LSP configuration flow (workspace/didChangeConfiguration and workspace/configuration).

Proposed Solution

Allow arbitrary configuration blocks to be defined per language server and forwarded via:

  • workspace/didChangeConfiguration
  • responses to workspace/configuration

Example configuration:

{
  "php": {
    "command": "intelephense",
    "args": [
      "--stdio"
    ],
    "fileExtensions": {
      ".php": "php"
    },
    "configuration": {
      "intelephense": {
        "files": {
          "exclude": [
            "**/vendor/**",
            "**/var/cache/**",
            "**/node_modules/**"
          ]
        },
        "environment": {
          "phpVersion": "8.5"
        },
        "diagnostics": {
          "undefinedTypes": false
        }
      }
    }
  }
}

Expected Behavior

Copilot CLI should:

  1. Send the provided configuration object through workspace/didChangeConfiguration
  2. Respond to workspace/configuration requests using the configured values
  3. Support arbitrary nested JSON structures

Example prompts or workflows

No response

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:configurationConfig files, instruction files, settings, and environment variablesarea:toolsBuilt-in tools: file editing, shell, search, LSP, git, and tool call behavior
    No fields configured for Feature.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions