Unterstützung für das Language Server Protocol (LSP)
Qwen Code bietet native Unterstützung für das Language Server Protocol (LSP) und ermöglicht damit erweiterte Code-Intelligence-Funktionen wie „Go to Definition“, „Find References“, Diagnosen und Code Actions. Diese Integration ermöglicht es dem KI-Agenten, deinen Code tiefer zu verstehen und präzisere Unterstützung zu bieten.
Übersicht
Die LSP-Unterstützung in Qwen Code funktioniert durch die Verbindung zu Language Servern, die deinen Code verstehen. Sobald du Server über .lsp.json (oder Erweiterungen) konfiguriert hast, kann Qwen Code diese starten und für folgende Aufgaben nutzen:
- Zu Symboldefinitionen navigieren
- Alle Referenzen zu einem Symbol finden
- Hover-Informationen abrufen (Dokumentation, Typinformationen)
- Diagnosemeldungen anzeigen (Fehler, Warnungen)
- Auf Code Actions zugreifen (Quick Fixes, Refactorings)
- Aufrufhierarchien analysieren
Schnellstart
LSP ist ein experimentelles Feature in Qwen Code. Um es zu aktivieren, verwende das Kommandozeilen-Flag --experimental-lsp:
qwen --experimental-lspLSP-Server werden konfigurationsgesteuert. Du musst sie in .lsp.json (oder über Erweiterungen) definieren, damit Qwen Code sie starten kann.
Voraussetzungen
Du musst den Language Server für deine Programmiersprache installiert haben:
| Sprache | Language Server | Installationsbefehl |
|---|---|---|
| TypeScript/JavaScript | typescript-language-server | npm install -g typescript-language-server typescript |
| Python | pylsp | pip install python-lsp-server |
| Go | gopls | go install golang.org/x/tools/gopls@latest |
| Rust | rust-analyzer | Installationsanleitung |
| C/C++ | clangd | Installiere LLVM/clangd über deinen Paketmanager |
| Java | jdtls | Installiere JDTLS und ein JDK |
Konfiguration
.lsp.json-Datei
Du kannst Language Server über eine .lsp.json-Datei im Projektstammverzeichnis konfigurieren. Dabei wird das Format mit Sprache als Schlüssel verwendet, das in der Referenz zur LSP-Konfiguration für Claude Code-Plugins beschrieben ist.
Grundlegendes Format:
{
"typescript": {
"command": "typescript-language-server",
"args": ["--stdio"],
"extensionToLanguage": {
".ts": "typescript",
".tsx": "typescriptreact",
".js": "javascript",
".jsx": "javascriptreact"
}
}
}Konfiguration für C/C++ (clangd)
Abhängigkeiten:
- clangd (LLVM) muss installiert und im
PATHverfügbar sein. - Eine Compile-Datenbank (
compile_commands.json) odercompile_flags.txtist für präzise Ergebnisse erforderlich.
Beispiel:
{
"cpp": {
"command": "clangd",
"args": [
"--background-index",
"--clang-tidy",
"--header-insertion=iwyu",
"--completion-style=detailed"
]
}
}Konfiguration für Java (jdtls)
Abhängigkeiten:
- JDK installiert und im
PATHverfügbar (java). - JDTLS installiert und im
PATHverfügbar (jdtls).
Beispiel:
{
"java": {
"command": "jdtls",
"args": ["-configuration", ".jdtls-config", "-data", ".jdtls-workspace"]
}
}Konfigurationsoptionen
Erforderliche Felder
| Option | Typ | Beschreibung |
|---|---|---|
command | string | Befehl zum Starten des LSP-Servers (muss im PATH liegen) |
Optionale Felder
| Option | Typ | Standardwert | Beschreibung |
|---|---|---|---|
args | string[] | [] | Kommandozeilenargumente |
transport | string | "stdio" | Transporttyp: stdio, tcp oder socket |
env | object | - | Umgebungsvariablen |
initializationOptions | object | - | LSP-Initialisierungsoptionen |
settings | object | - | Servereinstellungen über workspace/didChangeConfiguration |
extensionToLanguage | object | - | Ordnet Dateierweiterungen Sprach-IDs zu |
workspaceFolder | string | - | Workspace-Verzeichnis überschreiben (muss innerhalb des Projektstamms liegen) |
startupTimeout | number | 10000 | Start-Timeout in Millisekunden |
shutdownTimeout | number | 5000 | Shutdown-Timeout in Millisekunden |
restartOnCrash | boolean | false | Automatischer Neustart bei Absturz |
maxRestarts | number | 3 | Maximale Anzahl von Neustartversuchen |
trustRequired | boolean | true | Erfordert vertrauenswürdigen Workspace |
TCP/Socket-Transport
Für Server, die TCP- oder Unix-Socket-Transport verwenden:
{
"remote-lsp": {
"transport": "tcp",
"socket": {
"host": "127.0.0.1",
"port": 9999
},
"extensionToLanguage": {
".custom": "custom"
}
}
}Verfügbare LSP-Operationen
Qwen Code stellt LSP-Funktionen über das einheitliche lsp-Tool bereit. Folgende Operationen sind verfügbar:
Code-Navigation
Go to Definition
Findet die Definition eines Symbols.
Operation: goToDefinition
Parameters:
- filePath: Path to the file
- line: Line number (1-based)
- character: Column number (1-based)Find References
Findet alle Referenzen zu einem Symbol.
Operation: findReferences
Parameters:
- filePath: Path to the file
- line: Line number (1-based)
- character: Column number (1-based)
- includeDeclaration: Include the declaration itself (optional)Go to Implementation
Findet Implementierungen einer Schnittstelle oder abstrakten Methode.
Operation: goToImplementation
Parameters:
- filePath: Path to the file
- line: Line number (1-based)
- character: Column number (1-based)Symbolinformationen
Hover
Ruft Dokumentation und Typinformationen für ein Symbol ab.
Operation: hover
Parameters:
- filePath: Path to the file
- line: Line number (1-based)
- character: Column number (1-based)Document Symbols
Ruft alle Symbole in einem Dokument ab.
Operation: documentSymbol
Parameters:
- filePath: Path to the fileWorkspace Symbol Search
Sucht nach Symbolen im gesamten Workspace.
Operation: workspaceSymbol
Parameters:
- query: Search query string
- limit: Maximum results (optional)Call Hierarchy
Prepare Call Hierarchy
Ruft das Call-Hierarchy-Element an einer Position ab.
Operation: prepareCallHierarchy
Parameters:
- filePath: Path to the file
- line: Line number (1-based)
- character: Column number (1-based)Incoming Calls
Findet alle Funktionen, die die angegebene Funktion aufrufen.
Operation: incomingCalls
Parameters:
- callHierarchyItem: Item from prepareCallHierarchyOutgoing Calls
Findet alle Funktionen, die von der angegebenen Funktion aufgerufen werden.
Operation: outgoingCalls
Parameters:
- callHierarchyItem: Item from prepareCallHierarchyDiagnosen
File Diagnostics
Ruft Diagnosemeldungen (Fehler, Warnungen) für eine Datei ab.
Operation: diagnostics
Parameters:
- filePath: Path to the fileWorkspace Diagnostics
Ruft alle Diagnosemeldungen im gesamten Workspace ab.
Operation: workspaceDiagnostics
Parameters:
- limit: Maximum results (optional)Code Actions
Get Code Actions
Ruft verfügbare Code Actions (Quick Fixes, Refactorings) an einer Position ab.
Operation: codeActions
Parameters:
- filePath: Path to the file
- line: Start line number (1-based)
- character: Start column number (1-based)
- endLine: End line number (optional, defaults to line)
- endCharacter: End column (optional, defaults to character)
- diagnostics: Diagnostics to get actions for (optional)
- codeActionKinds: Filter by action kind (optional)Code Action-Kategorien:
quickfix- Quick Fixes für Fehler/Warnungenrefactor- Refactoring-Operationenrefactor.extract- Extrahieren in Funktion/Variablerefactor.inline- Funktion/Variable inline einfügensource- Quellcode-Actionssource.organizeImports- Imports organisierensource.fixAll- Alle automatisch behebbaren Probleme beheben
Sicherheit
LSP-Server werden standardmäßig nur in vertrauenswürdigen Workspaces gestartet. Das liegt daran, dass Language Server mit deinen Benutzerberechtigungen ausgeführt werden und Code ausführen können.
Trust-Steuerung
- Trusted Workspace: LSP-Server werden gestartet, wenn sie konfiguriert sind
- Untrusted Workspace: LSP-Server werden nicht gestartet, es sei denn,
trustRequired: falseist in der Serverkonfiguration festgelegt
Um einen Workspace als vertrauenswürdig zu markieren, verwende den /trust-Befehl oder konfiguriere vertrauenswürdige Ordner in den Einstellungen.
Trust-Überschreibung pro Server
Du kannst Vertrauensanforderungen für bestimmte Server in deren Konfiguration überschreiben:
{
"safe-server": {
"command": "safe-language-server",
"args": ["--stdio"],
"trustRequired": false,
"extensionToLanguage": {
".safe": "safe"
}
}
}Fehlerbehebung
Server startet nicht
- Prüfe, ob der Server installiert ist: Führe den Befehl manuell aus, um dies zu überprüfen
- Prüfe den
PATH: Stelle sicher, dass die Server-Binary im System-PATHliegt - Prüfe den Workspace-Trust: Der Workspace muss für LSP als vertrauenswürdig eingestuft sein
- Prüfe die Logs: Suche nach Fehlermeldungen in der Konsolenausgabe
- Überprüfe das
--experimental-lsp-Flag: Stelle sicher, dass du das Flag beim Start von Qwen Code verwendest
Langsame Performance
- Große Projekte: Erwäge,
node_modulesund andere große Verzeichnisse auszuschließen - Server-Timeout: Erhöhe
startupTimeoutin der Serverkonfiguration für langsame Server
Keine Ergebnisse
- Server nicht bereit: Der Server indiziert möglicherweise noch
- Datei nicht gespeichert: Speichere deine Datei, damit der Server die Änderungen übernimmt
- Falsche Sprache: Prüfe, ob der richtige Server für deine Sprache läuft
Debugging
Aktiviere Debug-Logging, um die LSP-Kommunikation einzusehen:
DEBUG=lsp* qwen --experimental-lspOder sieh dir den LSP-Debugging-Guide unter packages/cli/LSP_DEBUGGING_GUIDE.md an.
Kompatibilität mit Claude Code
Qwen Code unterstützt .lsp.json-Konfigurationsdateien im Claude Code-Stil im Format mit Sprache als Schlüssel, das in der Claude Code-Plugin-Referenz definiert ist. Wenn du von Claude Code migrierst, verwende das Layout mit der Sprache als Schlüssel in deiner Konfiguration.
Konfigurationsformat
Das empfohlene Format folgt der Spezifikation von Claude Code:
{
"go": {
"command": "gopls",
"args": ["serve"],
"extensionToLanguage": {
".go": "go"
}
}
}Claude Code LSP-Plugins können auch lspServers in plugin.json (oder einer referenzierten .lsp.json) bereitstellen. Qwen Code lädt diese Konfigurationen, wenn die Erweiterung aktiviert ist, und sie müssen dasselbe Format mit Sprache als Schlüssel verwenden.
Best Practices
- Installiere Language Server global: Das stellt sicher, dass sie in allen Projekten verfügbar sind
- Verwende projektspezifische Einstellungen: Konfiguriere Serveroptionen bei Bedarf pro Projekt über
.lsp.json - Halte Server aktuell: Aktualisiere deine Language Server regelmäßig für optimale Ergebnisse
- Vertraue mit Bedacht: Vertraue nur Workspaces aus vertrauenswürdigen Quellen
FAQ
F: Wie aktiviere ich LSP?
Verwende das --experimental-lsp-Flag beim Start von Qwen Code:
qwen --experimental-lspF: Woran erkenne ich, welche Language Server laufen?
Verwende den /lsp status-Befehl, um alle konfigurierten und laufenden Language Server anzuzeigen.
F: Kann ich mehrere Language Server für denselben Dateityp verwenden?
Ja, aber für jede Operation wird nur einer verwendet. Der erste Server, der Ergebnisse liefert, gewinnt.
F: Funktioniert LSP im Sandbox-Modus?
LSP-Server laufen außerhalb der Sandbox, um auf deinen Code zuzugreifen. Sie unterliegen den Workspace-Trust-Kontrollen.