---
title: LSP 伺服器
description: 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+)` 已安裝                  |
| kotlin-ls          | .kt、.kts                                                           | Kotlin 專案的自動安裝                            |
| lua-ls             | .lua                                                                | 自動安裝 Lua 專案                                |
| nil                | .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                                           | `ruby` 和 `gem` 指令可用                         |
| rust-analyzer      | .rs                                                                 | `rust-analyzer` 指令可用                         |
| sourcekit-lsp      | .swift、.objc、.objcpp                                              | `swift` 已安裝（`xcode` 在 macOS 上）            |
| svelte             | .svelte                                                             | Svelte 專案的自動安裝                            |
| terraform-ls       | .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 伺服器將自動啟用。

:::note
您可以透過將 `OPENCODE_DISABLE_LSP_DOWNLOAD` 環境變數設定為 `true` 來禁用自動 LSP 伺服器下載。
:::

---

## 它是如何運作的

當 opencode 打開一個檔案時，它：

1. 根據所有啟用的 LSP 伺服器檢查檔案副檔名。
2. 如果尚未執行，則啟動相應的 LSP 伺服器。

---

## 設定

您可以透過 opencode 設定中的 `lsp` 部分自定義 LSP 伺服器。

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

每個 LSP 伺服器支援以下功能：

| 屬性             | 類型   | 描述                                |
| ---------------- | ------ | ----------------------------------- |
| `disabled`       | 布林值 | 將其設定為 `true` 以禁用 LSP 伺服器 |
| `command`        | 字串[] | 啟動 LSP 伺服器的指令               |
| `extensions`     | 字串[] | 此 LSP 伺服器應處理的檔案副檔名     |
| `env`            | 物件   | 啟動伺服器時設定的環境變數          |
| `initialization` | 物件   | 發送到 LSP 伺服器的初始化選項       |

讓我們看一些例子。

---

### 環境變數

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

```json title="opencode.json" {5-7}
{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "rust": {
      "env": {
        "RUST_LOG": "debug"
      }
    }
  }
}
```

---

### 初始化選項

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

```json title="opencode.json" {5-9}
{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "typescript": {
      "initialization": {
        "preferences": {
          "importModuleSpecifierPreference": "relative"
        }
      }
    }
  }
}
```

:::note
初始化選項因 LSP 伺服器而異。檢查 LSP 伺服器的文件以獲取可用選項。
:::

---

### 禁用 LSP 伺服器

要全域禁用**所有** LSP 伺服器，請將 `lsp` 設定為 `false`：

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

要禁用**特定** LSP 伺服器，請將 `disabled` 設定為 `true`：

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

---

### 自定義 LSP 伺服器

您可以透過指定指令和檔案副檔名來添加自定義 LSP 伺服器：

```json title="opencode.json" {4-7}
{
  "$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`

該檔案應僅包含授權金鑰，不包含其他內容。
