Skip to content

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.gogo 命令
rust.rsrust-analyzer 命令
pyright.py, .pyipyright 依赖
clangd.c, .cpp, .h, .hpp 等自动安装(C/C++ 项目)
jdtls.java安装了 Java SDK 21+
kotlin-ls.kt, .kts自动安装(Kotlin 项目)
dart.dartdart 命令
csharp.cs安装了 .NET SDK
fsharp.fs, .fsi 等安装了 .NET SDK
ruby-lsp.rb, .rake 等rubygem 命令
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.prismaprisma 命令
gleam.gleamgleam 命令
hls.hs, .lhshaskell-language-server-wrapper
julials.jljuliaLanguageServer.jl
sourcekit-lsp.swift, .objc, .objcppswift(macOS 需要 Xcode)
tinymist.typ, .typc自动安装(GitHub Releases)
yaml-ls.yaml, .yml自动安装 Red Hat yaml-language-server
zls.zig, .zonzig 命令

当检测到对应文件扩展名且满足依赖条件时,LSP 服务器自动启用。

注意:通过设置 OPENCODE_DISABLE_LSP_DOWNLOAD=true 可禁用自动下载 LSP 服务器。


工作原理

当 OpenCode 打开一个文件时:

  1. 检测文件扩展名,匹配已启用的 LSP 服务器
  2. 如果对应 LSP 服务器还未运行,则自动启动
  3. LSP 服务器提供诊断信息(类型错误、lint 警告等)
  4. 诊断信息反馈给 LLM,帮助其写出更正确的代码

配置

通过 opencode.jsonlsp 字段自定义 LSP 服务器行为:

json
{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {}
}

每个 LSP 服务器支持以下配置项:

属性类型说明
disabledboolean设为 true 禁用此 LSP 服务器
commandstring[]启动 LSP 服务器的命令
extensionsstring[]此 LSP 服务器处理的文件扩展名
envobject启动服务器时的环境变量
initializationobject发送给 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 服务器"示例。