zurück zum Artikel

Visual Studio Code, Teil 1: Ein Code-Editor für alle(s)?

Fabian Deitelhoff

VS Code hat sich zu einem gängigen Code-Editor entwickelt. Was der Editor kann und was Entwickler von ihm erwarten, beleuchtet Teil 1 dieser dreiteiligen Serie.

Der freie und von Microsoft als Open-Source-Projekt maßgeblich entwickelte Quelltext-Editor Visual Studio Code hat sich über die Jahre einen Namen in der Entwickler-Community gemacht, und das über die sonst oft so starren Grenzen der Microsoft-Community hinaus. VS Code, wie der Editor oft abgekürzt wird, ist performant, einfach zu bedienen, plattformunabhängig und geradlinig ohne Firlefanz. Der Code-Editor bietet alle Features, die viele Entwicklerinnen und Entwickler in ihrem alltäglichen Code-Build-Debug-Zyklus brauchen.

Im Laufe der Jahre ist darüber hinaus die Unterstützung für Frameworks, Tools, Sprachen und Cloud-Plattformen beständig gewachsen, was die Nutzerbasis und die Akzeptanz merklich gesteigert hat. Zudem sorgt die Extension API dafür, dass Visual Studio Code über Plug-ins erweiterbar ist. Dadurch haben einerseits professionelle Anbieter die Möglichkeit, die Entwicklungsumgebung für eigene Zwecke aufzurüsten, andererseits kann aber auch die Community Beiträge leisten. Ein Beispiel sind unter anderem MicroPython [1] und das Robotik-Kit der LEGO Mindstorms EV3 (die dritte Generation der Mindstorms-Linie von Lego). Dazu gibt es ein Plug-in, um in Python geschriebene Programme direkt auf den EV3 zu übertragen und zu starten. Dadurch hat VS Code den Einzug in den Bildungsbereich geschafft, weil die Kombination oft an Schulen und in anderen Bildungseinrichtungen zum Einsatz kommt.

Andere Beispiele sind das Java-Ökosystem, das sich durch die aktive Open-Source-Community rund um Visual Studio Code ebenfalls weiterentwickelt, sowie F# als funktionale Sprache, bei der Visual Studio Code auf der offiziellen Liste empfohlener Entwicklungsumgebungen steht. Auch "Platzhirsche" wie C#, die vorher stark an Visual Studio angebunden zu sein schienen, besitzen eine lebendige Community rund um Visual Studio Code.

Diese dreiteilige Artikelserie beleuchtet Visual Studio Code aus verschiedenen Blickwinkeln. Im ersten Teil dreht sich alles um die Hintergründe und die Entstehungsgeschichte, die Erwartungen an eine IDE (Integrated Development Environment) wie Visual Studio Code, die technische Basis, Features, sowie die Einbindung in die vielfältigen Ökosysteme, die eine generalistische Entwicklungsumgebung bedienen können muss. Der zweite Teil wird die umfangreiche Erweiterbarkeit behandeln, die zahlreichen Einstellungen zur Konfiguration, das Thema Lizenzen, Telemetrie-Daten und einen kurzen Vergleich mit anderen Editoren. Im dritten und letzten Teil wechselt der Fokus zurück zur Erweiterbarkeit. Er wird zeigen, wie sich eine eigene Visual-Studio-Code-Erweiterung implementieren lässt, um der IDE neue Funktionen beizubringen.

Visual Studio Code (VS Code) [2] fing sein Dasein recht beschaulich an. Die erste finale Version 1.0.0 erblickte im April 2016 das Licht der Welt. Microsoft veröffentlichte die Anwendung auf Deutsch und in neun weiteren Sprachen. Die erste Beta-Version war bereits ein Jahr früher erschienen und betrat auf der Entwicklerkonferenz Build 2015 die Bühne. Zum damaligen Zeitpunkt gab Microsoft die Anzahl der aktiven Nutzerinnen und Nutzer mit 500.000 an [3]. Diverse Quellen sprechen seither von circa 4,5 Millionen Nutzern im Jahr 2018, rund 5 Millionen im Jahr 2019 und 11 Millionen Mitte 2020 [4]. Laut der jährlich durchgeführten Entwicklerumfrage der Internetplattform Stack Overflow nutzen etwas über 50 Prozent der Umfrageteilnehmer VS Code als Entwicklungsumgebung [5]. Die Zahlen sind allerdings mit Vorsicht zu genießen, da in der Studie überproportional viele Web-Entwickler vertreten waren, die tendenziell eher zu dieser Entwicklungsumgebung greifen. Die Umfrage gibt keinen Aufschluss über die Hintergründe dieser Präferenz, allerdings geht aus ihr hervor, dass Entwickler und Entwicklerinnen mobiler Anwendungen eher Android Studio oder Xcode wählen als Visual Studio Code, während beispielsweise Data Scientists zu IPython/Jupyter, PyCharm und RStudio tendieren.

Bis heute ruft VS Code immer wieder eine gewisse Skepsis hervor. Zum einen liegt das am hauptverantwortlichen Unternehmen Microsoft. Dass aus diesem Hause ein Code-Editor kommen könnte, der quelloffen und fast gleichnamig ist mit Visual Studio, dem IDE-Flaggschiff von Microsoft, löst unter Entwicklern ausgesprochene Verwunderung aus. Eine oft geäußerte Meinung ist, dass sich der Konzern dadurch möglicherweise selbst kannibalisiert. Wer VS Code im Einsatz hat und damit zufrieden ist, nutzt für C# und Co. sicherlich kein Visual Studio mehr – insbesondere, da das im Enterprise-Umfeld gehörig auf das Budget schlägt.

Dass Visual Studio sich deutlich weiterentwickeln muss, ist nicht erst seit gestern bekannt. Und dennoch wird Visual Studio wohl niemals alle erreichen, was Microsoft offenbar einkalkuliert hat. Zahlreiche Features, zusammengefasst in der Enterprise-Version (Visual Studio), sind kostenpflichtung und verschwinden somit hinter einer Paywall. In diesem kostenpflichtigen Segment tummeln sich zudem weitere Anbieter wie JetBrains mit der Rider genannten IDE. Wer VS Code in einem anderen Zusammenhang einmal ausprobiert hat und zufrieden war, wird sich vielleicht auch die Entwicklung beispielsweise mit C# darin anschauen – zumal mit .NET Core und .NET 5 zunehmend Funktionen auf die Kommandozeile wandern und nicht mehr strikt an Visual Studio gebunden sind, was früher der Fall war. Mit VS Code ist es offensichtlich gelungen, auch diejenigen zur Nutzung dieser Ausgabe des Editors zu bewegen, die die kommerzielle Version (Visual Studio) ohnedies nicht genutzt hatten und gar nicht erst in Betracht ziehen würden.

Microsoft hat es mit VS Code ebenfalls geschafft, eine lebendige Community rund um den Code-Editor aufzubauen. Der Quelltext zum Projekt steht auf GitHub zur Verfügung [6]. Dort wird das Projekt offiziell "Visual Studio Code – Open Source ("Code – OSS")" genannt. VS Code steht unter der MIT-Lizenz und erfreut sich reger Beteiligung. Die Anzahl der Mitwirkenden ist vierstellig, und weit über 8.000 Pull Requests sind geschlossen. Beim Schreiben dieses Artikels ist Version 1.57.1 aus dem Mai 2021 das aktuelle Release [7]. Eine Neuerung ist beispielsweise der stabile Build für Apple Silicon, also die Apple-Prozessoren M1 für das Macbook Air und weitere Produkte. Das Vertrauen in VS Code liegt auch darin begründet, dass es regelmäßige Update-Zyklen gibt. Das Wiki auf GitHub gibt Auskunft darüber, was jeweils für die nächste Version geplant ist.

Der Iterationsplan verrät konkret, welche Meilensteine angedacht sind und wie fortgeschritten die Entwicklung bereits ist [8]. Die aktuelle Iteration für den Juni 2021 listet zum Beispiel zahlreiche Anpassungen im Bereich der Barrierefreiheit, des Notebook-Editors, der Workbench und verschiedener Sprach-Erweiterungen auf. Diese Update-Politik, die Microsoft auch vermehrt bei anderen Produkten nutzt, passt zu einem Open-Source-Projekt und schafft die notwendige Transparenz. Letztere wird durch das sogenannte "Endgame" noch einmal gefördert [9], das pro Iteration alle Schritte auflistet, die das Entwicklungsteam durchgeführt hat. Dreh- und Angelpunkt für alle wichtigen Informationen ist das Repository zu VS Code auf GitHub.

Wer mit einem Open-Source-Code-Editor Software entwickelt, stellt zahlreiche Anforderungen – insbesondere an eine Anwendung wie VS Code, die damit wirbt, auf allen Plattformen zu funktionieren und zahlreiche Programmiersprachen zu unterstützen. VS Code hat sich über die Zeit erheblich weiterentwickelt. Ein Screenshot des aktuellen UIs (User Interface) ist in Abbildung 1 zu sehen.

Screenshot der aktuellen VS-Code-Versionen (Abb. 1)

Screenshot der aktuellen VS-Code-Versionen (Abb. 1)

Bezüglich der Performance hat ein Code-Editor hohe Ansprüche zu erfüllen. Niemand möchte lange warten, wenn es sich vermeiden lässt, und bei der Eingabe von Text darf es keine Verzögerungen geben. Notwendige Wartezeiten entstehen bei großen Builds oder zusätzlichen Prozessen, die anzustoßen sind. Unnötige Wartezeiten betreffen die Eingabe von Text, Dateioperationen, Syntax-Hervorhebung Bei einer Cross-Plattform-Anwendung gilt das dann auch für alle Betriebssysteme gleichermaßen und für den generellen Funktionsumfang. Was auf Windows funktioniert, muss auch überall zur Verfügung stehen und im besten Fall ebenso performant sein. Zur Performance verrät der nachfolgende Abschnitt einige weitere Aspekte.

VS Code besitzt zudem eine brauchbare Integration von Debugging-Features, was die Entwickler-Community ebenfalls von ihrem Editor erwartet. Angefangen hat es mit dem Node.js-Debugging und ist stetig erweitert worden, auch über externe Plug-ins. Die unterstützten Plattformen, Build-Tools, Programmiersprachen und weiteren Werkzeugen sprechen für sich. Die Nutzungs- und Verbreitungszahlen deuten darauf hin, dass VS Code den Ansprüchen gerecht werden konnte und vermutlich auch weiterhin wird.

Die Grundlage von VS Code bildet das häufig Framework Electron, zuvor als GitHub Electron Shell bekannt. Electron ist eine native Umgebung, die als Container für eine Webanwendung fungiert und intern einen Browser mit Node.js zur Verfügung stellt. Bei der technischen Basis, auf der VS Code steht, sind in der Wahrnehmung des Autors immer noch viele Nutzer skeptisch, denn es gibt einige Schwachstellen: den hohen Speicherverbrauch sowohl auf der Festplatte als auch des Arbeitsspeichers, HTML und CSS auf dem Desktop, mit CSS erstellte UIs, die nicht auf allen Plattformen identisch aussehen (Stichwort native User Interfaces), die Langsamkeit in bestimmten Bereichen und Sicherheitsprobleme, um nur einige häufig geäußerte Punkte zu nennen.

Die Kritik hierzu fällt teils recht heftig aus, wie sich auf Reddit und andernorts nachvollziehen lässt, beispielsweise in einem Beitrag des Software-Bloggers Federico Terzi: "Why Electron is a necessary Evil [10]" oder in einer Diskussion im Forum Y Hackernews zur Frage "Is Electron really that bad for desktop apps? [11]". Wer sich tiefer in die Materie einfuchsen möchte, kann auch den Artikel von Alain Perkaz im Freecode Camp lesen: "Things I wish I knew before working with Electron.js [12]".

Eine Electron-Anwendung wird mit den verbreiteten Web-Technologien JavaScript, HTML, CSS, Less oder Sass erstellt, während der Container rundherum nativ für die jeweiligen Plattformen zur Verfügung steht. Das bedeutet, dass die Kernkomponente von VS Code ein HTML-basierter Editor ist. Genau genommen ist es der Cloud-basierte Editor Monaco [13], der als eigenständiges Open-Source-Projekt zur Verfügung steht.

Die Vermischung von nativen Technologien mit dem Web-Stack finden viele nicht ganz ausgereift. Mittlerweile ist Electron in der Hauptversion 12.0 erschienen [14] (die aktuellste Version zum Veröffentlichungszeitpunkt ist 13.1.5) und dient als Grundlage für zahlreiche Anwendungen. Die technische Basis ist gegeben und kann solide sein, wenn sie richtig genutzt wird. Hintergrund dieser Aussage ist die Erfahrung, dass es leider eine Reihe unschöner Beispiele für schlechtes Betriebsverhalten, geringe Nutzerfreundlichkeit und fehlende Stabilität gibt: Deutlich zu alte Versionen, offene Sicherheitslücken und eine miese Performance zeichnen viele Electron-Anwendungen aus. Das kratzt am Image des Frameworks Electron.

Umso bemerkenswerter ist es, dass VS Code eine hervorragende Performance bietet, wie sich beispielsweise einem YouTube-Video des Entwickler-Teams von VS Code zum Thema Performance [15] entnehmen lässt. Die Anwendung gilt bei vielen Entwicklerinnen und Entwicklern als ein mit Electron erstelltes Vorzeigeprojekt. Der Start ist schnell, der Wechsel zwischen (auch umfangreichen) Dateien verläuft flüssig, und selbst bei allen weiteren Aktionen ist schnell vergessen, dass es sich um eine Electron-Anwendung handelt. Da können viele andere Applikationen nicht mithalten, zum Beispiel Microsoft Teams, das trotz zahlreicher Updates in der Vergangenheit nicht ansatzweise an die Leistung von VS Code heranreicht.

VS Code nutzt einige Tricks, um die Dinge tatsächlich zu beschleunigen oder sie zumindest schnell wirken zu lassen. Ein nicht unerheblicher Teil des Startup-Prozesses von VS Code geht auf das Konto von Electron. Dieser Get-Ready-Moment liegt in der Verantwortung von Electron, darauf hat das VS-Code-Team keinen Einfluss. Anschließend folgt die Code-Loading-Phase der eigentlichen VS-Code-Anwendung. An dieser Stelle kommen zahlreiche Methoden aus dem Web-Umfeld zum Einsatz, wie beispielsweise Bundle und Minify, V8 Cached Data, Tree Shaking und Code Splitting, um die etwa 1.300 TypeScript-Dateien, aus denen VS Code besteht, in die Electron-VM (Virtual Machine) zu laden. Nur, um ein Beispiel zu nennen: Zum Beschleunigen des Ladens der User-Dateien hat das Entwicklungsteam an den Lifecycle-Phasen von VS Code gearbeitet. Das Ziel ist, möglichst schnell zu einem blinkenden Cursor zu kommen.

Dazu werden nicht relevante Operationen erst nach dem Anzeigen eines Datei-Inhalts durchgeführt, damit das Laden dieser Datei nicht hinter einem langlaufenden Prozess feststeckt, der aber nur im Hintergrund etwas bearbeitet und den Nutzerinnen und Nutzer gar nicht wahrnehmen. Das führt dazu, dass VS Code eine Datei zunächst nur lädt, um sie erst anschließend durch die Syntax-Hervorhebung einzufärben. Diese und ähnliche Schritte können das Betriebsverhalten in den Augen der Anwender allerdings erheblich positiv beeinflussen. Darüber hinaus arbeitet das VS-Code-Team an der wahrgenommenen Performance von VS Code.

Beim Wechseln der Tabs von geöffneten Dateien wird der aktive Tab bereits bei einem MouseDown verändert. Erst danach lädt die Datei zunächst in schwarz-weißer Darstellung, um anschließend die Einfärbung durchzuführen. Dadurch kommen den Nutzern die Dateiwechsel in VS Code sehr schnell vor, ohne dass sie es in Wirklichkeit sind. Dieses UI-Pattern kommt an vielen Stellen von VS Code zum Einsatz.

Der Umfang an Features von VS Code hat über die Jahre deutlich zugenommen, und nach wie vor deckt er primär die grundlegenden Funktionen eines Code-Editors ab. Features, die für einen Editor nicht zwingend "überlebenswichtig" sind, kann die Community allerdings über das offene Erweiterungssystem der Plug-ins nachrüsten.

Im Normalfall kommt VS Code mit einer Portion Tools für Web-Technologien wie HTML, CSS, Less, Sass und JSON daher. Zusätzlich sind Funktionen für Paket-Manager, Repositories, Builds und Build-Systeme mit an Bord. Das Versionsverwaltungssystem Git ist standardmäßig dabei, Git-Workflows und Source-Diffs unterstützen es direkt im Code-Editor. Für Code-Editoren typische Funktionalitäten sind ebenfalls enthalten. Eine Autovervollständigung im Sinne eines IntelliSense sowie semantische Quelltext-Navigation und -Verständnis lassen sich bei Bedarf über eine Erweiterung nachrüsten, falls die Dateiendung beziehungsweise der Dateiinhalt VS Code noch nicht bekannt sein sollten.

Die Anwendungsszenarien von VS Code haben sich ebenfalls über die Jahre deutlich erweitert. Die Zeiten, in denen nur eine Unterstützung von .NET mit C#, Node.js, JavaScript, TypeScript sowie HTML und CSS vorhanden war, sind längst vorbei. Code auf Cloud-Plattformen wie Azure und AWS auszuliefern, ist ebenfalls möglich. Bei den unterstützten Programmiersprachen und Dialekten ist die Palette sehr breit geworden.

Laut Website werden Hunderte Programmiersprachen unterstützt, was VS Code zu einem universellen Code-Editor macht [16]. Zusätzlich zu den bereits genannten findet sich ebenfalls Unterstützung für die folgenden Sprachen (in alphabetischer Reihung): Batch, C++, Clojure, Coffee Script, Dockerfile, F#, Go, Groovy, HandleBars, Haxe, Ini, Jade, Java, Less, Lua, Makefile, Markdown, Objective-C, Perl, PHP, PowerShell, Python, R, Razor, Ruby, Rust, Saas, SQL, Swift, Visual Basic und XML. Teilweise ist der Support direkt in VS Code integriert, teilweise ist eine Erweiterung nachzuinstallieren.

Visual Studio Code lässt sich direkt in ein Ökosystem einbinden oder auch erst nach der Installation einer Erweiterung. Aber auch das ist kein großes Problem, denn der Extension Manager, wie er in der englischen Version heißt, ist ebenfalls im Installationsumfang enthalten. Die technische Basis, die VS Code nutzt, erlaubt es, dass zahlreiche Technologien, die für VS Code zum Einsatz kommen, ebenfalls bei der täglichen Arbeit mit dem Code-Editor zur Verfügung stehen wie beispielsweise Roslyn für .NET [17], die Visual-Studio-Debugging-Engine und weitere Programme. Linter und Code-Formatter, um zwei Beispiele für häufig genutzte Tools zu nennen, sind ebenfalls direkt in VS Code integrierbar, so auch der beliebte Formatter Prettier, der nach der Aktivierung die Formatierung von Dateiinhalten im Auge behält.

Beim ersten Öffnen einer Datei mit einer unbekannten Endung bietet VS Code an, eine spezielle Erweiterung zu installieren: Damit ist der Language Support gemeint, also die Unterstützung für Programmiersprachen. In VS Code gibt es zahlreiche Sprachen und Dialekte, die in der Standardversion integriert sind. Alle anderen lassen sich über Erweiterungen nachinstallieren. Zu den Dateiendendungen gehören nicht nur die Verknüpfung einer Endung mit einer speziellen Ansicht, also Syntax-Highlighting, sondern auch das Bracket Matching, IntelliSense, Linting, die Code-Navigation, Debugging und Refactoring.

Die korrekte Sprache und Erweiterung für einen Dateityp zu haben, lohnt sich daher auf mehreren Ebenen. Die Sprache zu einer Datei lässt sich über die Statuszeile von VS Code anpassen. Das öffnet die sogenannte "Select Language Mode"-Auswahl, die in Abbildung 2 zu sehen ist. Darin ist die Auswahl vorhandener oder nachrüstbarer Programmiersprachen und Dialekte dargestellt.

Auswahl einer Sprache oder eines Dialekts zu einer Dateiendung (Abb. 2)

Auswahl einer Sprache oder eines Dialekts zu einer Dateiendung (Abb. 2)

Das Feature funktioniert auch bei Dateien in Programmiersprachen, die häufig in Web-Frameworks zum Einsatz kommen. So ordnet es Vue-Dateien direkt dem Web-Framework Vue.js zu und die Dateien lassen sich komfortabel in VS Code bearbeiten. Mit anderen Frameworks verhält es sich ähnlich.

Beim Thema Debugging liefert VS Code ein solides Fundament, damit andere Entwicklungsteams, Open-Source-Projekte und die Community darauf aufbauend eine solide Edit-Build-Debug-Erfahrung für ihre jeweilige Plattform beziehungsweise Programmiersprache anbieten können. Mit dem Fundament ist ein eingebauter Debugger gemeint und eine umfassende Unterstützung im User Interface (UI) wie zum Beispiel die Debug-Seitenleiste. Der integrierte Debugger unterstützt die Node.js-Runtime, damit also die Sprachen JavaScript und TypeScript sowie alle anderen, die sich nach JavaScript transpilieren lassen.

Für andere Debugger sind die sogenannten Debugger Extensions zuständig. Sie lassen sich als Erweiterung nachinstallieren und sind für häufig genutzte Sprachen ebenfalls sehr gefragt, wie die Download-Zahlen in Abbildung 3 zeigen. Gleichzeitig wird deutlich, dass es für verbreitete Programmiersprachen wie Python, C/C++, C# und Java Debugging-Erweiterungen gibt, sodass die Unterstützung dieser Ökosysteme in Visual Studio Code kein Problem darstellt.

Übersicht häufig installierter Debugging-Extensions (Abb. 3)

Übersicht häufig installierter Debugging-Extensions (Abb. 3)

Ist ein Debugger aktiv, stehen die typischen Funktionen wie Continue/Pause, Step Over/Into/Out, Restart und Stop zur Verfügung. Breakpoints, Logpoints und die Möglichkeit, Daten zur Laufzeit anzuzeigen und zu analysieren, sind ebenfalls vorhanden. Wenn einzelne Statements oder kleinere Snippets auszuprobieren sind, reicht der REPL (Read-Eval-Print Loop) mitunter schon aus. Er ist ebenfalls in VS Code direkt integriert.

Visual Studio Code ist ein vielseitiges Werkzeug, das haben die hier vorgestellten Features und Anwendungsszenarien sicherlich verdeutlicht. Da VS Code mittlerweile sehr umfangreich geworden ist, konnte der erste Teil dieser Serie nur einen Überblick geben. Die Vielfalt an Funktionen und Einsatzmöglichkeiten ist es auch, die zur Beliebtheit der IDE beigetragen hat. Visual Studio Code lässt sich schnell installieren, ist auf allen gängigen Plattformen verfügbar, umfassend konfigurier- sowie anpassbar und steht einem im Entwickleralltag gefühlt robust und zuverlässig zur Seite.

Im nachfolgenden zweiten Teil der Serie dreht sich alles um die Erweiterbarkeit, den Weg hin zu einem minimalistischen Code-Editor, Lizenzen und Telemetrie-Daten.

Dr. Fabian Deitelhoff
lebt und arbeitet in Dortmund, der Metropole des Ruhrgebiets. Am CET (Centrum für Entrepreneurship & Transfer) der TU Dortmund arbeitet er als Innovations- und Transfermanager. Er hat brickobotik gegründet und ist als Softwareentwickler sowie Autor tätig.

(sih [18])


URL dieses Artikels:
https://www.heise.de/-6128966

Links in diesem Artikel:
[1] https://micropython.org/
[2] https://code.visualstudio.com/
[3] https://www.heise.de/meldung/Visual-Studio-Code-verlaesst-die-Beta-Phase-3175178.html
[4] https://code.visualstudio.com/blogs/2020/06/09/go-extension
[5] https://insights.stackoverflow.com/survey/2019#technology-_-most-popular-development-environments
[6] https://github.com/microsoft/vscode
[7] https://github.com/microsoft/vscode/releases
[8] https://github.com/microsoft/vscode/wiki/Iteration-Plans
[9] https://github.com/Microsoft/vscode/wiki/Running-the-Endgame
[10] https://federicoterzi.com/blog/why-electron-is-a-necessary-evil/
[11] https://news.ycombinator.com/item?id=17005551
[12] https://www.freecodecamp.org/news/lessons-learned-from-electronjs/
[13] https://github.com/microsoft/monaco-editor
[14] https://www.heise.de/news/JavaScript-Electron-12-0-ergaenzt-API-fuer-Web-Frame-Zugang-aus-dem-Hauptprozess-5070795.html
[15] https://www.youtube.com/watch?v=r0OeHRUCCb4
[16] https://code.visualstudio.com/docs/languages/overview
[17] https://github.com/dotnet/roslyn
[18] mailto:sih@ix.de