跳转到内容

LSP

通过语言服务器增强代码理解能力。

本节概述 OpenCode 与 Language Server Protocol (LSP) 的集成方式,具体细节以英文文档为准。

OpenCode 可以连接项目中已有的语言服务器(LSP),或为常见语言自动下载 LSP,从而获得:

  • 跳转定义 / 查找引用;
  • 符号列表 / 文档悬停信息;
  • 调用层级等高级分析能力。

这些能力既可以在 TUI 内使用,也可以通过 lsp 工具在自动化任务中被 Agent 调用。


状态检查

可以使用 opencode server/lsp 接口查看当前 LSP 状态(也可以在 TUI 中的状态视图里看到):

  • 哪些语言已启动对应 LSP;
  • 是否存在错误或启动失败;
  • LSP 进程的基本信息。

自动下载 LSP

对于部分语言,OpenCode 可以在需要时自动下载并管理对应的 LSP Server(具体支持列表以英文文档为准)。

如果你不希望自动下载:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"formatter": {},
"tools": {},
"permission": {},
"experimental": {},
"watcher": {},
"mcp": {},
"plugin": [],
"autoupdate": true
}

或使用环境变量:

Terminal window
export OPENCODE_DISABLE_LSP_DOWNLOAD=true

手动配置 LSP

在某些环境中你可能已经使用编辑器或其他工具安装了 LSP,可以直接复用:

  • 确保对应 LSP 二进制已在 PATH 中;
  • 或通过插件/配置指定启动命令;
  • 然后在规则或 Agent 中提示 OpenCode 优先使用 LSP 工具进行导航/分析。

作为工具使用 LSP(实验性)

如果设置环境变量 OPENCODE_EXPERIMENTAL_LSP_TOOL=true(或 OPENCODE_EXPERIMENTAL=true),可以启用 lsp 工具:

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

Agent 之后就可以通过 lsp 工具执行:

  • goToDefinition
  • findReferences
  • hover
  • documentSymbol
  • workspaceSymbol
  • goToImplementation
  • prepareCallHierarchy
  • incomingCalls / outgoingCalls

等操作(具体支持列表以实际实现为准)。


与其它工具的配合

LSP 提供的是“语义级代码理解”,而:

  • grep / glob 提供的是全文/文件层面的搜索;
  • read / edit / patch 负责文件的读写与修改;
  • MCP 则可以调用外部系统。

合理的搭配方式是:

  • 用 LSP 做“跳转、找引用、列符号”;
  • grep 做模糊/批量搜索;
  • 用 MCP/LSP 组合做跨服务、跨代码仓调用。