
Migration der eTrice und MiniHIL IDE von Eclipse zu VS Code
Migration von Legacytooling zu VS Code
eTrice und die MiniHIL-IDE gibt es ab sofort als Extensions für Visual Studio Code (und kompatible Plattformen). In diesem Beitrag stellen wir einige Features der neuen Extensions vor und geben einen kleinen Einblick in die technische Umsetzung.

Die Features im Video
Warum die VS Code Plugin API?
Die Eclipse-IDE hat uns und unsere Kunden viele Jahre begleitet. Mit wachsenden Projekten stieß sie aber immer häufiger an ihre Grenzen: lange Ladezeiten, eine veraltete Benutzeroberfläche und kaum Möglichkeiten zur Einbindung von KI-Assistenten.
Deshalb haben wir uns bei PROTOS entschieden, die Eclipse-Plugins für eTrice und die unseren Kunden bekannte miniHIL-IDE auf eine zukunftsfähige Alternative zu portieren. Die Wahl fiel aus mehreren Gründen darauf, Plugins für VS Code zu entwickeln: Es ist eine moderne, flexible und leichtgewichtige Entwicklungsumgebung, mit der viele Entwickler ohnehin vertraut sind, und ihre ausgereifte Extension-Infrastruktur macht sie zur idealen Grundlage für unsere Werkzeuge. Zusätzlich gibt es mit VSCodium und Eclipse Theia zwei Open Source Plattformen, die die gleiche Extension-API anbieten. Unsere Plugins funktionieren also auch dort.
Der Migrationspfad
Da eTrice und das miniHIL schon seit geraumer Zeit in der Entwicklung sind und etliche gut ausgereifte Features existieren, kam für uns eine Neuimplementierung der verwendeten Sprachinfrastruktur nicht in Frage. Die meisten unserer Sprachen sind mit Xtext entwickelt. Glücklicherweise existiert für Xtext eine Language Server Implementierung die wir als Startpunkt verwenden konnten. Diese Language Server Schnittstelle ist das, was VS Code von einem einfachen Texteditor zu einer IDE für die gegebene Sprache macht. Wie so oft in Legacy Projekten, sind natürlich nicht alle händisch implementierten Sprachfeatures direkt mit der "out of the box" Language Server Implementierung kompatibel. Wir haben also einiges an Schnittstellen angepasst und das eine oder andere Feature etwas umgebaut.
Für die "alten" graphischen Editoren wurde in Eclipse Graphity eingesetzt. In den neuen Plugins kommt Sprotty mit dem Graphical Language Server Protocol (GLSP) zum Einsatz. Hier war der größte Aufwand, dass aus den Sprachmodellen neue Modelle für das GLSP gebaut werden mussten und dass die neuen Viewer auf das gewohnte Look and Feel der existierenden Editoren angepasst werden mussten. Der Übergang vom früheren Editor zum jetzigen Viewer hat Vor- und Nachteile. Ein großer Vorzug ist sicher, dass man sich nicht mehr um Diagramm-Layouts kümmern muss. Dafür nimmt man dann gerne in Kauf, dass die textuelle Bearbeitung, etwa von State Machines, etwas gewöhnungsbedürftig ist. Wir haben jedoch alles getan, um die üblichen Editiervorgänge so gut wie möglich zu unterstützen.
Die eTrice-Extension
eTrice ist ein Open-Source-Projekt der Eclipse Foundation für die modellbasierte Entwicklung eingebetteter Software mit der Modellierungssprache ROOM. Die neue Extension bringt Texteditoren und Diagramme für ROOM-Modelle nach VS Code.
Sprachfeatures über das Language Server Protocol
ROOM-Modelle werden in VS Code im Texteditor bearbeitet. Die Extension bringt dabei alles mit, was man von einer modernen Entwicklungsumgebung erwartet: Syntax-Highlighting, Code-Vervollständigung, automatische Imports und Hover-Informationen aus den Kommentaren im Modell.
Auch die gewohnten Navigationsfunktionen stehen zur Verfügung. F12 springt zur Definition eines Elements und Shift+F12 listet alle Referenzen auf das markierte Element über den gesamten Workspace hinweg auf. Outline und Breadcrumbs zeigen Struktur und Pfad der geöffneten Datei. Fehler und Warnungen erscheinen beim Tippen direkt im Editor und im Problems-Panel.
Woher kommen diese Features? eTrice ist eine domänenspezifische Sprache, die mit Xtext entwickelt wurde. Dort steckt der Großteil der Arbeit an einer Sprache: Parser, Scoping, Validierung und Generatoren werden in der Grammatik und den zugehörigen Komponenten definiert, unabhängig davon, in welcher IDE später mit der Sprache gearbeitet wird.
Genau hier setzt die LSP-Unterstützung von Xtext an. Aus derselben Grammatik lässt sich ein Language Server generieren, der die vorhandene Logik über ein standardisiertes Protokoll bereitstellt. Für VS Code mussten wir also keine neue Sprachlogik entwickeln, sondern nur die bestehenden Features über den Language Server zugänglich machen. Da das Language Server Protocol (LSP) ursprünglich von Microsoft für VS Code entwickelt wurde, ist die Unterstützung dort entsprechend gut, und die Extension selbst bleibt schlank. Ein weiterer Vorteil ist, dass das LSP inzwischen auch von vielen AI-Agents und anderen IDEs unterstützt wird.
Mehr dazu im Language Server Extension Guide und in der Xtext Dokumentation.

Diagramme mit Sprotty
Neben den Texteditoren waren die Diagrammeditoren ein zentraler Bestandteil des eTrice-Eclipse-Plugins. Auch in VS Code sind die bekannten Diagramme wieder integriert, jetzt mit automatischem Layout.
Zur technischen Umsetzung wurde das Sprotty Diagram Framework verwendet, das durch seinen Support für VS-Code gut zu unserem Anwendungsfall passt. Sprotty erweitert das Language Server Protocol um diagrammspezifische Nachrichten – der Server liefert also nicht nur Symbole und Diagnostics, sondern auch ein komplettes Diagrammmodell.
Der Server arbeitet dabei auf demselben geparsten ROOM-Modell, das auch die Editor-Features versorgt. Aus diesem Modell erzeugt er das Diagrammmodell, das er anschließend vom Eclipse Layout Kernel (ELK) layouten lässt. Der Client erhält am Ende eine fertige Struktur, die er nur noch rendern muss.
Gerendert wird in einer WebView, die sich in VS Code wie ein gewöhnliches Editor-Fenster verhält und vom Nutzer frei positioniert werden kann – zum Beispiel direkt neben dem Modell, aus dem sie erzeugt wurde.
Die MiniHIL-Extension

Für CaGe-Modelle stehen dieselben Sprachfeatures zur Verfügung wie für ROOM: Syntax-Highlighting, Validierung beim Tippen, Code-Vervollständigung sowie Sprünge zu Definitionen und Referenzen. Auch die grafische Darstellung ist wieder dabei. Zu einer Testsuite, einem Step, einer Sequence oder einem Zustandsgraphen lässt sich per Tastenkürzel ein Trace-Diagramm öffnen, das den Testablauf als Sequenzdiagramm zeigt.

C-Code Integration
Mit dem Umstieg auf VS Code Plugins haben wir zusätzlich zu den bekannten CaGe Sprachfeatures den Support für C-Target Code, der in die CaGe-Sprache eingebettet wird, deutlich verbessert. C-Code Snippets in CaGe unterstützen jetzt Hover, Completion, Diagnostics, Code Navigation und weitere Features.
Um das Rad nicht neu zu erfinden, haben wir unsere miniHIL Extension so erweitert, dass sie virtuelle C-Code Dokumente mit dem nötigen Header und Stub-Funktionen bereitstellt. Für die Bereitstellung der C-Code Sprachfeatures deligieren wir an das VS Code clangd Plugin und mappen die Ergebnisse zurück in das CaGe Dokument. Auf diesem Weg profitiert der Nutzer von allen Features, die clangd bereitstellt. Die Konfiguration von clangd, und damit auch die Anpassung auf projektspezifische Anforderungen, erfolgt durch den Benutzer und wird nicht starr vorgegeben.
Integration von miniHIL und eTrice extension
eTrice ist ein Open-Source-Projekt, CaGe dagegen nicht. Diese Konstellation stellte zunächst eine große Herausforderung dar. Üblicherweise bekommt jede Sprache ihren eigenen Language Server. CaGe ist aber eng mit eTrice verwoben: CaGe-Tests greifen direkt auf Elemente aus den ROOM-Modellen zu, etwa auf deren Schnittstellen und Datentypen. Zwei getrennte Language Server hätten dieselben Modelle doppelt laden und synchron halten müssen. Gleichzeitig wollten wir unser Commitment zu einem quelloffenen eTrice einhalten und weiterhin eine eigenständig nutzbare eTrice-Extension anbieten.
Unsere Lösung: Die miniHIL-Extension nutzt die bereits bestehende LSP-Connection der eTrice-Extension und injiziert dort die CaGe-spezifische Logik. So bleibt die eTrice-Extension eigenständig und quelloffen, und miniHIL-Nutzer bekommen trotzdem eine nahtlos integrierte Umgebung für die Testfallentwicklung mit CaGe.
Jetzt ausprobieren
Die eTrice-Extension kann auf Open VSX heruntergeladen werden.
Wenn Sie das miniHIL verwenden, können Sie die miniHIL-Extension direkt von unserer miniHIL Downloadseite herunterladen.
Eine Anleitung für die Installation gibt es in diesem Video oder im miniHIL UserGuide.
Als miniHIL Kunde schicken Sie uns Feedback unter minihil@protos.de. Falls Sie nur das eTrice Plugin ausprobieren, können Sie Feedback auch gerne direkt über den eTrice Issue Tracker melden.
Sie haben Fragen zur Migration von Legacy-Tooling und wollen von userem Know-How profitieren?
Sie haben Legacy-Tooling, das Sie gerne auf eine moderne Plattform migrieren würden? Schreiben Sie uns eine Nachricht mit ihren Fragen oder Anforderungen und wir prüfen ganz unverbindlich, ob wir Sie in dem Bereich mit unserem Know How unterstützen können.