LSP-Server
Dropstone integriert sich mit Ihren LSP-Servern.
Dropstone kann sich mit Ihrem Language Server Protocol (LSP) integrieren, um dem LLM die Interaktion mit Ihrer Codebasis zu ermöglichen. Es verwendet Diagnostiken, um dem LLM Feedback zu geben.
Integriert
Dropstone wird mit mehreren integrierten LSP-Servern für beliebte Sprachen geliefert:
| LSP-Server | Erweiterungen | Anforderungen |
|---|---|---|
| astro | .astro | Auto-Installation für Astro-Projekte |
| bash | .sh, .bash, .zsh, .ksh | Auto-Installation von bash-language-server |
| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Auto-Installation 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 | Auto-Installation für Kotlin-Projekte |
| lua-ls | .lua | Auto-Installation 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 | Auto-Installation 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 | Auto-Installation für Svelte-Projekte |
| terraform | .tf, .tfvars | Auto-Installation von GitHub-Releases |
| tinymist | .typ, .typc | Auto-Installation von GitHub-Releases |
| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | typescript Abhängigkeit im Projekt |
| vue | .vue | Auto-Installation für Vue-Projekte |
| yaml-ls | .yaml, .yml | Auto-Installation von Red Hat yaml-language-server |
| zls | .zig, .zon | zig Befehl verfügbar |
Wenn LSP aktiviert ist, starten Server, wenn eine der oben genannten Dateierweiterungen erkannt wird und die Anforderungen erfüllt sind.
Funktionsweise
Wenn LSP aktiviert ist und dropstone eine Datei öffnet, führt es folgende Schritte aus:
- Überprüft die Dateierweiterung gegen alle aktivierten LSP-Server.
- Startet den entsprechenden LSP-Server, falls nicht bereits ausgeführt.
Konfigurieren
Sie können LSP-Server über den Abschnitt lsp in Ihrer dropstone-Konfiguration aktivieren und anpassen.
Um alle integrierten LSP-Server zu aktivieren, setzen Sie lsp auf true.
{
"$schema": "https://dropstone.io/schema/config.json",
"lsp": true
}
Verwenden Sie ein Objekt, um integrierte Server aktiviert zu halten und gleichzeitig Überschreibungen oder benutzerdefinierte Server zu konfigurieren.
{
"$schema": "https://dropstone.io/schema/config.json",
"lsp": {}
}
Jeder konfigurierte LSP-Server-Eintrag unterstützt Folgendes:
Server-Einträge benötigen command, es sei denn, sie deaktivieren nur 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 beim Starten des Servers setzen |
initialization | object | Initialisierungsoptionen zum Senden an den LSP-Server |
Schauen wir uns einige Beispiele an.
Umgebungsvariablen
Verwenden Sie die Eigenschaft env, um Umgebungsvariablen beim Starten des LSP-Servers zu setzen:
{
"$schema": "https://dropstone.io/schema/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-Anfrage initialize gesendet werden:
{
"$schema": "https://dropstone.io/schema/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"],
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
}
}
}
}
}
Note:
Initialisierungsoptionen variieren je nach LSP-Server. Überprüfen Sie die Dokumentation Ihres LSP-Servers auf verfügbare Optionen.
Deaktivieren von LSP-Servern
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://dropstone.io/schema/config.json",
"lsp": false
}
Um einen bestimmten LSP-Server zu deaktivieren, setzen Sie disabled auf true:
{
"$schema": "https://dropstone.io/schema/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://dropstone.io/schema/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 einer Textdatei unter folgendem Pfad platzieren:
- Auf macOS/Linux:
$HOME/intelephense/license.txt - Auf Windows:
%USERPROFILE%/intelephense/license.txt
Die Datei sollte nur den Lizenzschlüssel ohne zusätzliche Inhalte enthalten.