OpenCode 会集成你的 Language Server Protocol(LSP),帮助 LLM 与你的代码库进行交互。它会使用 diagnostics(诊断信息)向 LLM 提供反馈。


内置支持(Built-in)

OpenCode 内置了多种常见语言的 LSP server:

LSP Server Extensions Requirements
astro .astro 会为 Astro 项目自动安装
bash .sh, .bash, .zsh, .ksh 自动安装 bash-language-server
clangd .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ 会为 C/C++ 项目自动安装
csharp .cs 已安装 .NET SDK
clojure-lsp .clj, .cljs, .cljc, .edn 系统中可使用 clojure-lsp 命令
dart .dart 系统中可使用 dart 命令
deno .ts, .tsx, .js, .jsx, .mjs 系统中可使用 deno 命令(自动检测 deno.json / deno.jsonc)
elixir-ls .ex, .exs 系统中可使用 elixir 命令
eslint .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue 项目中已安装 eslint 依赖
fsharp .fs, .fsi, .fsx, .fsscript 已安装 .NET SDK
gleam .gleam 系统中可使用 gleam 命令
gopls .go 系统中可使用 go 命令
jdtls .java 已安装 Java SDK (version 21+)
kotlin-ls .kt, .kts 会为 Kotlin 项目自动安装
lua-ls .lua 会为 Lua 项目自动安装
nixd .nix 系统中可使用 nixd 命令
ocaml-lsp .ml, .mli 系统中可使用 ocamllsp 命令
oxlint .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte 项目中已安装 oxlint 依赖
php intelephense .php 会为 PHP 项目自动安装
prisma .prisma 系统中可使用 prisma 命令
pyright .py, .pyi 已安装 pyright 依赖
ruby-lsp (rubocop) .rb, .rake, .gemspec, .ru 系统中可使用 rubygem 命令
rust .rs 系统中可使用 rust-analyzer 命令
sourcekit-lsp .swift, .objc, .objcpp 已安装 swift(macOS 上需要 xcode
svelte .svelte 会为 Svelte 项目自动安装
terraform .tf, .tfvars 从 GitHub releases 自动安装
tinymist .typ, .typc 从 GitHub releases 自动安装
typescript .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts 项目中已安装 typescript 依赖
vue .vue 会为 Vue 项目自动安装
yaml-ls .yaml, .yml 自动安装 Red Hat yaml-language-server
zls .zig, .zon 系统中可使用 zig 命令

当检测到以上文件扩展名,并且满足对应 requirements 时,LSP server 会自动启用。


工作原理(How It Works)

当 opencode 打开一个文件时,它会:

  1. 根据文件扩展名,与所有已启用的 LSP server 进行匹配。
  2. 如果对应的 LSP server 尚未运行,则启动它。

配置(Configure)

你可以在 opencode 配置文件中的 lsp 部分,自定义 LSP server。

  1. {
  2. "$schema": "https://opencode.ai/config.json",
  3. "lsp": {}
  4. }

每个 LSP server 都支持以下配置项:

  1. | Property | Type | Description |
  2. | ---------------- | -------- | -------------------------- |
  3. | `disabled` | boolean | 设置为 `true` 可禁用该 LSP server |
  4. | `command` | string[] | 启动该 LSP server 的命令 |
  5. | `extensions` | string[] | LSP server 需要处理的文件扩展名 |
  6. | `env` | object | 启动 server 时设置的环境变量 |
  7. | `initialization` | object | 发送给 LSP server 的初始化参数 |

下面来看几个示例。


禁用 LSP server

如果要在全局禁用 所有 LSP server,可以将 lsp 设置为 false

  1. {
  2. "$schema": "https://opencode.ai/config.json",
  3. "lsp": false
  4. }

如果只想禁用 某一个 LSP server,可以将该 server 的 disabled 设置为 true

  1. {
  2. "$schema": "https://opencode.ai/config.json",
  3. "lsp": {
  4. "typescript": {
  5. "disabled": true
  6. }
  7. }
  8. }

自定义 LSP server

你可以通过指定启动命令和文件扩展名,添加自定义的 LSP server:

  1. {
  2. "$schema": "https://opencode.ai/config.json",
  3. "lsp": {
  4. "custom-lsp": {
  5. "command": ["custom-lsp-server", "--stdio"],
  6. "extensions": [".custom"]
  7. }
  8. }
  9. }

补充说明(Additional Information)

PHP Intelephense

PHP Intelephense 提供了付费高级功能(premium features),需要通过 license key 激活。你可以将 license key(仅包含 key 本身)放入以下路径的文本文件中:

  • macOS / Linux:$HOME/intelephense/licence.txt
  • Windows:%USERPROFILE%/intelephense/licence.txt

该文件只能包含 license key 本身,不能包含任何额外内容。