Formateador para C, C++, Java, JavaScript, JSON, Objective-C y C# usando Clang en un entorno Node.js
(clang-format-node.lumir.page)He desarrollado un formateador para C, C++, Java, JavaScript, JSON, Objective-C y C# usando Clang en un entorno Node.js. Este proyecto es una nueva iniciativa basada en el paquete angular clang-format, que ya no recibe mantenimiento (está deprecado).
Actualmente, gracias al interés de muchas personas y a que muchos usuarios legacy se han pasado desde la opción anterior, ya superó las 20,000 descargas mensuales.
Además, este paquete alcanzó cobertura completa de pruebas, y dado que ya existe un PR en Node.js core para cambiar del proyecto angular clang-format anterior a este paquete, parece que pueden usarlo con confianza en cuanto a estabilidad.
Este paquete, basado en clang-format de Clang —famoso como compilador de C de LLVM—, se encarga del formateo de código en varios lenguajes como C, C++, Java y más. Cumple el mismo rol que Prettier, uno de los paquetes más conocidos en el entorno Node.js.
Sin embargo, como Prettier no soporta el formateo de lenguajes nativos como C, C++ o Java, en muchos casos se recurre a clang-format para mantener el estilo en esos lenguajes.
clang-format en el entorno Node.js es especialmente útil cuando, como en el desarrollo de Node.js core, hay que escribir tanto código JavaScript como código nativo en C, C++ y otros lenguajes. En el caso de clang-format tradicional, para usar la versión más reciente del paquete era necesario instalar dependencias adicionales, pero con el paquete actual eso ya no hace falta.
Además, el paquete clang-format anterior tenía aspectos bastante complicados a la hora de integrarlo en workflows con Node.js y npm, como en CI, pero con este paquete actual basta con descargarlo desde npm y configurar un script, lo que ofrece muchas ventajas en entornos de CI.
Los puntos principales son los siguientes:
- Lenguajes soportados: C, C++, Java, JavaScript, JSON, Objective‑C, C# — formateador basado en
clang-format - Fully Secure Binaries: compilado directamente desde el código fuente oficial de LLVM. Verificación completa con GitHub Actions Attestation Provenances y npm Build Provenances
- Zero dependencies: no requiere Python, toolchain de C++ ni subdependencias de npm — funciona solo con Node.js puro
- Drop-in replacement: diseñado para reemplazar
angular/clang-format, ya deprecado - Amplio soporte de plataformas: soporte extenso para OS/arquitecturas, versiones de Node.js, imágenes runner de GitHub Actions, imágenes de build de Docker y más
- Amigable con CI: integración posible con CI mediante instalación por npm + un script sencillo — sin configuraciones nativas complejas
- Build y release automáticos: cada vez que
clang-formatse actualiza, GitHub Actions compila, verifica y crea un PR → luego publica automáticamente una nueva versión en npm - Indicadores de estabilidad: cobertura completa de pruebas, más de 20,000 descargas mensuales y un PR en curso en Node.js core para reemplazar el paquete anterior de
angular - Nueva función (1.2.0): wrapper de
git-clang-format— formatea solo las líneas modificadas de los archivos cambiados para minimizar el daño al historial de commits en repositorios grandes
¿Por qué es importante git-clang-format?
- Un reformateo completo puede ensuciar el historial de commits en proyectos grandes.
git-clang-formatformatea solo las líneas realmente modificadas, lo que permite una adopción gradual y ayuda a lograr consistencia de estilo de forma natural con el tiempo.- Permite una aplicación más precisa por línea, no solo por archivo como
lint-staged.
¿En qué situaciones es adecuado?
- Repositorios donde conviven Node.js y código nativo como C/C++/Java
- Casos en los que se quiere aplicar formateo fácilmente en pipelines de CI sin instalar toolchains nativos
- Migración segura para usuarios legacy que usaban
angular/clang-format
Enlaces
- Documentación oficial: https://clang-format-node.lumir.page
- Repositorio: https://github.com/lumirlumir/npm-clang-format-node
Aún no hay comentarios.