6 pontos por beenzinozino 2025-09-15 | Ainda não há comentários. | Compartilhar no WhatsApp

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 angular existente
  • 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-format formata 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

Ainda não há comentários.

Ainda não há comentários.