OpenCode-LSP-Server-Konfiguration

OpenCode integriert sich tiefgehend in das Language Server Protocol (LSP) und verwendet LSP-Server, um LLMs Echtzeit-Feedback wie Code-Diagnosen und Fehlerhinweise bereitzustellen, wodurch die KI Ihre Codebasis genauer verstehen und bearbeiten kann.

Einfach ausgedrückt ist ein LSP-Server eine Komponente, die OpenCode die Fähigkeit gibt, „Code zu lesen“, ähnlich wie Plugins in VS Code, die Codevervollständigung und Fehlerhinweise bereitstellen. Wenn in einer Datei ein Syntaxfehler oder Typkonflikt auftritt, gibt der LSP-Server diese Diagnoseinformationen an das LLM zurück, wodurch es genauere Änderungen vornehmen kann.


Funktionsweise

Die LSP-Integration von OpenCode ist vollautomatisch und erfordert keinen manuellen Eingriff. Wenn OpenCode eine Datei öffnet, führt es den folgenden Prozess in dieser Reihenfolge aus:

打开文件
  │
  ▼
读取文件扩展名(如 .ts、.py、.go)
  │
  ▼
与所有已启用的 LSP 服务器进行匹配
  │
  ├── 匹配成功且服务器已运行 → 直接使用
  │
  └── 匹配成功但服务器未运行 → 自动启动对应 LSP 服务器

Der gesamte Prozess läuft still im Hintergrund ab. Sobald der LSP-Server startet, stellt er kontinuierlich Diagnoseinformationen für die aktuelle Sitzung bereit.


Integrierte LSP-Server

OpenCode bietet integrierte LSP-Server-Unterstützung für gängige Sprachen,Wenn die entsprechende Dateiendung erkannt wird und die relevanten Anforderungen erfüllt sind, wird der LSP-Server automatisch aktiviert, und in den meisten Fällen ist keine Konfiguration erforderlich.

LSP-Server Unterstützte Dateiendungen Aktivierungsanforderungen
astro .astro Automatisch für Astro-Projekte installiert
bash .sh, .bash, .zsh, .ksh Installiert bash-language-server automatisch
clangd .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ Wird für C/C++-Projekte automatisch installiert
csharp .cs Erfordert, dass .NET SDK installiert ist
clojure-lsp .clj, .cljs, .cljc, .edn Erfordertclojure-lspBefehl muss verfügbar sein
dart .dart ErfordertdartBefehl muss verfügbar sein
deno .ts, .tsx, .js, .jsx, .mjs ErfordertdenoBefehl muss verfügbar sein, und das Projekt muss enthaltendeno.jsonoderdeno.jsonc(automatisch erkannt)
elixir-ls .ex, .exs ErfordertelixirBefehl muss verfügbar sein
eslint .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue Das Projekt musseslintAbhängigkeit installiert haben
fsharp .fs, .fsi, .fsx, .fsscript Erfordert, dass .NET SDK installiert ist
gleam .gleam ErfordertgleamBefehl muss verfügbar sein
gopls .go ErfordertgoBefehl muss verfügbar sein
hls .hs, .lhs Erforderthaskell-language-server-wrapperBefehl muss verfügbar sein
jdtls .java Erfordert, dass Java SDK (Version 21 oder höher) installiert ist
julials .jl erfordert InstallationjuliaundLanguageServer.jlPaket
kotlin-ls .kt, .kts Wird für Kotlin-Projekte automatisch installiert
lua-ls .lua Automatisch für Lua-Projekte installiert
nixd .nix ErfordertnixdBefehl muss verfügbar sein
ocaml-lsp .ml, .mli ErfordertocamllspBefehl muss verfügbar sein
oxlint .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte Das Projekt mussoxlintAbhängigkeit installiert haben
php intelephense .php Automatisch für PHP-Projekte installiert
prisma .prisma ErfordertprismaBefehl muss verfügbar sein
pyright .py, .pyi erfordertpyrightzu installierende Abhängigkeit
ruby-lsp .rb, .rake, .gemspec, .ru ErfordertrubyundgemBefehl muss verfügbar sein
rust .rs Erfordertrust-analyzerBefehl muss verfügbar sein
sourcekit-lsp .swift, .objc, .objcpp Erfordert, dass Swift installiert ist (Installation über Xcode unter macOS)
svelte .svelte Automatisch für Svelte-Projekte installiert
terraform .tf, .tfvars Automatisch von GitHub Releases installiert
tinymist .typ, .typc Automatisch von GitHub Releases installiert
typescript .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts Das Projekt musstypescriptAbhängigkeit installiert haben
vue .vue Automatisch für Vue-Projekte installiert
yaml-ls .yaml, .yml Installiert automatisch Red Hat yaml-language-server
zls .zig, .zon ErfordertzigBefehl muss verfügbar sein
Wenn du nicht möchtest, dass OpenCode LSP-Server automatisch herunterlädt, kannst du die Umgebungsvariable festlegenOPENCODE_DISABLE_LSP_DOWNLOADauftrueum das automatische Downloadverhalten zu deaktivieren. Weitere Details findest du in den Hinweisen am Ende dieses Artikels.

LSP-Server konfigurieren

Die LSP-bezogene Konfiguration wird in dieopencode.jsonvonlspFeld. In den meisten Fällen ist keine Konfiguration erforderlich und LSP wird automatisch aktiviert; wenn jedoch benutzerdefiniertes Verhalten benötigt wird, unterstützt jeder LSP-Server die folgenden Konfigurationselemente:

Eigenschaft Type Beschreibung
disabled boolean Setzen auftrueum diesen LSP-Server zu deaktivieren
command string[] Befehl zum Starten des LSP-Servers (als Array; das erste Element ist der Name der ausführbaren Datei, die übrigen sind Argumente)
extensions string[] Liste der Dateiendungen, die von diesem LSP-Server verarbeitet werden
env object Umgebungsvariablen, die beim Starten des Servers injiziert werden; Schlüssel sind Variablennamen, Werte sind Variablenwerte
initialization object Während der LSPinitialize-Handshake-Phase werden Initialisierungsoptionen an den Server gesendet; der Inhalt variiert je nach Server

1. Umgebungsvariablen setzen (env)

Verwenden Sie dieenvEigenschaft, um beim Starten des LSP-Servers Umgebungsvariablen zu injizieren. Wird häufig verwendet, um Debug-Logging zu aktivieren oder Pfade anzugeben, die von der Laufzeit benötigt werden:

Beispiel

{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "rust": {
      "env": {
"RUST_LOG": "debug" // Aktiviert Debug-Level-Logging für rust-analyzer, um die LSP-Fehlerbehebung zu erleichtern
      }
    }
  }
}

2. Initialisierungsoptionen festlegen (initialization)

initializationWird verwendet, um serverspezifische Konfiguration an den LSP-Server zu übergeben. Diese Optionen werden einmal während des LSP-Handshakes (initializerequest)-Phase gesendet und beeinflussen das gesamte nachfolgende Verhalten des Servers:

Beispiel

{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "typescript": {
      "initialization": {
        "preferences": {
          "importModuleSpecifierPreference": "relative"
// Teilt dem TypeScript-LSP mit, Importe mit relativem Pfad zu bevorzugen (z. B. ./utils)
// anstelle von absoluten Pfaden (z. B. /src/utils) oder in tsconfig.json konfigurierten Pfadaliasen
        }
      }
    }
  }
}
Initialisierungsoptionen variieren je nach LSP-Server. Zum Beispieltypescriptdie Optionen fürgoplssind völlig unterschiedlich; konsultieren Sie vor der Verwendung die offizielle Dokumentation des entsprechenden LSP-Servers, um die Übergabe einer ungültigen Konfiguration zu vermeiden.

LSP-Server deaktivieren

1. Alle LSP-Server deaktivieren

Wenn Sie LSP-Funktionalität überhaupt nicht benötigen, können Sielspvollständig auffalse, wodurch alle LSP-Server auf einmal deaktiviert werden:

Beispiel

{
  "$schema": "https://opencode.ai/config.json",
"lsp": false // Deaktiviert global alle LSP-Server; geeignet für Umgebungen, die keine Code-Diagnose benötigen oder nur begrenzte Netzwerk-/Ressourcenkapazitäten haben
}

2. Einen bestimmten LSP-Server deaktivieren

Wenn Sie nur einen LSP-Server deaktivieren möchten und die anderen beibehalten wollen, legen Sie dies individuell für diesen Server festdisabled: true:

Beispiel

{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "typescript": {
"disabled": true // Deaktiviert nur den TypeScript-LSP; LSP-Server für andere Sprachen sind nicht betroffen
    }
  }
}

Benutzerdefinierte LSP-Server hinzufügen

Wenn die von Ihnen verwendete Sprache nicht in der integrierten Unterstützungsliste enthalten ist, können Sie angeben,commandundextensionsum jeden LSP-Server manuell hinzuzufügen, sofern der Server das Standard-LSP-Protokoll befolgt und unterstützt--stdioModus (Kommunikation über Standard-Eingabe/-Ausgabe):

Beispiel

{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
"custom-lsp": { // Benutzerdefinierter Schlüsselname; kann beliebig benannt werden, dient zur Identifizierung des Servers in der Konfiguration
"command": ["custom-lsp-server", "--stdio"], // Startbefehl: Das erste Element ist der Name der ausführbaren Datei,
// Die übrigen Elemente sind die an ihn übergebenen Startargumente
// --stdio gibt die Kommunikation mit OpenCode über Standard-Eingabe/-Ausgabe an
"extensions": [".custom"] // Gibt an, welche Dateiendungen dieser LSP-Server verarbeitet
    }
  }
}

Sie können auch Umgebungsvariablen und Initialisierungsoptionen für einen benutzerdefinierten LSP-Server konfigurieren, genau wie für integrierte Server:

Beispiel

{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "my-lang-server": {
      "command": ["my-lang-server", "--stdio", "--log-level", "warn"],
"extensions": [".mylang", ".ml2"], // Unterstützt das gleichzeitige Binden mehrerer Dateiendungen
      "env": {
"MY_LSP_HOME": "/usr/local/my-lang" // Fügt die erforderlichen Umgebungsvariablen für den Serverprozess ein
      },
      "initialization": {
"formatOnSave": true // Übergibt die in der Dokumentation des Servers definierten Initialisierungsoptionen
      }
    }
  }
}

Zusätzliche Hinweise

PHP Intelephense Lizenz

PHP Intelephense bietet eine kostenlose Version und eine kostenpflichtige Premium-Version. Die Premium-Version wird über einen Lizenzschlüssel freigeschaltet und enthält erweiterte Funktionen wie Import-Sortierung, Code-Faltung, Anzeige der Aufrufhierarchie und mehr. Wenn Sie eine Lizenz erworben haben, schreiben Sie den Schlüssel einfach in eine Textdatei unter dem folgenden Pfad, um sie automatisch zu aktivieren, ohne zusätzliche Konfiguration:

Betriebssystem Pfad der Lizenzdatei
macOS / Linux $HOME/intelephense/license.txt
Windows %USERPROFILE%/intelephense/license.txt

Die Lizenzdatei sollte nur den Lizenzschlüssel selbst enthalten. Fügen Sie keine anderen Inhalte hinzu (einschließlich zusätzlicher Leerzeichen oder Zeilenumbrüche), da die Aktivierung sonst fehlschlagen kann.

Automatischen Download deaktivieren

Standardmäßig lädt OpenCode den erforderlichen LSP-Server automatisch aus dem Netzwerk herunter, wenn es eine entsprechende Dateiendung erkennt. Wenn Sie sich in einer netzwerkbeschränkten Umgebung befinden oder LSP-Tools lieber vollständig manuell verwalten möchten, können Sie automatische Downloads deaktivieren, indem Sie die folgende Umgebungsvariable setzen:

# Linux / macOS:临时禁用(仅当前终端会话有效)
export OPENCODE_DISABLE_LSP_DOWNLOAD=true

# Linux / macOS:永久禁用(写入 shell 配置文件)
echo 'export OPENCODE_DISABLE_LSP_DOWNLOAD=true' >> ~/.bashrc
source ~/.bashrc

# Windows(PowerShell:仅当前会话)
$env:OPENCODE_DISABLE_LSP_DOWNLOAD = "true"

Nach der Deaktivierung lädt OpenCode keine LSP-Server mehr automatisch herunter, aber bereits auf dem System vorinstallierte LSP-Tools können weiterhin erkannt und normal verwendet werden.

Andere Erweiterungen