LSP 服务器

OpenCode 与你的 LSP 服务器集成。

OpenCode 与你的语言服务器协议(LSP)集成,帮助 LLM 与你的代码库交互。它使用诊断信息向 LLM 提供反馈。


# 内置支持#

OpenCode 为流行语言提供了多个内置 LSP 服务器:

LSP 服务器扩展名要求
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, .ednclojure-lsp 命令可用
dart.dartdart 命令可用
deno.ts, .tsx, .js, .jsx, .mjsdeno 命令可用(自动检测 deno.json/deno.jsonc)
elixir-ls.ex, .exselixir 命令可用
eslint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue项目中有 eslint 依赖
fsharp.fs, .fsi, .fsx, .fsscript已安装 .NET SDK
gleam.gleamgleam 命令可用
gopls.gogo 命令可用
jdtls.java已安装 Java SDK (version 21+)
kotlin-ls.kt, .kts为 Kotlin 项目自动安装
lua-ls.lua为 Lua 项目自动安装
nixd.nixnixd 命令可用
ocaml-lsp.ml, .mliocamllsp 命令可用
oxlint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte项目中有 oxlint 依赖
php intelephense.php为 PHP 项目自动安装
prisma.prismaprisma 命令可用
pyright.py, .pyi已安装 pyright 依赖
ruby-lsp (rubocop).rb, .rake, .gemspec, .ruruby 和 gem 命令可用
rust.rsrust-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, .zonzig 命令可用

当检测到上述文件扩展名之一且满足要求时,LSP 服务器会自动启用。

注意:你可以通过将 OPENCODE_DISABLE_LSP_DOWNLOAD 环境变量设置为 true 来禁用自动 LSP 服务器下载。


# 工作原理#

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

  1. 检查文件扩展名是否与所有已启用的 LSP 服务器匹配。
  2. 如果尚未运行,则启动适当的 LSP 服务器。

# 配置#

你可以通过 opencode 配置中的 lsp 部分自定义 LSP 服务器。

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

每个 LSP 服务器支持以下属性:

属性类型描述
disabledboolean设置为 true 以禁用该 LSP 服务器
commandstring[]启动 LSP 服务器的命令
extensionsstring[]该 LSP 服务器应处理的文件扩展名
envobject启动服务器时设置的环境变量
initializationobject发送给 LSP 服务器的初始化选项

让我们看一些示例。


## 禁用 LSP 服务器#

要全局禁用所有 LSP 服务器,将 lsp 设置为 false:

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

要禁用特定的 LSP 服务器,将 disabled 设置为 true:

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

## 自定义 LSP 服务器#

你可以通过指定命令和文件扩展名来添加自定义 LSP 服务器:

json
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}

# 附加信息#

## PHP Intelephense#

PHP Intelephense 通过许可证密钥提供高级功能。你可以通过将许可证密钥(仅密钥)放置在以下位置的文本文件中来提供:

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

该文件应仅包含许可证密钥,不包含其他内容。