Beim Programmieren ist KI inzwischen wirklich stark geworden. Du sagst ihr „Schreib mir eine Debounce-Funktion“, und sie spuckt sie dir in drei Sekunden aus, inklusive Kommentaren und Testfällen. Du sagst ihr „Refaktoriere diese Komponente in Hooks“, und sie bekommt das auch sauber hin. Manchmal hast du sogar das Gefühl, dass deine Tippgeschwindigkeit nicht mit ihrer Generierungsgeschwindigkeit mithalten kann.
Aber eine Sache ist besonders interessant – egal wie schön der von KI generierte Code auch ist, ob von Menschen geschrieben, von Maschinen erzeugt oder von beiden durcheinandergebracht: JS-Code kommt am Ende nicht um einen Schritt herum: die Formatierung.
Du denkst vielleicht, was soll das denn für ein Problem sein? Der Editor hat doch eingebaute Formatierung, oder? In VS Code drückst du Shift+Alt+F, Prettier läuft, und fertig. Ja, für die alltägliche Entwicklung reicht das tatsächlich. Aber das Problem kommt, wenn du irgendwo aus dem Netz ein Stück Code herunterziehst, das so komprimiert ist, dass es wie Kauderwelsch aussieht, oder wenn du den „jahrhundertealten Scheißhaufen“ von deinem Vorgänger übernimmst, oder wenn du von irgendeinem CDN eine min.js ziehst und sehen willst, was sie eigentlich macht – dann merkst du, dass normale Formatierung bei Weitem nicht ausreicht.
Ich hatte vor Kurzem genau so einen Fall. In einem alten Projekt musste ein dringender Bug behoben werden, aber der Quellcode war längst nicht mehr auffindbar, auf dem Server lag nur noch eine komprimierte JS-Datei. Was tun? Zähne zusammenbeißen und lesen. Der Code sah so aus: function a(b,c){return b+c}var d=function(e){return e2} – die Variablennamen waren alle abcdefg, die Funktionen so ineinander verschachtelt wie russische Matrjoschkas, Zeilenumbrüche? Fehlanzeige, der ganze Code war eine einzige Zeile, und wenn du die Scrollleiste nach rechts ziehst, bekommst du einen Krampf im Finger.
Genau dann brauchst du spezielle JS-Formatierungs- und Komprimierungstools.
Fangen wir mit der Formatierung an. Ein gutes Formatierungstool fügt nicht nur Zeilenumbrüche und Einrückungen hinzu, es muss auch die Codestruktur intelligent erkennen. Zum Beispiel bei if(a){b()}else{c()} muss es wissen, wie man es in mehrere Zeilen aufteilt, damit es lesbaren Konventionen entspricht. Bei verschachtelten Ternärausdrücken muss es entscheiden, wann ein Zeilenumbruch angebracht ist und wann eine einzelne Zeile klarer bleibt. Dazu kommen Objektliterale, Arrays, Funktionsparameter – die Formatierungsregeln sind überall unterschiedlich, und schon eine kleine Abweichung fühlt sich unangenehm an.
Ich habe viele Online-Tools ausprobiert, manche machen es sich einfach und brechen stumpf nach Semikolons um, was dann dazu führt, dass `for(var i=0;i