---
title: LSP Server
description: OpenCode lässt sich in Ihren LSP-Server integrieren.
---

OpenCode kann sich in Language Server Protocol (LSP)-Server integrieren, um Diagnosen als Feedback für den Agenten zu verwenden.

---

## Integriert

OpenCode verfügt über mehrere integrierte LSP-Server für gängige Sprachen:

| LSP Server         | Erweiterungen                                                       | Anforderungen                                                             |
| ------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| astro              | .astro                                                              | Automatische Installation für Astro-Projekte                              |
| bash               | .sh, .bash, .zsh, .ksh                                              | Installiert den bash-language-server automatisch                          |
| clangd             | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++                | Automatische Installation für C/C++-Projekte                              |
| csharp             | .cs                                                                 | `.NET SDK` installed                                                      |
| clojure-lsp        | .clj, .cljs, .cljc, .edn                                            | `clojure-lsp`-Befehl verfügbar                                            |
| dart               | .dart                                                               | `dart`-Befehl verfügbar                                                   |
| deno               | .ts, .tsx, .js, .jsx, .mjs                                          | `deno`-Befehl verfügbar (automatische Erkennung von deno.json/deno.jsonc) |
| elixir-ls          | .ex, .exs                                                           | `elixir`-Befehl verfügbar                                                 |
| eslint             | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue                  | `eslint` dependency in project                                            |
| fsharp             | .fs, .fsi, .fsx, .fsscript                                          | `.NET SDK` installed                                                      |
| gleam              | .gleam                                                              | `gleam`-Befehl verfügbar                                                  |
| gopls              | .go                                                                 | `go`-Befehl verfügbar                                                     |
| hls                | .hs, .lhs                                                           | `haskell-language-server-wrapper`-Befehl verfügbar                        |
| jdtls              | .java                                                               | `Java SDK (version 21+)` installiert                                      |
| kotlin-ls          | .kt, .kts                                                           | Automatische Installation für Kotlin-Projekte                             |
| lua-ls             | .lua                                                                | Automatische Installation für Lua-Projekte                                |
| nixd               | .nix                                                                | `nixd`-Befehl verfügbar                                                   |
| ocaml-lsp          | .ml, .mli                                                           | `ocamllsp`-Befehl verfügbar                                               |
| oxlint             | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | `oxlint` dependency in project                                            |
| php intelephense   | .php                                                                | Automatische Installation für PHP-Projekte                                |
| prisma             | .prisma                                                             | `prisma`-Befehl verfügbar                                                 |
| pyright            | .py, .pyi                                                           | `pyright` dependency installed                                            |
| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru                                           | Befehle `ruby` und `gem` verfügbar                                        |
| rust               | .rs                                                                 | `rust-analyzer`-Befehl verfügbar                                          |
| sourcekit-lsp      | .swift, .objc, .objcpp                                              | `swift` installed (`xcode` on macOS)                                      |
| svelte             | .svelte                                                             | Automatische Installation für Svelte-Projekte                             |
| terraform          | .tf, .tfvars                                                        | Automatische Installation von GitHub-Releases                             |
| tinymist           | .typ, .typc                                                         | Automatische Installation von GitHub-Releases                             |
| typescript         | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts                        | `typescript` dependency in project                                        |
| vue                | .vue                                                                | Automatische Installation für Vue-Projekte                                |
| yaml-ls            | .yaml, .yml                                                         | Installiert den Red Hat yaml-language-server automatisch                  |
| zls                | .zig, .zon                                                          | `zig`-Befehl verfügbar                                                    |

LSP ist standardmäßig deaktiviert. Wenn es aktiviert ist, starten Server, sobald eine der oben genannten Dateierweiterungen erkannt wird und die Anforderungen erfüllt sind.

:::note
Sie können LSP-Server-Downloads automatisch deaktivieren, indem Sie die Umgebungsvariable `OPENCODE_DISABLE_LSP_DOWNLOAD` auf `true` setzen.
:::

---

## Funktionsweise

Wenn LSP aktiviert ist und OpenCode eine Datei öffnet, geschieht Folgendes:

1. Überprüft die Dateierweiterung anhand aller aktivierten LSP-Server.
2. Startet den entsprechenden LSP-Server, falls er noch nicht ausgeführt wird.

---

## Bewährte Praktiken

LSP kann dem Agenten helfen, Probleme zu finden und zu beheben, indem es Diagnosen von Sprachservern bereitstellt. Das ist in einigen Projekten nützlich, aber nicht immer ein klarer Vorteil.

Sprachserver können aus dem Sync geraten, viel Speicher verwenden, je nach Version oder Projekt unterschiedlich arbeiten und Agent-Workflows verlangsamen. In vielen Projekten ist es besser, wenn der Agent lint, typecheck oder andere diagnostische CLI-Tools direkt ausführt, damit Fehler in die Agent-Schleife zurückfließen, ohne diese Kompromisse einzugehen. Dokumentieren Sie diese Befehle in Instruktionsdateien wie `AGENTS.md` oder Skills, damit der Agent weiß, was er ausführen soll. Aktivieren Sie LSP, wenn Ihr Projekt von zusätzlichem Sprachserver-Feedback profitiert.

---

## Konfiguration

Sie können LSP-Server über den Abschnitt `lsp` in Ihrer OpenCode-Konfiguration aktivieren und anpassen.

Um alle integrierten LSP-Server zu aktivieren, setzen Sie `lsp` auf `true`.

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

Verwenden Sie ein Objekt, um integrierte Server aktiviert zu lassen und gleichzeitig Überschreibungen oder benutzerdefinierte Server zu konfigurieren.

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

Jeder LSP-Server unterstützt Folgendes:

| Eigentum         | Geben Sie       | ein Beschreibung                                                   |
| ---------------- | --------------- | ------------------------------------------------------------------ |
| `disabled`       | boolescher Wert | Setzen Sie dies auf `true`, um den LSP-Server zu deaktivieren      |
| `command`        | string[]        | Der Befehl zum Starten des LSP-Servers                             |
| `extensions`     | string[]        | Dateierweiterungen, die dieser LSP-Server verarbeiten soll         |
| `env`            | Objekt          | Umgebungsvariablen, die beim Starten des Servers festgelegt werden |
| `initialization` | Objekt          | Initialisierungsoptionen zum Senden an den LSP-Server              |

Schauen wir uns einige Beispiele an.

---

### Umgebungsvariablen

Verwenden Sie die Eigenschaft `env`, um Umgebungsvariablen festzulegen, wenn Sie den Server LSP starten:

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

---

### Initialisierungsoptionen

Verwenden Sie die Eigenschaft `initialization`, um Initialisierungsoptionen an den Server LSP zu übergeben. Dies sind serverspezifische Einstellungen, die während der LSP `initialize`-Anfrage gesendet werden:

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

:::note
Die Initialisierungsoptionen variieren je nach LSP-Server. Überprüfen Sie die Dokumentation Ihres LSP-Servers auf verfügbare Optionen.
:::

---

### Deaktivieren von LSP-Servern

Wenn `lsp` ausgelassen wird, sind alle LSP-Server deaktiviert. Um alle LSP-Server zu deaktivieren, nachdem sie durch eine andere Konfiguration aktiviert wurden, setzen Sie `lsp` auf `false`:

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

Um einen **bestimmten** LSP-Server zu deaktivieren, setzen Sie `disabled` auf `true`:

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

---

### Benutzerdefinierter LSP-Server

Sie können einen benutzerdefinierten LSP-Server hinzufügen, indem Sie den Befehl und die Dateierweiterungen angeben:

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

---

## Weitere Informationen

### PHP Intelephense

PHP Intelepense bietet Premium-Funktionen über einen Lizenzschlüssel. Sie können einen Lizenzschlüssel bereitstellen, indem Sie (nur) den Schlüssel in eine Textdatei einfügen unter:

- Auf macOS/Linux: `$HOME/intelephense/license.txt`
- Unter Windows: `%USERPROFILE%/intelephense/license.txt`

Die Datei sollte nur den Lizenzschlüssel ohne zusätzlichen Inhalt enthalten.
