什么是 LSP

LSP(Language Server Protocol)是微软提出的协议,标准化了编程语言与编辑器/IDE 之间的通信。通过 LSP,编辑器可以获得:

  • 诊断信息:语法错误、类型错误、警告
  • 代码补全:智能提示
  • 跳转定义:Go to Definition
  • 查找引用:Find References
  • 悬停信息:类型、文档
  • 重构支持:重命名、提取函数等

OpenCode 的 LSP 集成

OpenCode 内置了 30+ LSP Server,覆盖主流编程语言:

语言LSP Server功能
TypeScript/JavaScripttypescript-language-server完整支持
Pythonpyright完整支持
Rustrust-analyzer完整支持
Gogopls完整支持
Javaeclipse.jdt.ls完整支持
C/C++clangd完整支持
Rubysolargraph基础支持
PHPintelephense基础支持

工作原理

当你在 OpenCode 中编辑代码时:

  1. 文件检测:OpenCode 根据文件扩展名自动识别语言
  2. 启动 LSP:启动对应的 Language Server
  3. 实时诊断:LSP 返回错误、警告信息
  4. 反馈给 LLM:诊断信息作为上下文传递给 AI

这意味着 AI 不仅看到你的代码,还能看到编译器的反馈,从而生成更准确的修改。

实际效果

没有 LSP 时:

> 修复这个函数的类型错误

[AI 猜测可能的错误并修改]

有 LSP 时:

> 修复这个函数的类型错误

[LSP 提供具体错误信息]
错误:src/utils.ts:15:8 - Type 'string' is not assignable to type 'number'

[AI 精确定位并修复]

配置 LSP

自动检测

默认情况下,OpenCode 会自动检测并启动 LSP:

{
  "lsp": {
    "enabled": true
  }
}

禁用特定语言

{
  "lsp": {
    "languages": {
      "python": { "enabled": false },
      "rust": { "enabled": true }
    }
  }
}

自定义 LSP 配置

{
  "lsp": {
    "languages": {
      "typescript": {
        "command": "typescript-language-server",
        "args": ["--stdio"],
        "settings": {
          "typescript.preferences.quoteStyle": "single",
          "typescript.format.semicolons": "insert"
        }
      }
    }
  }
}

LSP Tools(实验性)

OpenCode 提供实验性的 LSP Tool,让 AI 主动查询代码信息:

Tool说明
goToDefinition跳转到定义
findReferences查找所有引用
getHoverInfo获取悬停信息
getDiagnostics获取诊断信息
renameSymbol重命名符号

启用方式:

{
  "lsp": {
    "tools": {
      "enabled": true,
      "allowed": ["goToDefinition", "findReferences"]
    }
  }
}

安装 LSP Server

大部分 LSP Server 需要单独安装:

TypeScript

npm install -g typescript typescript-language-server

Python

pip install pyright

Rust

rustup component add rust-analyzer

Go

go install golang.org/x/tools/gopls@latest

故障排查

检查 LSP 状态

> /lsp status

LSP Servers:
✓ typescript - running (pid: 12345)
✓ python - running (pid: 12346)
✗ rust - not found (install rust-analyzer)

常见问题

问题解决方案
LSP not found安装对应的 Language Server
Slow startup大项目首次索引需要时间,耐心等待
High CPU usage检查是否有大量文件变更,考虑排除 node_modules
Inaccurate diagnostics检查 tsconfig.json 等配置文件

启用调试

export OPENCODE_LOG_LEVEL=debug
opencode 2>&1 | grep lsp