Formatador de C, C++, Java, JavaScript, JSON, Objective-C e C# com Clang no ambiente Node.js
(clang-format-node.lumir.page)Desenvolvi um formatador de C, C++, Java, JavaScript, JSON, Objective-C e C# com Clang para o ambiente Node.js. Este projeto é uma nova iniciativa baseada no pacote angular clang-format, que já não recebe mais manutenção (foi deprecated).
Atualmente, muitas pessoas têm demonstrado interesse, e graças à migração de muitos usuários legados, o número de downloads mensais já ultrapassou 20.000.
Além disso, o pacote atingiu cobertura total de testes e, considerando que já existe um PR no Node.js core para substituir o antigo projeto angular clang-format por este pacote, acredito que sua estabilidade é confiável para uso.
Este pacote é baseado no clang-format do Clang, famoso compilador C da LLVM, e serve para formatar código em várias linguagens como C, C++, Java e outras. Ele cumpre o mesmo papel do Prettier, um dos pacotes mais conhecidos no ecossistema Node.js.
No entanto, como o Prettier não oferece suporte à formatação de linguagens nativas como C, C++ e Java, é comum recorrer ao clang-format para padronizar o estilo nesses casos.
O clang-format no ambiente Node.js é especialmente útil quando se precisa trabalhar ao mesmo tempo com código JavaScript e código nativo, como C e C++, como acontece no desenvolvimento do Node.js core. No caso do clang-format anterior, era necessário instalar dependências adicionais para usar a versão mais recente do pacote, mas com o pacote atual isso não é mais necessário.
Além disso, o pacote clang-format anterior tinha um aspecto bastante complicado na integração com workflows que usam Node.js e npm, como em CI, mas com o pacote atual basta baixar via npm e configurar um script simples, trazendo muitas vantagens em ambientes de CI.
Os principais pontos são os seguintes:
- Linguagens suportadas: C, C++, Java, JavaScript, JSON, Objective‑C e C# — formatador baseado em
clang-format - Fully Secure Binaries: compilado diretamente a partir do código-fonte oficial da LLVM. Totalmente verificável com GitHub Actions Attestation Provenances e npm Build Provenances
- Zero dependencies: não requer Python, toolchain de C++ nem subdependências do npm — funciona apenas com Node.js puro
- Drop-in replacement: projetado para substituir o
angular/clang-format, que foi deprecated - Amplo suporte de plataforma: compatibilidade abrangente com OS/arquiteturas, versões do Node.js, imagens de runner do GitHub Actions, imagens de build Docker etc.
- Amigável para CI: integração possível com CI usando instalação via npm + script simples — sem necessidade de configuração nativa complexa
- Build e release automáticos: a cada atualização do
clang-format, o GitHub Actions faz build, verificação e criação de PR → publica automaticamente uma nova versão no npm - Indicadores de estabilidade: cobertura total de testes, mais de 20.000 downloads mensais, e PR em andamento no Node.js core para substituir o pacote
angularexistente - Novo recurso (1.2.0): wrapper de
git-clang-format— formata apenas as “linhas alteradas” dos arquivos modificados, minimizando danos ao histórico de commits em repositórios grandes
Por que o git-clang-format é importante?
- Um reformat completo pode poluir o histórico de commits em projetos grandes.
- O
git-clang-formatformata apenas as linhas realmente modificadas, permitindo adoção gradual e garantindo consistência de estilo de forma natural ao longo do tempo. - Diferentemente do
lint-staged, ele pode ser aplicado com granularidade por linha, e não apenas por arquivo.
Em que situações ele é adequado?
- Repositórios com mistura de Node.js e código nativo como C/C++/Java
- Quando se quer aplicar formatação de forma simples em pipelines de CI sem instalar toolchains nativas
- Migração segura para usuários legados que usavam
angular/clang-format
Links
- Documentação oficial: https://clang-format-node.lumir.page
- Repositório: https://github.com/lumirlumir/npm-clang-format-node
Ainda não há comentários.