Softwareentwicklung: Neues Format zur Codenavigation ohne Checkout in Arbeit

Das Language Server Index Format ist an das Language Server Protocol angelehnt und soll kompakt Navigationsfunktionen für Sourcecode bieten.

In Pocket speichern vorlesen Druckansicht
Softwareentwicklung: Neues Format zur Codenavigation ohne Checkout in Arbeit
Lesezeit: 3 Min.
Von
  • Rainald Menge-Sonnentag

Microsoft plant ein neues Format zur komfortablen Darstellung von Sourcecode. Das Language Server Index Format (LSIF), dessen Akronym als "else if" ausgesprochen wird, baut auf dem Language Server Protocol (LSP) auf. Entwickler sollen damit Einblick in den Code inklusive Navigationsfunktionen und Hover-Hints erhalten, ohne ihn aus einem Repository auschecken oder gar klonen zu müssen.

Vor knapp drei Jahren hatte Microsoft zusammen mit Codenvy und Red Hat erstmals das LSP angekündigt, das eine toolunabhängige Implementierung für diverse Programmiersprachen erlaubt. Das Werkzeug schickt Ereignisse wie das Öffnen einer Datei oder Änderungen im Sourcecode an den lokalen Language Server. Dieser reagiert darauf, indem er beispielsweise nach einer Änderung im Code gefundene Fehler oder Warnungen an das Werkzeug zurückschickt, das sie entsprechend hervorheben kann.

LSIF übernimmt das Konzept, befreit es aber von dem eigentlichen Language Server. Damit lässt es sich schlanker umsetzen, zumal zahlreiche Funktionen wie Autovervollständigung zum reinen Betrachten des Codes nicht erforderlich sind. Ein einfaches Beispiel aus dem Visual-Studio-Code-Blog verdeutlicht den Unterschied. So greift für die minimalistische Funktion

function bar(): void {
}

beim Überfahren des Funktionsnamens der Hover-Hint, wie folgende Abbildung zeigt:

Der Hover-Hint gibt für das einfache Beispiel lediglich die Funktionsdefinition wieder.

(Bild: Microsoft)

Die entsprechende Information steht im LSP im Hover-Interface, und der konkrete Inhalt zur Definition der Programmiersprache und des auszugebenden Strings ist folgender:

{
contents: [
{ language: "typescript", value: "function bar(): void" }
]
}

Dazu muss das Werkzeug freilich die Position des Mauszeigers übermitteln, die der Language Server auswertet. Da der Sourcecode beim Einsatz von LSIF nicht editierbar ist und somit die Positionen der einzelnen Bereiche feststehen, lässt sich die Position statisch ablegen und in Kombination mit den passenden Werten als Tupel speichern. Für das "b" aus bar() ergäbe sich daher Folgendes:

['textDocument/hover',
'file:///.../sample.ts',
{line: 0, character: 10}]

Um nicht für jeden Buchstaben einzelne Tupel ablegen zu müssen, lassen sich mit start: ... end: Bereiche definieren. Die gespeicherten Informationen umfassen neben Hover-Hints unter anderem auch Typdefinitionen und Folding Ranges.

Das Language Server Index Format befindet sich noch im Entwicklungsstadium, und die Macher bitten um Feedback. Interessierte Entwickler können auf GitHub einen Blick in die Spezifikation werfen. Das Team hat zudem einen LSIF-Index für die von Microsoft entwickelte Programmiersprache TypeScript erstellt. Für den ebenfalls von Microsoft initiierten quelloffenen Sourcecode-Editor Visual Studio Code existiert eine erste LSIF-Extension. (rme)