Configurable LSP `workspace/configuration` and `didChangeConfiguration` Support in Copilot CLI
- 主要語言
- 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