Ich habe einen C-, C++- und Java-Formatter für die Node.js-Umgebung mit Clang entwickelt.
(github.com/lumirlumir)Hallo, ich habe für die Node.js-Umgebung einen C-, C++- und Java-Formatter auf Basis von Clang entwickelt. Dieses Projekt ist ein neuer Ansatz auf Grundlage des inzwischen nicht mehr gewarteten (deprecated) angular-Pakets clang-format.
Vor ein bis zwei Monaten hatte ich bereits einmal einen Beitrag mit demselben Inhalt veröffentlicht, aber da die Stabilität des Pakets weiter gestiegen ist und neue Funktionen hinzugekommen sind, habe ich mich entschlossen, noch einmal darüber zu schreiben.
Inzwischen haben sich viele Menschen dafür interessiert, und dank zahlreicher bisheriger Legacy-Nutzer, die umgestiegen sind, haben wir die Marke von 10.000 wöchentlichen Downloads überschritten. Vielen Dank dafür.
Außerdem hat das Paket eine vollständige Testabdeckung erreicht, und es gibt bereits einen PR, der Node.js Core von dem bisherigen angular-Projekt clang-format auf dieses Paket umstellen möchte. Daher denke ich, dass Sie es hinsichtlich der Stabilität mit Vertrauen einsetzen können. (Natürlich kann es trotzdem noch Punkte geben, die ich übersehen habe...)
Dieses Paket basiert auf clang-format von Clang, dem LLVM-C-Compiler, und übernimmt die Code-Formatierung für die Sprachen C, C++ und Java. Man kann es im Grunde als ein Paket mit derselben Rolle wie Prettier ansehen, eines der bekanntesten Pakete in der Node.js-Umgebung.
Allerdings unterstützt das Paket Prettier die Formatierung von C, C++ und Java nicht, weshalb man für diese Sprachen häufig clang-format verwendet, um die Formatierung zu steuern.
clang-format in der Node.js-Umgebung ist besonders nützlich, wenn man – wie bei der Entwicklung von Node.js Core – sowohl JavaScript-Code als auch C/C++-Code gemeinsam schreiben muss. Beim bisherigen clang-format mussten zusätzliche Abhängigkeiten installiert werden, um das Paket zu verwenden, mit dem aktuellen Paket ist das jedoch nicht mehr nötig.
Außerdem war das bisherige clang-format-Paket in Workflows mit Node.js und npm, etwa in CI, recht umständlich zu integrieren. Mit dem aktuellen Paket genügt es hingegen, es einfach über npm herunterzuladen und ein Skript zu konfigurieren, was in CI-Umgebungen viele Vorteile bringt.
Zusätzlich wurden mit dem Upgrade auf Version 1.2.0 neue Funktionen hinzugefügt. Die wichtigste Änderung ist die Aufnahme des Pakets git-clang-format.
Nehmen wir als Beispiel eine Situation, in der man bei einem C/C++-Projekt den Bedarf an Code-Formatierung erkennt und Pakete wie clang-format einführen möchte.
In kleinen Projekten kann es unproblematisch sein, die Code-Formatierung einmal vollständig zu überarbeiten und dann gesammelt zu committen, ohne dass die Nachverfolgung der Historie größere Probleme bereitet. In großen Projekten besteht jedoch die Gefahr, dass durch die Einführung der Code-Formatierung die bestehende Formatierung im gesamten Codebestand auf einmal überarbeitet werden muss und dadurch die Commit-Historie unübersichtlich wird.
Was passiert also, wenn ein Entwickler von 1000 Zeilen Code nur 100 Zeilen geändert hat und beim Commit nur diese geänderten 100 Zeilen einer Formatierungsprüfung unterzogen werden? Erstens müsste man dann auch nur auf diese 100 geänderten Zeilen die Formatierung anwenden, sodass nicht mehr alle 1000 Zeilen auf einmal angefasst werden müssen – das erleichtert die Nachverfolgung der Commit-Historie. Zweitens würde mit jedem weiteren Commit im Laufe der Entwicklung nach und nach mehr formatierter Code hinzukommen, sodass die Code-Formatierung mit der Zeit immer konsistenter wird.
Genau dafür wird das Paket git-clang-format verwendet. Ähnlich wie lint-staged, das über staged Dateien nur diese prüft und damit die CI-Geschwindigkeit verbessert, geht dieses Paket noch einen Schritt weiter: Es kann innerhalb geänderter Dateien nur die Zeilen prüfen, die tatsächlich geändert wurden, und darauf die Code-Formatierungsprüfung anwenden. Auch dieses Werkzeug wird standardmäßig von LLVM bereitgestellt; ich habe es deshalb als Paket gewrappt und veröffentlicht.
In der offiziellen Dokumentation habe ich die genaue Verwendung beschrieben, daher würde ich mich über viel Interesse freuen. (Die offizielle Dokumentation ist allerdings auf Englisch.) Wenn Sie Fragen oder andere Anmerkungen haben, hinterlassen Sie sie gerne. Vielen Dank fürs Lesen dieses langen Beitrags.
Offizielle Dokumentation: https://clang-format-node.lumir.page
Repository: https://github.com/lumirlumir/npm-clang-format-node
2 Kommentare
Ich unterstütze Open-Source-Entwicklung!
Vielen Dank!!🙇♂️