跳到內容

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, .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 指令可用
hls.hs, .lhs需要 haskell-language-server-wrapper 指令可用
jdtls.java需要已安裝 Java SDK (version 21+)
julials.jl需要已安裝 juliaLanguageServer.jl
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 指令可用

當偵測到上述檔案副檔名且滿足相應要求時,LSP 伺服器會自動啟用。


工作原理

當 OpenCode 開啟一個檔案時,它會:

  1. 將檔案副檔名與所有已啟用的 LSP 伺服器進行比對。
  2. 如果對應的 LSP 伺服器尚未執行,則自動啟動它。

設定

您可以透過 OpenCode 設定檔中的 lsp 部分來自訂 LSP 伺服器。

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

每個 LSP 伺服器支援以下設定項:

屬性類型描述
disabledboolean設定為 true 可停用該 LSP 伺服器
commandstring[]啟動 LSP 伺服器的指令
extensionsstring[]該 LSP 伺服器需要處理的檔案副檔名
envobject啟動伺服器時設定的環境變數
initializationobject傳送給 LSP 伺服器的初始化選項

下面來看一些範例。


環境變數

使用 env 屬性在啟動 LSP 伺服器時設定環境變數:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"env": {
"RUST_LOG": "debug"
}
}
}
}

初始化選項

使用 initialization 屬性向 LSP 伺服器傳遞初始化選項。這些是在 LSP initialize 請求期間傳送的伺服器特定設定:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
}
}
}
}
}

停用 LSP 伺服器

要全域停用所有 LSP 伺服器,將 lsp 設定為 false

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

要停用特定的 LSP 伺服器,將 disabled 設定為 true

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true
}
}
}

自訂 LSP 伺服器

您可以透過指定指令和檔案副檔名來新增自訂 LSP 伺服器:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"]
}
}
}

補充資訊

PHP Intelephense

PHP Intelephense 透過授權金鑰提供進階功能。您可以將授權金鑰單獨放在以下路徑的文字檔案中:

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

該檔案應僅包含授權金鑰,不要新增其他任何內容。