Zum Inhalt springen

LSP Server

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 ServerErweiterungenAnforderungen
astro.astroAutomatische Installation für Astro-Projekte
bash.sh, .bash, .zsh, .kshInstalliert 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, .ednclojure-lsp-Befehl verfügbar
dart.dartdart-Befehl verfügbar
deno.ts, .tsx, .js, .jsx, .mjsdeno-Befehl verfügbar (automatische Erkennung von deno.json/deno.jsonc)
elixir-ls.ex, .exselixir-Befehl verfügbar
eslint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vueeslint dependency in project
fsharp.fs, .fsi, .fsx, .fsscript.NET SDK installed
gleam.gleamgleam-Befehl verfügbar
gopls.gogo-Befehl verfügbar
hls.hs, .lhshaskell-language-server-wrapper-Befehl verfügbar
jdtls.javaJava SDK (version 21+) installiert
kotlin-ls.kt, .ktsAutomatische Installation für Kotlin-Projekte
lua-ls.luaAutomatische Installation für Lua-Projekte
nixd.nixnixd-Befehl verfügbar
ocaml-lsp.ml, .mliocamllsp-Befehl verfügbar
oxlint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelteoxlint dependency in project
php intelephense.phpAutomatische Installation für PHP-Projekte
prisma.prismaprisma-Befehl verfügbar
pyright.py, .pyipyright dependency installed
ruby-lsp (rubocop).rb, .rake, .gemspec, .ruBefehle ruby und gem verfügbar
rust.rsrust-analyzer-Befehl verfügbar
sourcekit-lsp.swift, .objc, .objcppswift installed (xcode on macOS)
svelte.svelteAutomatische Installation für Svelte-Projekte
terraform.tf, .tfvarsAutomatische Installation von GitHub-Releases
tinymist.typ, .typcAutomatische Installation von GitHub-Releases
typescript.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .ctstypescript dependency in project
vue.vueAutomatische Installation für Vue-Projekte
yaml-ls.yaml, .ymlInstalliert den Red Hat yaml-language-server automatisch
zls.zig, .zonzig-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.


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.

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.

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

Jeder LSP-Server unterstützt Folgendes:

EigentumGeben Sieein Beschreibung
disabledboolescher WertSetzen Sie dies auf true, um den LSP-Server zu deaktivieren
commandstring[]Der Befehl zum Starten des LSP-Servers
extensionsstring[]Dateierweiterungen, die dieser LSP-Server verarbeiten soll
envObjektUmgebungsvariablen, die beim Starten des Servers festgelegt werden
initializationObjektInitialisierungsoptionen 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:

opencode.json
{
"$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:

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

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:

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

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

opencode.json
{
"$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:

opencode.json
{
"$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.