6 điểm bởi beenzinozino 2025-09-15 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp

Tôi đã phát triển một trình định dạng cho C, C++, Java, JavaScript, JSON, Objective-C, C# sử dụng Clang trong môi trường Node.js. Dự án này là một dự án mới được triển khai dựa trên gói angular clang-format đã bị ngừng bảo trì (deprecated).

Hiện tại, nhờ được nhiều người quan tâm và nhiều người dùng legacy hiện có đã chuyển sang, số lượt tải hằng tháng đã vượt 20.000.

Ngoài ra, gói này đã đạt full test coverage, và hiện đã có một PR được mở để thay đổi Node.js core sang sử dụng gói hiện tại thay cho dự án angular clang-format trước đây, nên có lẽ bạn có thể yên tâm sử dụng về mặt độ ổn định.


Gói này là một gói giúp định dạng mã cho nhiều ngôn ngữ như C, C++, Java dựa trên clang-format của Clang, vốn nổi tiếng là trình biên dịch C của LLVM. Nó đóng vai trò tương tự như Prettier, một trong những gói nổi tiếng nhất trong môi trường Node.js.

Tuy nhiên, Prettier không hỗ trợ định dạng cho các ngôn ngữ native như C, C++, Java, vì vậy khi cần định dạng cho các ngôn ngữ đó, nhiều trường hợp thường dùng clang-format.

clang-format trong môi trường Node.js đặc biệt hữu ích khi cần viết đồng thời mã JavaScript và mã native như C, C++ như trong quá trình phát triển Node.js core. Với clang-format trước đây, để dùng phiên bản mới nhất của gói đó, bạn phải cài thêm các dependency bổ sung, nhưng nếu dùng gói hiện tại thì không cần.

Ngoài ra, gói clang-format trước đây cũng có điểm khá bất tiện khi tích hợp vào workflow dùng Node.js và npm trong CI, nhưng với gói hiện tại, chỉ cần tải từ npm và cấu hình script đơn giản là đủ, nên có nhiều lợi thế trong môi trường CI.


Các điểm chính như sau:

  • Ngôn ngữ hỗ trợ: C, C++, Java, JavaScript, JSON, Objective‑C, C# — trình định dạng dựa trên clang-format
  • Fully Secure Binaries: được build trực tiếp từ mã nguồn chính thức của LLVM. Xác minh đầy đủ bằng GitHub Actions Attestation Provenances và npm Build Provenances
  • Zero dependencies: không cần Python, toolchain C++, hay npm sub-dependencies — chạy chỉ với Node.js thuần
  • Drop-in replacement: được thiết kế để thay thế angular/clang-format đã deprecated
  • Hỗ trợ nền tảng rộng: hỗ trợ đa dạng OS/kiến trúc, phiên bản Node.js, GitHub Actions runner image, Docker build image, v.v.
  • Thân thiện với CI: có thể tích hợp CI bằng cài đặt npm + script đơn giản — không cần cấu hình native phức tạp
  • Build·release tự động: mỗi khi clang-format cập nhật, GitHub Actions sẽ build·xác minh·tạo PR → tự động phát hành phiên bản npm mới
  • Chỉ số ổn định: đạt full test coverage, vượt 20.000 lượt tải mỗi tháng, đang có PR thay thế gói angular cũ trong Node.js core
  • Tính năng mới (1.2.0): wrapper git-clang-format — chỉ định dạng các “dòng đã thay đổi” trong các tệp đã chỉnh sửa để giảm tối đa việc làm hỏng lịch sử commit trong repository lớn

Vì sao git-clang-format quan trọng?

  • Reformat toàn bộ có thể làm bẩn lịch sử commit trong các dự án lớn.
  • git-clang-format chỉ định dạng những dòng bạn thực sự sửa, cho phép áp dụng dần dần và theo thời gian tự nhiên đạt được sự nhất quán về style.
  • Có thể áp dụng chi tiết hơn theo từng dòng thay vì theo từng tệp như lint-staged.

Phù hợp trong những tình huống nào?

  • Repository có trộn lẫn Node.js và mã native như C/C++/Java
  • Khi muốn áp dụng định dạng đơn giản trong CI pipeline mà không cần cài native toolchain
  • Chuyển đổi an toàn cho người dùng legacy đang dùng angular/clang-format

Liên kết

Chưa có bình luận nào.

Chưa có bình luận nào.