LSP-Server
OpenCode integriert sich in Ihre LSP-Server.
OpenCode kann sich in Ihr Language Server Protocol (LSP) integrieren, um dem LLM bei der Interaktion mit Ihrer Codebasis zu helfen. Es verwendet Diagnosen, um dem LLM Feedback zu geben.
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 |
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.
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.