ฟอร์แมตเตอร์สำหรับ C, C++, Java, JavaScript, JSON, Objective-C และ C# บนสภาพแวดล้อม Node.js โดยใช้ Clang
(clang-format-node.lumir.page)ได้พัฒนาฟอร์แมตเตอร์สำหรับ C, C++, Java, JavaScript, JSON, Objective-C และ C# บนสภาพแวดล้อม Node.js โดยใช้ Clang โปรเจกต์นี้เป็นโปรเจกต์ใหม่ที่ต่อยอดจากแพ็กเกจ clang-format ของ angular ซึ่งถูกประกาศเลิกบำรุงรักษา (deprecated) ไปแล้ว
ขณะนี้มีผู้ให้ความสนใจเป็นจำนวนมาก และด้วยการที่ผู้ใช้แบบเลกาซีย้ายมาใช้งานกันมาก ทำให้ยอดดาวน์โหลดต่อเดือนทะลุ 20,000 ครั้งแล้ว
นอกจากนี้ แพ็กเกจนี้ยังทำได้ถึง full test coverage และมี PR ถูกส่งขึ้นมาเพื่อเปลี่ยนให้ Node.js core ใช้แพ็กเกจนี้แทนโปรเจกต์ clang-format ของ angular เดิม ดังนั้นในแง่ความเสถียรจึงน่าจะใช้งานได้อย่างมั่นใจ
แพ็กเกจนี้เป็นแพ็กเกจที่อิงกับ clang-format ของ Clang ซึ่งเป็นที่รู้จักในฐานะคอมไพเลอร์ C ของ LLVM โดยช่วยจัดรูปแบบโค้ดของหลายภาษา เช่น C, C++, Java เป็นต้น ทำหน้าที่แบบเดียวกับ Prettier ซึ่งเป็นหนึ่งในแพ็กเกจที่มีชื่อเสียงที่สุดในโลก Node.js
อย่างไรก็ตาม แพ็กเกจ Prettier ไม่รองรับการฟอร์แมตภาษาเนทีฟอย่าง C, C++, Java เป็นต้น ดังนั้นหากต้องการจัดรูปแบบในภาษาเหล่านี้ ก็มักจะใช้ clang-format กัน
clang-format บนสภาพแวดล้อม Node.js มีประโยชน์อย่างมาก โดยเฉพาะเมื่อจำเป็นต้องเขียนทั้งโค้ด JavaScript และโค้ดเนทีฟอย่าง C, C++ ร่วมกัน เช่น ในการพัฒนา Node.js core สำหรับ clang-format แบบเดิม หากต้องการใช้แพ็กเกจเวอร์ชันล่าสุด จำเป็นต้องติดตั้ง dependency เพิ่มเติม แต่ถ้าใช้แพ็กเกจนี้ก็ไม่จำเป็นอีกต่อไป
อีกทั้งแพ็กเกจ clang-format เดิมยังมีจุดที่ค่อนข้างยุ่งยากในการผสานเข้ากับเวิร์กโฟลว์ที่ใช้ Node.js และ npm เช่นใน CI แต่หากใช้แพ็กเกจนี้ เพียงดาวน์โหลดจาก 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++ toolchain หรือ npm subdependency — ทำงานได้ด้วย Node.js ล้วน
- Drop-in replacement: ออกแบบมาเพื่อใช้แทน
angular/clang-formatที่ถูก deprecated - รองรับแพลตฟอร์มอย่างกว้างขวาง: รองรับ OS/สถาปัตยกรรม, เวอร์ชัน Node.js, GitHub Actions runner image, Docker build image และอื่น ๆ อย่างครอบคลุม
- เป็นมิตรกับ CI: ติดตั้งผ่าน npm และใช้สคริปต์ง่าย ๆ เพื่อผสานเข้ากับ CI ได้ — ไม่ต้องตั้งค่าเนทีฟที่ซับซ้อน
- บิลด์และรีลีสอัตโนมัติ: ทุกครั้งที่
clang-formatอัปเดต GitHub Actions จะบิลด์ ตรวจสอบ และสร้าง PR → จากนั้นเผยแพร่เวอร์ชันใหม่ขึ้น npm โดยอัตโนมัติ - ตัวชี้วัดความเสถียร: ทำได้ถึง full test coverage, ยอดดาวน์โหลดต่อเดือนทะลุ 20,000 ครั้ง และกำลังมี PR เพื่อแทนที่แพ็กเกจ angular เดิมใน Node.js core
- ฟีเจอร์ใหม่ (1.2.0): แรปเปอร์
git-clang-format— ฟอร์แมตเฉพาะ “บรรทัดที่เปลี่ยนแปลง” ของไฟล์ที่แก้ไข เพื่อลดการกระทบกับ commit history ในรีโพซิทอรีขนาดใหญ่
ทำไม git-clang-format จึงสำคัญ?
- การรีฟอร์แมตทั้งโปรเจกต์อาจทำให้ commit history ของโปรเจกต์ขนาดใหญ่เลอะเทอะได้
git-clang-formatจะฟอร์แมตเฉพาะบรรทัดที่แก้ไขจริง ทำให้นำไปใช้แบบค่อยเป็นค่อยไปได้ และเมื่อเวลาผ่านไปก็ช่วยให้ความสอดคล้องของสไตล์ดีขึ้นอย่างเป็นธรรมชาติ- สามารถใช้ได้ละเอียดกว่าการทำงานแบบระดับไฟล์ของ
lint-stagedเพราะใช้ในระดับบรรทัด
เหมาะกับสถานการณ์แบบใด?
- รีโพซิทอรีที่มีทั้ง Node.js และโค้ดเนทีฟอย่าง C/C++/Java ปะปนกัน
- กรณีที่ต้องการใช้การฟอร์แมตใน CI pipeline แบบง่าย ๆ โดยไม่ต้องติดตั้ง native toolchain
- การย้ายใช้งานอย่างปลอดภัยสำหรับผู้ใช้เลกาซีที่เดิมใช้
angular/clang-format
ลิงก์
- เอกสารทางการ: https://clang-format-node.lumir.page
- รีโพซิทอรี: https://github.com/lumirlumir/npm-clang-format-node
ยังไม่มีความคิดเห็น