Admins verwalten und aktualisieren meist eine Vielzahl unterschiedlicher Konfigurationsdateien. Werden diese von mehreren Mitgliedern eines Teams bearbeitet, kann dies schnell zu Inkonsistenzen führen. Eine einheitliche Struktur innerhalb der Dateien zu gewährleisten, ist in diesem Fall nicht einfach. Um dieses Problem zu lösen, stellt der Open-Source-Tipp in diesem Monat das Projekt EditorConfig vor und zeigt, wie Sie damit Ordnung in Ihre Konfigurationsdateien bringen.
Unterschiedliche Editoren und Systeme nutzen verschiedene Standards für Einrückungen, Enden von Zeilen oder Kodierungen. Dies kann schnell zu Inkonsistenzen führen und oftmals ein langwieriges Debugging erfordern. Dass trifft insbesondere Entwickler, die mit Programmiersprachen arbeiten, die eine bestimmte Struktur innerhalb der Codedateien erfordern. Als klassisches Beispiel dient Python. Verwenden Sie hier beispielsweise unterschiedliche Einrückungen, wird die Ausführung des Codes vom Python-Interpreter mit einem Fehler beendet. Grundsätzlich sorgt eine einheitliche Struktur innerhalb von Codedateien aber in jedem Fall auch für eine bessere Lesbarkeit des Codes und hilft somit, mögliche Fehler zu vermeiden oder frühzeitig zu erkennen.
Gleiches gilt natürlich auch für Konfigurationsdateien. Nicht nur unter Linux oder macOS findet die Konfiguration von unzähligen Tools über textbasierte Dateien statt. Auch unter Windows gibt es etliche Formate für Konfigurationsdateien, die ebenfalls eine bestimmte Struktur erfordern. Als Beispiel können hier die klassischen INI- oder Batch-Dateien dienen. Auch bei PowerShell-Skripten ist eine einheitliche Struktur in jedem Fall hilfreich.
EditorConfig [1] ist im Kern lediglich eine einfache Konfigurationsdatei namens ".editorconfig", in der Sie die gewünschten Formatierungsregeln für Ihre Dateien definieren. Viele Editoren und IDEs unterstützen diese Datei von Haus aus und setzen die darin festgelegten Standards automatisch um. Hiermit stellen Sie sicher, dass Skripte, Konfigurationsdateien und andere textbasierte Dateien unabhängig vom verwendeten Editor einheitlich formatiert werden.
Unterschiedliche Editoren und Systeme nutzen verschiedene Standards für Einrückungen, Enden von Zeilen oder Kodierungen. Dies kann schnell zu Inkonsistenzen führen und oftmals ein langwieriges Debugging erfordern. Dass trifft insbesondere Entwickler, die mit Programmiersprachen arbeiten, die eine bestimmte Struktur innerhalb der Codedateien erfordern. Als klassisches Beispiel dient Python. Verwenden Sie hier beispielsweise unterschiedliche Einrückungen, wird die Ausführung des Codes vom Python-Interpreter mit einem Fehler beendet. Grundsätzlich sorgt eine einheitliche Struktur innerhalb von Codedateien aber in jedem Fall auch für eine bessere Lesbarkeit des Codes und hilft somit, mögliche Fehler zu vermeiden oder frühzeitig zu erkennen.
Gleiches gilt natürlich auch für Konfigurationsdateien. Nicht nur unter Linux oder macOS findet die Konfiguration von unzähligen Tools über textbasierte Dateien statt. Auch unter Windows gibt es etliche Formate für Konfigurationsdateien, die ebenfalls eine bestimmte Struktur erfordern. Als Beispiel können hier die klassischen INI- oder Batch-Dateien dienen. Auch bei PowerShell-Skripten ist eine einheitliche Struktur in jedem Fall hilfreich.
EditorConfig [1] ist im Kern lediglich eine einfache Konfigurationsdatei namens ".editorconfig", in der Sie die gewünschten Formatierungsregeln für Ihre Dateien definieren. Viele Editoren und IDEs unterstützen diese Datei von Haus aus und setzen die darin festgelegten Standards automatisch um. Hiermit stellen Sie sicher, dass Skripte, Konfigurationsdateien und andere textbasierte Dateien unabhängig vom verwendeten Editor einheitlich formatiert werden.
Alternative zu modelines
So gesehen stellt EditorConfig eine Weiterentwicklung der allseits beliebten modelines [2] dar. Mit modelines ist es möglich, innerhalb einer Datei bestimmte Formatierungsregeln für eben diese Datei zu definieren. Die Anweisungen stehen dabei zumeist ganz am Anfang oder Ende der Datei. Die folgende modeline zeigt ein klassisches Beispiel für den vim-Editor:
Die Anweisungen besagen, dass der Editor sämtliche Einrückungen mit einer Breite von vier Spaces vornimmt und Tabs grundsätzlich immer in Spaces umgewandelt und somit immer vier Leerzeichen für einen Tab verwendet werden. modelines beziehen sich dabei aber lediglich auf die Datei in der die modeline aufgeführt ist. Mit EditorConfig können Sie dieses Konzept nun auf ganze Projektordner ausweiten, ohne in jeder Datei des Projekts eine eigene modeline verwenden zu müssen.
Teams, die gemeinsam an Konfigurations- oder Quellcodedateien arbeiten, beispielsweise über ein zentrales Git-Repository oder ein Entwicklerportal, kann EditorConfig helfen, unterschiedliche Formatierungsstile, und somit potentielle Fehlerquellen, zu vermeiden. Zudem sorgt die ".editorconfig"-Datei für einheitliche Konventionen über verschiedene Betriebssysteme und Editoren hinweg. So kommt EditorConfig auch in vielen Entwickler-Frameworks zum Einsatz. Als Beispiel soll an dieser Stelle Backstage [3] dienen. Die ursprünglich von Spotify entwickelte Software stellt als Open-Source-Framework sogenannte Internal Developer Platforms (IDP) zur Verfügung, um Entwickler innerhalb eines Unternehmens bei der Verwaltung und der Organisation ihrer Projekte zu unterstützen [4].
Durch die Installation eines Plug-ins können Sie auch aus Visual Studio Code auf die Settings der Datei ".editorconfig" zurückgreifen.
EditorConfig im Einsatz
Viele Editoren, darunter Neovim (ab Version 0.9.0) [5], unterstützen EditorConfig von Haus aus. Falls Ihr Editor nicht dazugehört, können Sie jedoch zumeist die Unterstützung von EditorConfig durch die Installation eines Plug-ins nachrüsten. Eine vollständige Liste der unterstützten Editoren finden Sie unter [6]. Möchten Sie beispielsweise aus Visual Studio Code (VS Code) auf die Formatierungsregeln aus der ".editorconfig"-Datei zurückgreifen, finden Sie hierfür ein entsprechendes Plug-in im VS Code Marketplace [7].
Möchten Sie mithilfe von EditorConfig primär Konfigurationsdateien und Skripte einheitlich strukturieren, können Sie hierfür die ".editorconfig"-Datei aus dem Listing-Kasten als Grundlage verwenden. Das Listing soll Ihnen dabei helfen, zu verstehen, welche Möglichkeiten EditorConfig bietet. Grundsätzlich lassen sich unterschiedliche Formatierungsanweisungen für einzelne Dateitypen definieren. Für deren Formatierung unterstützt die Datei Wildcards und bestimmte Parameter. Eine vollständige Liste der zur Verfügung stehenden Möglichkeiten und weitere Details zu dem Dateiformat der ".editorconfig"-Datei finden Sie unter [8].
Öffnen Sie nun eine Datei mit einem Editor, der EditorConfig unterstützt, sucht dieser nach der Datei ".editorconfig" im aktuellen und allen darüberliegenden Verzeichnissen. Somit können Sie die Konfigurationsdatei entweder spezifisch innerhalb eines Projektordners speichern oder eine allgemeine Konfigurationsdatei in Ihrem Benutzerverzeichnis ablegen.
Findet der Editor jedoch eine ".editorconfig" mit der Anweisung "root = true", werden keine weiteren Dateien mehr gesucht. Das bedeutet: Haben Sie im Projektverzeichnis ein ".editorconfig"-File mit dieser Anweisung darin liegen, bleiben die Anweisungen aus einer anderen ".editorconfig"-Datei im Benutzerverzeichnis unberücksichtigt, solange Sie Dateien aus dem Projektverzeichnis bearbeiten.
Listing: Beispiel für ".editorconfig"
### Das Listing enthält Formatierungsanweisungen primär für Konfigurationsdateien und Skripte.
# Root-Projektverzeichnis
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.{conf,sh}]
indent_style = space
indent_size = 4
[*.service]
indent_style = space
indent_size = 2
insert_final_newline = false
[*.{py,go,ps1}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
Zusammenspiel mit Neovim
Neovim unterstützt EditorConfig seit Version 0.9.0 nativ, sodass es ohne zusätzliches Plug-in funktioniert. In der Lua-basierten Konfigurationsdatei "init.lua" aktivieren Sie EditorConfig mithilfe der Anweisung
vim.g.editorconfig = true. Innerhalb von NeoVim verifizieren Sie dann mittels
lua = vim.g.editorconfig, dass EditorConfig auch tatsächlich aktiv ist und sollten als Ergebnis "true" erhalten. Sofern Sie zur Konfiguration von NeoVim noch Vimscript einsetzen, lautet die Konfigurationsanweisung
let g:editorconfig = v:true. Bei Bedarf können Sie die Liste der zur Verfügung stehenden Parameter für NeoVim auch erweitern. Die Dokumentation [5] enthält hierfür einige Beispiele.
Fazit
EditorConfig erleichtert die einheitliche Formatierung von Skripten und Konfigurationsdateien. Durch die einfache Einrichtung und die Unterstützung in zahlreichen Editoren ermöglicht es eine konsistente Struktur, was besonders wichtig ist, wenn mehrere Personen an den Dateien arbeiten. Mit einer einzigen ".editorconfig"-Datei können Sie sicherstellen, dass Ihre Konfigurationsdateien sauber strukturiert bleiben und sich problemlos in Versionskontrollsysteme wie beispielsweise Git oder Entwickler-Portale wie beispielsweise Backstage integrieren lassen.