-
Notifications
You must be signed in to change notification settings - Fork 0
Getting started with LSP on HelloLS Example
3 Hauptkomponenten, die in den Language-Server-Prozess involviert sind
- Client (IDE,Editor)
- Transport-/Kommunikationsmittel (JSON RPC) LSP ist an JSON RPC gebunden
- Sever (Language Server)
**Wie implementiert man LSP für das eigene Projekt? **
2 Möglichkeiten:
Mit LSP4J: ist eine Java-Implementierung von LSP Selbst, mithilfe von der Spezifikation von LSP https://microsoft.github.io/language-server-protocol/specification
LSP4J hat Schnittstellen für LSP, die für unsere Sprache Modelica implementiert werden müssen. Es gibt hier 3 Klassen: - Language Server - zum Initialisieren vom Language-Server - TextDocumentService - stellt das Language-Feature-Interface und Text-Synchronisation-Endpoints (siehe Spezifikation) bereit - Workspace Service - stelllt das Workspace-Feature-Interface wie z.B. Workspace-Symbole, Konfigurationsänderungen bereit TODO: für uns implementieren, wie?
Es gibt Kommunikationskonzepte: - Rudimentäre Kern-Konzepte: Codeerklärung hier ○ Notification: sendet eine Aktion, aber von IDE selbst verarbeitet ○ Request/Response: zum Ausführen von Language-Feature-Operation (completion etc) - LSP4J Launcher Konzept, betrifft nur Language Server, muss auch für Modelica implementiert werden. Launcher erlaubt: ○ Dem Client sich mit dem Language-Server zu verbinden ○ Ist so implementiert, dass er input und output streams bekommt - IDE schreibt requests in input-streams - Language-Server schreibt responses in das output-stream
Um einen Language Server zu einem Plugin zu verbinden, muss man: - Entweder server launcher importieren - Oder einen Server Launcher innerhalb eines Plugins erzeugen => dem Launcher zwei Streams (in, out) übergeben => und anschließend den Launcher dem Client übergeben, damit dieser den Server initialisiert