Skip to content

Getting started with LSP on HelloLS Example

Ilmar edited this page May 14, 2021 · 2 revisions

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)

bild

**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

Clone this wiki locally