6 Punkte von beenzinozino 2025-09-15 | Noch keine Kommentare. | Auf WhatsApp teilen

Ich habe einen Formatter für C, C++, Java, JavaScript, JSON, Objective-C und C# entwickelt, der Clang in einer Node.js-Umgebung nutzt. Dieses Projekt ist eine neue Initiative auf Basis des inzwischen nicht mehr gepflegten (deprecated) angular-Pakets clang-format.

Derzeit zeigen viele Menschen Interesse daran, und dank zahlreicher bisheriger Legacy-User, die bereits umgestiegen sind, wurden inzwischen mehr als 20.000 Downloads pro Monat erreicht.

Außerdem hat das Paket vollständige Testabdeckung erreicht, und da bereits ein PR eingereicht wurde, um im Node.js-Core anstelle des bisherigen angular-clang-format-Projekts dieses Paket zu verwenden, kann man seiner Stabilität wohl vertrauen.


Dieses Paket basiert auf clang-format von Clang, dem für seinen C-Compiler in LLVM bekannten Projekt, und übernimmt die Code-Formatierung für verschiedene Sprachen wie C, C++, Java und weitere. Es erfüllt in der Node.js-Umgebung dieselbe Rolle wie eines der bekanntesten Pakete, Prettier.

Allerdings unterstützt Prettier die Formatierung nativer Sprachen wie C, C++ oder Java nicht, weshalb man für diese Sprachen häufig clang-format verwendet, um die Formatierung durchzusetzen.

clang-format in der Node.js-Umgebung ist besonders nützlich, wenn – wie bei der Entwicklung des Node.js-Core – JavaScript-Code zusammen mit nativem Code wie C oder C++ geschrieben werden muss. Bei bisherigem clang-format mussten zusätzliche Abhängigkeiten installiert werden, um die neueste Version des Pakets zu nutzen; mit dem aktuellen Paket ist das nicht mehr nötig.

Außerdem war das bestehende 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 jedoch, es einfach über npm herunterzuladen und ein Skript zu konfigurieren, was in CI-Umgebungen viele Vorteile bringt.


Die wichtigsten Punkte sind wie folgt:

  • Unterstützte Sprachen: C, C++, Java, JavaScript, JSON, Objective‑C, C# — Formatter auf Basis von clang-format
  • Fully Secure Binaries: direkt aus den offiziellen LLVM-Quellen gebaut. Vollständig verifiziert mit GitHub Actions Attestation Provenances und npm Build Provenances
  • Zero dependencies: keine Python-, C++-Toolchain- oder npm-Subdependencies nötig — läuft nur mit reinem Node.js
  • Drop-in replacement: als Ersatz für das deprecatede angular/clang-format konzipiert
  • Breite Plattformunterstützung: umfassende Unterstützung für OS/Architekturen, Node.js-Versionen, GitHub-Actions-Runner-Images, Docker-Build-Images usw.
  • CI-freundlich: CI-Integration mit npm-Installation + einfachem Skript möglich — keine komplexe native Konfiguration nötig
  • Automatisches Build & Release: Bei jedem clang-format-Update baut, verifiziert und erstellt GitHub Actions einen PR → automatisch Veröffentlichung einer neuen npm-Version
  • Stabilitätsindikatoren: vollständige Testabdeckung erreicht, mehr als 20.000 Downloads pro Monat, PR zum Ersetzen des bisherigen angular-Pakets im Node.js-Core in Arbeit
  • Neue Funktion (1.2.0): git-clang-format-Wrapper — formatiert nur die „geänderten Zeilen“ in geänderten Dateien und minimiert so die Beschädigung der Commit-Historie in großen Repositories

Warum ist git-clang-format wichtig?

  • Eine vollständige Neuformatierung kann in großen Projekten die Commit-Historie unübersichtlich machen.
  • git-clang-format formatiert nur die tatsächlich geänderten Zeilen, ermöglicht dadurch eine schrittweise Einführung und sorgt mit der Zeit ganz natürlich für konsistente Stilregeln.
  • Anders als lint-staged, das auf Dateiebene arbeitet, kann es feiner auf Zeilenebene angewendet werden.

Für welche Situationen ist es geeignet?

  • Repositories, in denen Node.js und nativer Code wie C/C++/Java gemeinsam vorkommen
  • Wenn man in einer CI-Pipeline Formatierung einfach anwenden möchte, ohne native Toolchains zu installieren
  • Für eine sichere Migration von Legacy-Usern, die angular/clang-format verwendet haben

Links

Noch keine Kommentare.

Noch keine Kommentare.