主题
LSP 语言服务器配置
OpenCode 内置了约 30+ 种语言服务器的支持,提供代码智能、诊断和导航能力。LSP(Language Server Protocol)是一种标准化协议,使 AI 代理能够更好地理解和分析代码。
内置支持的语言
OpenCode 预配置了以下语言的 LSP 服务器:
Web 开发
| 语言 | 服务器 | 扩展名 |
|---|---|---|
| TypeScript/JavaScript | typescript-language-server | .ts, .tsx, .js, .jsx |
| Vue | vue-language-server | .vue |
| Svelte | svelte-language-server | .svelte |
| Astro | astro-ls | .astro |
| HTML | vscode-html-language-server | .html |
| CSS | vscode-css-language-server | .css, .scss, .less |
系统编程
| 语言 | 服务器 | 扩展名 |
|---|---|---|
| Rust | rust-analyzer | .rs |
| C/C++ | clangd | .c, .cc, .cpp, .h, .hpp |
| Go | gopls | .go, .mod |
| Zig | zls | .zig |
后端开发
| 语言 | 服务器 | 扩展名 |
|---|---|---|
| Python | pyright-langserver | .py, .pyi |
| Java | jdtls | .java |
| Kotlin | kotlin-language-server | .kt, .kts |
| PHP | intelephense | .php |
| Ruby | solargraph | .rb |
| Elixir | elixir-ls | .ex, .exs |
其他语言
| 语言 | 服务器 | 扩展名 |
|---|---|---|
| Dart | dart-language-server | .dart |
| OCaml | ocamllsp | .ml, .mli |
| Gleam | gleam | .gleam |
| Clojure | clojure-lsp | .clj, .cljs |
自动激活
LSP 服务器会在检测到对应扩展名的文件时自动激活(前提是已安装相关依赖)。
配置结构
json
{
"lsp": {
"language-name": {
"disabled": false,
"command": ["server-command", "--stdio"],
"extensions": [".ext1", ".ext2"],
"env": {},
"initialization": {}
}
}
}配置字段说明
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
disabled | boolean | 否 | 禁用此语言服务器 |
command | string[] | 是 | 启动命令和参数 |
extensions | string[] | 是 | 关联的文件扩展名 |
env | object | 否 | 环境变量 |
initialization | object | 否 | 服务器初始化选项 |
常用语言服务器配置
TypeScript / JavaScript
json
{
"lsp": {
"typescript": {
"command": ["typescript-language-server", "--stdio"],
"extensions": [".ts", ".tsx", ".js", ".jsx"]
}
}
}安装:
bash
npm install -g typescript typescript-language-serverPython
使用 Pyright(推荐):
json
{
"lsp": {
"python": {
"command": ["pyright-langserver", "--stdio"],
"extensions": [".py", ".pyi"]
}
}
}安装:
bash
npm install -g pyright或使用 pylsp:
json
{
"lsp": {
"python": {
"command": ["pylsp"],
"extensions": [".py", ".pyi"]
}
}
}安装:
bash
pip install python-lsp-serverGo
json
{
"lsp": {
"go": {
"command": ["gopls"],
"extensions": [".go", ".mod", ".sum", ".work"]
}
}
}安装:
bash
go install golang.org/x/tools/gopls@latestRust
json
{
"lsp": {
"rust": {
"command": ["rust-analyzer"],
"extensions": [".rs"]
}
}
}安装:
bash
rustup component add rust-analyzerC/C++
json
{
"lsp": {
"cpp": {
"command": ["clangd"],
"extensions": [".c", ".cc", ".cpp", ".cxx", ".h", ".hpp", ".hh", ".hxx"]
}
}
}安装:
bash
# macOS
brew install llvm
# Ubuntu/Debian
sudo apt install clangd
# Windows
winget install LLVM.LLVMVue
json
{
"lsp": {
"vue": {
"command": ["vue-language-server", "--stdio"],
"extensions": [".vue"]
}
}
}安装:
bash
npm install -g @vue/language-server禁用 LSP
禁用所有 LSP
json
{
"lsp": false
}禁用特定语言
json
{
"lsp": {
"python": {
"disabled": true
}
}
}自定义 LSP 服务器
为项目特定或非内置语言添加 LSP 支持:
json
{
"lsp": {
"custom-lang": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"],
"env": {
"CUSTOM_VAR": "value"
},
"initialization": {
"settings": {
"option": "value"
}
}
}
}
}完整配置示例
json
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"command": ["typescript-language-server", "--stdio"],
"extensions": [".ts", ".tsx", ".js", ".jsx"]
},
"python": {
"command": ["pyright-langserver", "--stdio"],
"extensions": [".py", ".pyi"]
},
"go": {
"command": ["gopls"],
"extensions": [".go", ".mod", ".sum", ".work"]
},
"rust": {
"command": ["rust-analyzer"],
"extensions": [".rs"]
},
"cpp": {
"command": ["clangd"],
"extensions": [".c", ".cc", ".cpp", ".h", ".hpp"]
},
"vue": {
"command": ["vue-language-server", "--stdio"],
"extensions": [".vue"]
}
}
}LSP 功能
配置 LSP 后,OpenCode 可以利用以下能力:
| 功能 | 说明 |
|---|---|
| 代码补全 | 智能代码建议和自动完成 |
| 诊断 | 语法错误和警告检测 |
| 悬停信息 | 查看类型、文档等信息 |
| 定义跳转 | 跳转到符号定义 |
| 引用查找 | 查找所有引用位置 |
| 重命名 | 批量重命名符号 |
| 代码格式化 | 自动格式化代码 |
实验性 LSP 工具
启用实验性 LSP 工具功能,让 LLM 直接使用 LSP 能力:
bash
export OPENCODE_EXPERIMENTAL_LSP_TOOL=true启用后,代理可以使用 LSP 获取定义、引用、悬停信息和调用层次等。
调试 LSP
验证 LSP 服务器可用
bash
# TypeScript
typescript-language-server --version
# Python
pyright-langserver --version
# Go
gopls version
# Rust
rust-analyzer --version
# C/C++
clangd --version启用调试日志
json
{
"debugLSP": true
}或通过命令行:
bash
opencode --print-logs常见问题
LSP 服务器未找到
确保 LSP 服务器在 PATH 中:
bash
which typescript-language-server
which gopls
which clangdLSP 功能不工作
- 检查文件扩展名是否在配置的
extensions列表中 - 检查项目是否有必要的配置文件(如
tsconfig.json、go.mod) - 检查 LSP 服务器版本是否兼容
性能问题
对于大型项目,可以配置排除模式:
json
{
"lsp": {
"typescript": {
"command": ["typescript-language-server", "--stdio"],
"extensions": [".ts", ".tsx"],
"initialization": {
"preferences": {
"excludeLibrarySymbolsInNavTo": true
}
}
}
}
}PHP Intelephense 许可证
Intelephense 高级功能需要许可证密钥:
bash
# Unix
echo "YOUR_LICENSE_KEY" > ~/intelephense/licence.txt
# Windows
echo YOUR_LICENSE_KEY > %USERPROFILE%\intelephense\licence.txt下一步
- MCP 服务 - 扩展工具能力
- 配置详解 - 了解完整配置结构
- Agents 代理系统 - 配置自定义代理