Appearance
OpenCode 与 Language Server Protocol(LSP)集成,在 AI 操作文件时自动启动对应的 LSP 服务器,收集类型错误和 lint 警告等诊断信息并反馈给 LLM。内置支持 TypeScript、Go、Rust、Python 等 30+ 种语言,也支持自定义 LSP 服务器。
OpenCode 与 Language Server Protocol(LSP)集成,利用语言诊断信息帮助 LLM 更好地理解和修改你的代码。当 AI 写了类型错误的代码时,LSP 反馈的错误信息会直接让它知道需要修正。
内置 LSP 服务器
OpenCode 内置了 30+ 种 LSP 服务器,满足条件时自动启用:
| LSP 服务器 | 适用扩展名 | 触发条件 |
|---|---|---|
| typescript | .ts, .tsx, .js, .jsx 等 | 项目中有 typescript 依赖 |
| eslint | .ts, .tsx, .js, .jsx 等 | 项目中有 eslint 依赖 |
| gopls | .go | 有 go 命令 |
| rust | .rs | 有 rust-analyzer 命令 |
| pyright | .py, .pyi | 有 pyright 依赖 |
| clangd | .c, .cpp, .h, .hpp 等 | 自动安装(C/C++ 项目) |
| jdtls | .java | 安装了 Java SDK 21+ |
| kotlin-ls | .kt, .kts | 自动安装(Kotlin 项目) |
| dart | .dart | 有 dart 命令 |
| csharp | .cs | 安装了 .NET SDK |
| fsharp | .fs, .fsi 等 | 安装了 .NET SDK |
| ruby-lsp | .rb, .rake 等 | 有 ruby 和 gem 命令 |
| php intelephense | .php | 自动安装(PHP 项目) |
| astro | .astro | 自动安装(Astro 项目) |
| svelte | .svelte | 自动安装(Svelte 项目) |
| vue | .vue | 自动安装(Vue 项目) |
| lua-ls | .lua | 自动安装(Lua 项目) |
| terraform | .tf, .tfvars | 自动安装(GitHub Releases) |
| deno | .ts, .tsx, .js 等 | 有 deno 命令且有 deno.json |
| bash | .sh, .bash, .zsh, .ksh | 自动安装 bash-language-server |
| oxlint | .ts, .tsx, .js 等 | 项目中有 oxlint 依赖 |
| prisma | .prisma | 有 prisma 命令 |
| gleam | .gleam | 有 gleam 命令 |
| hls | .hs, .lhs | 有 haskell-language-server-wrapper |
| julials | .jl | 有 julia 和 LanguageServer.jl |
| sourcekit-lsp | .swift, .objc, .objcpp | 有 swift(macOS 需要 Xcode) |
| tinymist | .typ, .typc | 自动安装(GitHub Releases) |
| yaml-ls | .yaml, .yml | 自动安装 Red Hat yaml-language-server |
| zls | .zig, .zon | 有 zig 命令 |
当检测到对应文件扩展名且满足依赖条件时,LSP 服务器自动启用。
注意:通过设置
OPENCODE_DISABLE_LSP_DOWNLOAD=true可禁用自动下载 LSP 服务器。
工作原理
当 OpenCode 打开一个文件时:
- 检测文件扩展名,匹配已启用的 LSP 服务器
- 如果对应 LSP 服务器还未运行,则自动启动
- LSP 服务器提供诊断信息(类型错误、lint 警告等)
- 诊断信息反馈给 LLM,帮助其写出更正确的代码
配置
通过 opencode.json 的 lsp 字段自定义 LSP 服务器行为:
json
{
"$schema": "https://opencode.ai/config.json",
"lsp": {}
}每个 LSP 服务器支持以下配置项:
| 属性 | 类型 | 说明 |
|---|---|---|
disabled | boolean | 设为 true 禁用此 LSP 服务器 |
command | string[] | 启动 LSP 服务器的命令 |
extensions | string[] | 此 LSP 服务器处理的文件扩展名 |
env | object | 启动服务器时的环境变量 |
initialization | object | 发送给 LSP 服务器的初始化选项 |
设置环境变量
json
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"env": {
"RUST_LOG": "debug"
}
}
}
}设置初始化选项
初始化选项在 LSP initialize 请求时发送,各服务器的可用选项不同:
json
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
}
}
}
}
}禁用 LSP
禁用所有 LSP 服务器:
json
{
"$schema": "https://opencode.ai/config.json",
"lsp": false
}禁用特定 LSP 服务器:
json
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true
}
}
}添加自定义 LSP 服务器
json
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"]
}
}
}PHP Intelephense 授权
PHP Intelephense 提供付费高级功能,可通过 License Key 激活。将 License Key 放入以下位置(文件只包含 Key,无其他内容):
- macOS/Linux:
$HOME/intelephense/license.txt - Windows:
%USERPROFILE%/intelephense/license.txt
常见问题
Q: LSP 集成对 AI 生成代码有什么实质帮助?
A: 假设 AI 生成了一段有类型错误的 TypeScript 代码,TypeScript LSP 会立即报告错误,OpenCode 会把这个错误信息反馈给 LLM,让它修正——就像你在 IDE 里看到红色波浪线并手动修复一样,只不过是 AI 自动处理的。
Q: LSP 服务器会影响性能吗?
A: LSP 服务器在后台运行,通常影响较小。如果有性能问题,可以通过 disabled: true 禁用不需要的服务器。
Q: 我的语言不在列表里,能用 LSP 吗?
A: 只要你的语言有支持 stdio 模式的 LSP 服务器,就可以通过自定义配置接入。参考上面的"添加自定义 LSP 服务器"示例。