LSP-Server
OpenCode integriert sich in Ihre LSP-Server.
OpenCode kann sich in Language-Server-Protocol-(LSP)-Server integrieren, um Diagnosen als Feedback für den Agenten zu nutzen.
Integriert
OpenCode wird mit mehreren integrierten LSP-Servern für gängige Sprachen geliefert:
| LSP-Server | Erweiterungen | Anforderungen |
|---|---|---|
| astro | .astro | Installiert sich automatisch für Astro-Projekte |
| bash | .sh, .bash, .zsh, .ksh | Installiert bash-language-server automatisch |
| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Installiert sich automatisch für C/C++-Projekte |
| csharp | .cs, .csx | .NET SDK installiert |
| 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 (erkennt deno.json/deno.jsonc automatisch) |
| elixir-ls | .ex, .exs | elixir-Befehl verfügbar |
| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | eslint-Abhängigkeit im Projekt |
| fsharp | .fs, .fsi, .fsx, .fsscript | .NET SDK installiert |
| 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 |
| julials | .jl | julia und LanguageServer.jl installiert |
| kotlin-ls | .kt, .kts | Installiert sich automatisch für Kotlin-Projekte |
| lua-ls | .lua | Installiert sich automatisch 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-Abhängigkeit im Projekt |
| php intelephense | .php | Installiert sich automatisch für PHP-Projekte |
| prisma | .prisma | prisma-Befehl verfügbar |
| pyright | .py, .pyi | pyright-Abhängigkeit installiert |
| razor | .razor, .cshtml | .NET SDK und VS Code C#-Erweiterung installiert |
| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | ruby- und gem-Befehle verfügbar |
| rust | .rs | rust-analyzer-Befehl verfügbar |
| sourcekit-lsp | .swift, .objc, .objcpp | swift installiert (xcode auf macOS) |
| svelte | .svelte | Installiert sich automatisch für Svelte-Projekte |
| terraform | .tf, .tfvars | Installiert sich automatisch aus GitHub-Releases |
| tinymist | .typ, .typc | Installiert sich automatisch aus GitHub-Releases |
| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | typescript-Abhängigkeit im Projekt |
| vue | .vue | Installiert sich automatisch für Vue-Projekte |
| yaml-ls | .yaml, .yml | Installiert Red Hat yaml-language-server automatisch |
| zls | .zig, .zon | zig-Befehl verfügbar |
LSP ist standardmäßig deaktiviert. Wenn LSP aktiviert ist, starten die Server, sobald eine der oben genannten Dateierweiterungen erkannt wird und die Anforderungen erfüllt sind.
Hinweis: Sie können automatische Downloads von LSP-Servern deaktivieren, indem Sie die Umgebungsvariable
OPENCODE_DISABLE_LSP_DOWNLOADauftruesetzen.
So funktioniert es
Wenn LSP aktiviert ist und opencode eine Datei öffnet, geschieht Folgendes:
- Es überprüft die Dateierweiterung gegen alle aktivierten LSP-Server.
- Es startet den passenden LSP-Server, falls dieser noch nicht läuft.
Bewährte Praktiken
LSP kann dem Agenten helfen, Probleme zu finden und zu beheben, indem es Diagnosen von Sprachservern bereitstellt. Dies ist in manchen Projekten nützlich, aber nicht immer uneingeschränkt von Vorteil.
Sprachserver können außer Sync geraten, erheblichen Speicher verbrauchen, je nach Version oder Projekt variieren und Agenten-Workflows verlangsamen. In vielen Projekten ist es besser, den Agenten Lint, Typecheck oder andere Diagnose-CLI-Tools direkt ausführen zu lassen, sodass Fehler ohne diese Nachteile in die Agentenschleife zurückgespielt werden. Dokumentieren Sie diese Befehle in Anweisungsdateien wie AGENTS.md oder in Skills, damit der Agent weiß, was auszuführen ist. 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.
{
"$schema": "https://opencode.ai/config.json",
"lsp": true
}Verwenden Sie ein Objekt, um die integrierten Server aktiviert zu lassen und gleichzeitig Überschreibungen oder benutzerdefinierte Server zu konfigurieren.
{
"$schema": "https://opencode.ai/config.json",
"lsp": {}
}Jeder konfigurierte LSP-Server-Eintrag unterstützt Folgendes:
Server-Einträge benötigen command, es sei denn, sie deaktivieren lediglich einen Server.
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
disabled | boolean | 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 | object | Umgebungsvariablen, die beim Starten des Servers gesetzt werden |
initialization | object | Initialisierungsoptionen, die an den LSP-Server gesendet werden |
Sehen wir uns einige Beispiele an.
Umgebungsvariablen
Verwenden Sie die Eigenschaft env, um Umgebungsvariablen beim Starten des LSP-Servers zu setzen:
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"command": ["rust-analyzer"],
"env": {
"RUST_LOG": "debug"
}
}
}
}Initialisierungsoptionen
Verwenden Sie die Eigenschaft initialization, um Initialisierungsoptionen an den LSP-Server zu übergeben. Dies sind serverspezifische Einstellungen, die während der LSP-initialize-Anfrage gesendet werden:
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"],
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
}
}
}
}
}Hinweis: Initialisierungsoptionen variieren je nach LSP-Server. Prüfen Sie die Dokumentation Ihres LSP-Servers auf verfügbare Optionen.
LSP-Server deaktivieren
Wenn lsp weggelassen wird, sind alle LSP-Server deaktiviert. Um alle LSP-Server zu deaktivieren, nachdem eine andere Konfiguration sie aktiviert hat, setzen Sie lsp auf false:
{
"$schema": "https://opencode.ai/config.json",
"lsp": false
}Um einen bestimmten LSP-Server zu deaktivieren, setzen Sie disabled auf true:
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true
}
}
}Benutzerdefinierte LSP-Server
Sie können benutzerdefinierte LSP-Server hinzufügen, indem Sie den Befehl und die Dateierweiterungen angeben:
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"]
}
}
}Zusätzliche Informationen
PHP Intelephense
PHP Intelephense bietet Premium-Funktionen über einen Lizenzschlüssel. Sie können einen Lizenzschlüssel bereitstellen, indem Sie (nur) den Schlüssel in eine Textdatei an folgendem Ort ablegen:
- 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.