Node.js 환경에서 Clang을 이용한 C, C++, Java, JavaScript, JSON, Objective-C, C# 포매터를 개발하였습니다. 해당 프로젝트는 이미 더 이상 유지 보수되지 않는(deprecated된) angular의 clang-format 패키지를 기반으로 새롭게 진행하는 프로젝트 입니다.

현재 많은 분들이 관심 가져주시고, 기존 레거시 유저분들이 많이 넘어와주신 덕에 월간 다운로드 수 20,000회를 돌파하였습니다.

또한, 해당 패키지는 풀 테스트 커버리지를 달성하였고, Node.js 코어에서 기존 angular의 clang-format 프로젝트 대신 현재 패키지를 이용하는 방식으로 변경하려는 PR이 올라와 있는 만큼, 안정성은 믿고 사용하셔도 될 것 같습니다.


해당 패키지는 LLVM의 C 컴파일러로 유명한 Clang의 clang-format을 기반으로 C, C++, Java 등 다양한 언어의 코드 포맷팅을 잡아주는 패키지 입니다. Node.js 환경에서 가장 유명한 패키지 중 하나인 Prettier와 동일한 역할을 합니다.

다만, Prettier 패키지에서는 C, C++, Java 등 네이티브 언어의 포맷팅을 지원하지 않기에, 해당 언어에서 포맷팅을 잡기 위해서는 clang-format을 이용하는 경우가 많습니다.

Node.js 환경에서의 clang-format은, Node.js 코어 개발과 같이 자바스크립트 코드와 C, C++ 등 네이티브 코드를 함께 작성해야 할 때 특히 유용합니다. 기존 clang-format의 경우, 해당 패키지의 최신 버전을 이용하기 위해 추가 의존성들을 설치해야 했지만, 현재 패키지를 이용하면 그럴 필요가 없습니다.

또한, 기존의 clang-format 패키지는 CI 등에서 Node.js와 npm을 이용한 워크플로에 통합하기 꽤나 까다로운 면이 있었지만, 현재 패키지를 이용하면 단순히 npm에서 다운로드만 받고 스크립트 설정만 해주면 되기에, CI 환경에서의 많은 이점이 있습니다.


주요 포인트는 아래와 같습니다:

  • 지원 언어: C, C++, Java, JavaScript, JSON, Objective‑C, C# — clang-format 기반 포맷터
  • Fully Secure Binaries: LLVM 공식 소스에서 직접 빌드. GitHub Actions Attestation Provenances와 npm Build Provenances로 완전 검증
  • Zero dependencies: Python, C++ 툴체인, npm 서브의존성 불필요 — 순수 Node.js만으로 동작
  • Drop-in replacement: deprecated된 angular/clang-format을 대체하도록 설계
  • 광범위 플랫폼 지원: OS/아키텍처, Node.js 버전, GitHub Actions 러너 이미지, Docker 빌드 이미지 등 폭넓게 지원
  • CI 친화적: npm 설치 + 간단한 스크립트로 CI 통합 가능 — 복잡한 네이티브 설정 불필요
  • 자동 빌드·릴리스: clang-format 업데이트마다 GitHub Actions가 빌드·검증·PR 생성 → 자동으로 npm 새 버전 발행
  • 안정성 지표: 풀 테스트 커버리지 달성, 월간 다운로드 20,000회 돌파, Node.js 코어에서 기존 angular 패키지 교체 PR 진행 중
  • 신규 기능(1.2.0): git-clang-format 래퍼 — 변경된 파일의 ‘변경된 라인’만 포맷해 대규모 리포지터리에서 커밋 히스토리 훼손 최소화

왜 git-clang-format이 중요한가?

  • 전체 리포맷은 대형 프로젝트에서 커밋 히스토리를 더럽힐 수 있음.
  • git-clang-format은 실제로 수정한 라인만 포맷해 점진적 도입을 가능하게 하고, 시간이 지나며 스타일 일관성을 자연스럽게 확보.
  • lint-staged처럼 파일 단위가 아니라 라인 단위로 더 세밀하게 적용 가능.

어떤 상황에 적합한가?

  • Node.js와 C/C++/Java 등 네이티브 코드가 혼재된 리포지터리
  • CI 파이프라인에서 네이티브 툴체인 설치 없이 포맷을 간단히 적용하고 싶은 경우
  • angular/clang-format을 사용하던 레거시 유저의 안전한 이전

링크