Files
nexus/wiki/concepts/LSPOrchestrator.md
2026-05-03 05:42:12 +08:00

69 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "LSPOrchestrator"
type: concept
tags: ["LSP", "code-intelligence", "orchestration", "multi-language"]
sources: ["lsp-index-engineer.md"]
last_updated: 2026-04-29
---
## Definition
LSP 编排器LSP Orchestrator是在 graphd 架构中协调多个语言服务器并发运行的中间层,负责统一管理不同语言的 LSP 客户端、正确处理各服务器的能力协商、并将对异构 LSP 响应格式标准化为统一格式。
## Core Mechanism
### Client Initialization
```typescript
class LSPOrchestrator {
async initialize(projectRoot: string) {
const tsClient = new LanguageClient('typescript', {
command: 'typescript-language-server',
args: ['--stdio'],
rootPath: projectRoot
});
const phpClient = new LanguageClient('php', {
command: 'intelephense',
args: ['--stdio'],
rootPath: projectRoot
});
await Promise.all([
this.initializeClient('typescript', tsClient),
this.initializeClient('php', phpClient)
]);
}
}
```
### Multi-Language Coordination
- **并行初始化**:所有语言服务器并发启动
- **能力协商**:为每个服务器独立检查 `ServerCapabilities`
- **语言检测**:根据文件扩展名路由到对应语言服务器
- **请求批处理**:合并相邻请求以减少往返开销
- **缓存策略**:积极缓存但精确失效
### Capability-Negotiation Pattern
```typescript
async getDefinition(uri: string, position: Position): Promise<Location[]> {
const lang = this.detectLanguage(uri);
const client = this.clients.get(lang);
if (!client || !this.capabilities.get(lang)?.definitionProvider) {
return [];
}
return client.sendRequest('textDocument/definition', {
textDocument: { uri },
position
});
}
```
## Performance Optimization
- **请求批处理**:合并多个相邻 LSP 请求
- **零拷贝技术**:内存映射文件和大数据集
- **Worker Threads**CPU 密集型操作分流到 Worker
- **锁无关数据结构**:并发访问无锁化
## Connections
- [[LSPOrchestrator]] ← part_of ← [[GraphDaemon]]
- [[LSPOrchestrator]] ← coordinates ← [[LanguageServerProtocol]]
- [[LSPOrchestrator]] ← feeds ← [[SemanticCodeGraph]]
- [[LSPOrchestrator]] ← uses ← [[IncrementalGraphUpdate]]