6 คะแนน โดย beenzinozino 2025-09-15 | ยังไม่มีความคิดเห็น | แชร์ทาง WhatsApp

ได้พัฒนาฟอร์แมตเตอร์สำหรับ 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

ลิงก์

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น