Hackathon-Erfolg: Syntaxcheck, UML und Renaming für INTERLIS direkt in Visual Studio Code

Der Anlass

Im Rahmen eines Hackathons haben wir uns als GeoWerkstatt das Ziel gesetzt, Features von modernen Entwicklungsumgebungen (IDE) für INTERLIS zu demonstrieren. INTERLIS als Sprache zur Beschreibung von geografischen Datenstrukturen verfügt bisher in Entwicklungsumgebungen über keine Unterstützung für Features wie Syntaxcheck, Renaming und Vervollständigung, was ein effizientes Arbeiten erschwert.

Da wir bereits früher eine Visual Studio Code Extension für INTERLIS entwickelt haben (siehe «INTERLIS 2 – Syntax Highlighting in Visual Studio Code») konzentrierten wir uns auf deren Weiterentwicklung. Innerhalb von nur zwei Tagen gelang es uns, eine Reihe neuer Funktionen zu demonstrieren, darunter ein integrierter Syntaxcheck, eine Renaming-Funktion für Modelle, und eine UML-Visualisierung. In diesem Blogartikel teilen wir unsere Erfahrungen und Ergebnisse aus diesem aufregenden und erfolgreichen Hackathon.

DAS Resultat

Unser Team hat sich zu Beginn des Hackathons das ambitionierte Ziel gesetzt, einen eigenen INTERLIS Compiler zu bauen, welchem wir zumindest ein Verständnis von einem INTERLIS-Objekt entlocken können. Mit diesem Compiler als Grundlage sollte die VS Code Extension so erweitert werden, dass wir ein INTERLIS-Objekt korrekt umbenennen können. Korrekt umbenennen heisst, dass nicht mit Suchen und Ersetzen gearbeitet wird, sondern die IDE das abstrakte Modell selbständig interpretieren kann und die automatische Umbenennung an allen notwendigen Stellen selbständig durchführt. Zusätzlich deckt die Modell-Interpretation auch gleich syntaktische Fehler auf. Das folgende Video zeigt die beschriebene Integration

 

Demo INTERLIS VS Code Extension

 

Zugrundeliegende Technik

Wir haben für die Interpretation von einem INTERLIS File die Grammatik aus dem Referenzhandbuch von INTERLIS 2.4 in eine Antlr4 Grammatik übersetzt. Mit Antlr4 lässt sich anschliessend Code generieren, welcher eine INTERLIS Datei interpretieren kann und in einen konkreten Syntax-Tree giesst. Auf diesem Syntax-Tree können wir dann unsere Checks und Operationen ausführen. Bei einem Modell führen wir hier zu Demonstrationszwecken den Check durch, ob sich der Modellname, welcher nach dem Keyword `MODEL` steht, mit dem Modellnamen deckt, welcher nach dem Keyword `END` steht. Damit Syntaxfehler oder die Option zur Umbenennung in Visual Studio Code integriert werden können, hat Microsoft mit dem Language Server Protocol einen Standard für integrierte Entwicklungsumgebungen geschaffen, mit welchem diese Funktionen auch für andere Editoren verwendet werden kann. Die Informationen, welche wir von unserem Compiler nun gesammelt haben, können wir also über dieses Protokoll an Visual Studio Code kommunizieren. Die Visualisierung sowie das Bereitstellen der Optionen übernimmt Visual Studio Code automatisch.

Eine UML-Visualisierung als Bonus

Das abstrakte Verständnis von unserem INTERLIS Modell haben wir kurzerhand noch in eine Mermaid Repräsentation verpackt. Mermaid ist eine Erweiterung von Markdown, welche es erlaubt UML-Diagramme in einer Textrepräsentation zu beschreiben. Die Darstellung sowie das Layouten wird vollständig von Mermaid übernommen, was die Arbeit für uns sehr vereinfacht. Aber siehe selbst:

 

Demo INTERLIS UML-Diagramm mit Mermaid

 

Fazit & Ausblick

Der Hackathon war ein Meilenstein für unser Team. Durch die Implementierung von Funktionen wie dem direkten Syntaxcheck, der Renaming-Funktion für Modelle und der Integration von Mermaid Diagrammen konnten wir in kurzer Zeit zeigen, dass eine moderne technische INTERLIS Modellierungsumgebung mit vertretbarem Aufwand machbar ist. Auch wenn in 2 Tagen kein fertiges Produkt entstanden ist, sind wir stolz auf die Ergebnisse unserer Arbeit und die Erfolge, die wir innerhalb dieser kurzen Zeit erreicht haben. Wir sind schon voller Ideen, wie wir unsere Erkenntnisse gewinnbringend in diverse INTERLIS Werkzeuge integrieren könnten und freuen uns auf den nächsten Hackathon. Vorerst sind wir aber vor allem gespannt auf eure Reaktionen und Fragen.