OpenCode内置了强大的LSP(Language Server Protocol)支持,为AI提供深度代码理解能力,包括代码补全、跳转定义、查找引用等功能。
什么是LSP
LSP(Language Server Protocol,语言服务器协议)是微软开发的一种开放协议,用于在代码编辑器和语言服务器之间进行通信。它提供了:
- 代码智能 - 自动补全、语法高亮、错误诊断
- 代码导航 - 跳转到定义、查找引用、符号搜索
- 代码重构 - 重命名、提取函数、代码操作
- 悬停信息 - 显示类型信息、文档注释
OpenCode通过集成LSP,让AI能够更准确地理解代码结构和语义关系。
内置支持的语言
OpenCode内置支持25+种编程语言的LSP服务器,会根据项目文件自动检测并安装:
| 语言 | LSP服务器 | 文件扩展名 |
|---|---|---|
| TypeScript/JavaScript | typescript-language-server | .ts, .tsx, .js, .jsx |
| Python | pyright | .py |
| Go | gopls | .go |
| Rust | rust-analyzer | .rs |
| C/C++ | clangd | .c, .cpp, .h |
| Java | jdtls | .java |
| C# | omnisharp | .cs |
| PHP | intelephense | .php |
| Ruby | solargraph | .rb |
| Swift | sourcekit-lsp | .swift |
| Kotlin | kotlin-language-server | .kt |
| Lua | lua-language-server | .lua |
| Zig | zls | .zig |
| HTML | vscode-html-language-server | .html |
| CSS | vscode-css-language-server | .css, .scss, .less |
| JSON | vscode-json-language-server | .json |
| YAML | yaml-language-server | .yaml, .yml |
| Markdown | marksman | .md |
| SQL | sql-language-server | .sql |
| Bash | bash-language-server | .sh, .bash |
| Dockerfile | dockerfile-language-server | Dockerfile |
| Terraform | terraform-ls | .tf |
| Elixir | elixir-ls | .ex, .exs |
| Haskell | haskell-language-server | .hs |
| OCaml | ocamllsp | .ml |
自动安装功能
OpenCode会自动检测项目使用的语言,并在需要时自动安装对应的LSP服务器:
# 当你打开一个TypeScript项目时
opencode
# OpenCode会自动:
# 1. 检测到 .ts 文件
# 2. 检查是否已安装 typescript-language-server
# 3. 如未安装,自动通过npm安装
# 4. 启动LSP服务器并连接
提示
自动安装需要相应的包管理器(如npm、pip、cargo等)已在系统中安装。
配置选项
可以在配置文件中自定义LSP行为:
基本配置结构
{
"lsp": {
"typescript": {
"disabled": false,
"command": ["typescript-language-server", "--stdio"],
"extensions": [".ts", ".tsx", ".js", ".jsx"],
"env": {
"TSC_NONPOLLING_WATCHER": "true"
},
"initialization": {
"preferences": {
"includeInlayParameterNameHints": "all"
}
}
}
}
}
配置项说明
| 配置项 | 类型 | 说明 |
|---|---|---|
disabled | boolean | 是否禁用此语言的LSP |
command | string[] | 启动LSP服务器的命令和参数 |
extensions | string[] | 关联的文件扩展名 |
env | object | LSP服务器的环境变量 |
initialization | object | LSP初始化选项 |
环境变量配置
{
"lsp": {
"python": {
"env": {
"PYTHONPATH": "/path/to/custom/modules",
"VIRTUAL_ENV": "/path/to/venv"
}
}
}
}
初始化选项
{
"lsp": {
"rust": {
"initialization": {
"cargo": {
"buildScripts": {
"enable": true
}
},
"procMacro": {
"enable": true
}
}
}
}
}
禁用LSP
禁用特定语言的LSP
{
"lsp": {
"javascript": {
"disabled": true
}
}
}
完全禁用LSP功能
{
"lsp": {
"*": {
"disabled": true
}
}
}
通过环境变量禁用
# 禁用所有LSP
export OPENCODE_LSP_DISABLED=true
# 禁用自动安装
export OPENCODE_LSP_AUTO_INSTALL=false
自定义LSP服务器
可以添加OpenCode未内置支持的语言服务器:
添加新语言支持
{
"lsp": {
"custom-lang": {
"command": ["custom-language-server", "--stdio"],
"extensions": [".custom", ".cust"],
"env": {},
"initialization": {}
}
}
}
使用Docker运行LSP
{
"lsp": {
"java": {
"command": [
"docker", "run", "--rm", "-i",
"-v", "${workspaceFolder}:/workspace",
"jdtls-image"
]
}
}
}
使用远程LSP服务器
{
"lsp": {
"typescript": {
"command": ["nc", "localhost", "2089"]
}
}
}
LSP工具使用
OpenCode提供了lsp工具,AI可以通过它获取代码智能信息:
# AI可能会这样使用LSP工具:
# - 获取函数定义
# - 查找所有引用
# - 获取类型信息
# - 诊断代码问题
注意
LSP功能目前是实验性的,某些语言的支持可能不完整。
故障排除
LSP服务器无法启动
- 检查是否已安装对应的语言服务器
- 确认command路径是否正确
- 查看OpenCode日志获取详细错误信息
代码智能不工作
- 确认项目有正确的配置文件(如tsconfig.json)
- 检查文件扩展名是否在extensions列表中
- 尝试重启OpenCode
下一步
接下来学习如何配置代码格式化器,保持代码风格一致性。