Skip to content

LSP 语言服务器配置

OpenCode 内置了约 30+ 种语言服务器的支持,提供代码智能、诊断和导航能力。LSP(Language Server Protocol)是一种标准化协议,使 AI 代理能够更好地理解和分析代码。

内置支持的语言

OpenCode 预配置了以下语言的 LSP 服务器:

Web 开发

语言服务器扩展名
TypeScript/JavaScripttypescript-language-server.ts, .tsx, .js, .jsx
Vuevue-language-server.vue
Sveltesvelte-language-server.svelte
Astroastro-ls.astro
HTMLvscode-html-language-server.html
CSSvscode-css-language-server.css, .scss, .less

系统编程

语言服务器扩展名
Rustrust-analyzer.rs
C/C++clangd.c, .cc, .cpp, .h, .hpp
Gogopls.go, .mod
Zigzls.zig

后端开发

语言服务器扩展名
Pythonpyright-langserver.py, .pyi
Javajdtls.java
Kotlinkotlin-language-server.kt, .kts
PHPintelephense.php
Rubysolargraph.rb
Elixirelixir-ls.ex, .exs

其他语言

语言服务器扩展名
Dartdart-language-server.dart
OCamlocamllsp.ml, .mli
Gleamgleam.gleam
Clojureclojure-lsp.clj, .cljs

自动激活

LSP 服务器会在检测到对应扩展名的文件时自动激活(前提是已安装相关依赖)。

配置结构

json
{
  "lsp": {
    "language-name": {
      "disabled": false,
      "command": ["server-command", "--stdio"],
      "extensions": [".ext1", ".ext2"],
      "env": {},
      "initialization": {}
    }
  }
}

配置字段说明

字段类型必填说明
disabledboolean禁用此语言服务器
commandstring[]启动命令和参数
extensionsstring[]关联的文件扩展名
envobject环境变量
initializationobject服务器初始化选项

常用语言服务器配置

TypeScript / JavaScript

json
{
  "lsp": {
    "typescript": {
      "command": ["typescript-language-server", "--stdio"],
      "extensions": [".ts", ".tsx", ".js", ".jsx"]
    }
  }
}

安装

bash
npm install -g typescript typescript-language-server

Python

使用 Pyright(推荐):

json
{
  "lsp": {
    "python": {
      "command": ["pyright-langserver", "--stdio"],
      "extensions": [".py", ".pyi"]
    }
  }
}

安装

bash
npm install -g pyright

或使用 pylsp:

json
{
  "lsp": {
    "python": {
      "command": ["pylsp"],
      "extensions": [".py", ".pyi"]
    }
  }
}

安装

bash
pip install python-lsp-server

Go

json
{
  "lsp": {
    "go": {
      "command": ["gopls"],
      "extensions": [".go", ".mod", ".sum", ".work"]
    }
  }
}

安装

bash
go install golang.org/x/tools/gopls@latest

Rust

json
{
  "lsp": {
    "rust": {
      "command": ["rust-analyzer"],
      "extensions": [".rs"]
    }
  }
}

安装

bash
rustup component add rust-analyzer

C/C++

json
{
  "lsp": {
    "cpp": {
      "command": ["clangd"],
      "extensions": [".c", ".cc", ".cpp", ".cxx", ".h", ".hpp", ".hh", ".hxx"]
    }
  }
}

安装

bash
# macOS
brew install llvm

# Ubuntu/Debian
sudo apt install clangd

# Windows
winget install LLVM.LLVM

Vue

json
{
  "lsp": {
    "vue": {
      "command": ["vue-language-server", "--stdio"],
      "extensions": [".vue"]
    }
  }
}

安装

bash
npm install -g @vue/language-server

禁用 LSP

禁用所有 LSP

json
{
  "lsp": false
}

禁用特定语言

json
{
  "lsp": {
    "python": {
      "disabled": true
    }
  }
}

自定义 LSP 服务器

为项目特定或非内置语言添加 LSP 支持:

json
{
  "lsp": {
    "custom-lang": {
      "command": ["custom-lsp-server", "--stdio"],
      "extensions": [".custom"],
      "env": {
        "CUSTOM_VAR": "value"
      },
      "initialization": {
        "settings": {
          "option": "value"
        }
      }
    }
  }
}

完整配置示例

json
{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "typescript": {
      "command": ["typescript-language-server", "--stdio"],
      "extensions": [".ts", ".tsx", ".js", ".jsx"]
    },
    "python": {
      "command": ["pyright-langserver", "--stdio"],
      "extensions": [".py", ".pyi"]
    },
    "go": {
      "command": ["gopls"],
      "extensions": [".go", ".mod", ".sum", ".work"]
    },
    "rust": {
      "command": ["rust-analyzer"],
      "extensions": [".rs"]
    },
    "cpp": {
      "command": ["clangd"],
      "extensions": [".c", ".cc", ".cpp", ".h", ".hpp"]
    },
    "vue": {
      "command": ["vue-language-server", "--stdio"],
      "extensions": [".vue"]
    }
  }
}

LSP 功能

配置 LSP 后,OpenCode 可以利用以下能力:

功能说明
代码补全智能代码建议和自动完成
诊断语法错误和警告检测
悬停信息查看类型、文档等信息
定义跳转跳转到符号定义
引用查找查找所有引用位置
重命名批量重命名符号
代码格式化自动格式化代码

实验性 LSP 工具

启用实验性 LSP 工具功能,让 LLM 直接使用 LSP 能力:

bash
export OPENCODE_EXPERIMENTAL_LSP_TOOL=true

启用后,代理可以使用 LSP 获取定义、引用、悬停信息和调用层次等。

调试 LSP

验证 LSP 服务器可用

bash
# TypeScript
typescript-language-server --version

# Python
pyright-langserver --version

# Go
gopls version

# Rust
rust-analyzer --version

# C/C++
clangd --version

启用调试日志

json
{
  "debugLSP": true
}

或通过命令行:

bash
opencode --print-logs

常见问题

LSP 服务器未找到

确保 LSP 服务器在 PATH 中:

bash
which typescript-language-server
which gopls
which clangd

LSP 功能不工作

  1. 检查文件扩展名是否在配置的 extensions 列表中
  2. 检查项目是否有必要的配置文件(如 tsconfig.jsongo.mod
  3. 检查 LSP 服务器版本是否兼容

性能问题

对于大型项目,可以配置排除模式:

json
{
  "lsp": {
    "typescript": {
      "command": ["typescript-language-server", "--stdio"],
      "extensions": [".ts", ".tsx"],
      "initialization": {
        "preferences": {
          "excludeLibrarySymbolsInNavTo": true
        }
      }
    }
  }
}

PHP Intelephense 许可证

Intelephense 高级功能需要许可证密钥:

bash
# Unix
echo "YOUR_LICENSE_KEY" > ~/intelephense/licence.txt

# Windows
echo YOUR_LICENSE_KEY > %USERPROFILE%\intelephense\licence.txt

下一步

aicodex 文档网站