github / github/copilot-cli

Configurable LSP `workspace/configuration` and `didChangeConfiguration` Support in Copilot CLI

未關閉
#3,402 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
area:configuration area:tools
主要語言
Shell
星號
11.2k
分支
1.9k
平均合併
14 小時 16 分鐘
30 天內合併 PR
6

描述

### 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:

```json
{
"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_

貢獻指南

開啟貢獻指南

研究方向

該 issue 將 LSP 方法 workspace/didChangeConfiguration 和 workspace/configuration 確定為相關進入點;首先追蹤 Copilot CLI 如何啟動 LSP 伺服器並路由這些訊息。完成的標準是每個語言伺服器都能透過這兩種方法接收任意巢狀的設定,包括範例中的 Intelephense 設定。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
shell
領域
cli, tooling
Issue 類型
功能
難度
4/5
預估耗時
3-5 天
活躍度
冷清
描述清晰度
基本清楚
新手友好度
55/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。