SwiftFormat with Git pre-commit hook

Bunyaporn P.
te<h @TDG
Published in
3 min readAug 30, 2022

สวัสดีค่ะ ^o^// เราชื่อมะปรางนะคะ ปัจจุบันเป็น iOS Developer ตัวเร้กๆ และนี่ก็เป็นการเขียน Blog ครั้งแรกเลย ตื่นเต้นมากๆ…

ในการพัฒนาแอปพลิเคชั่น เราก็จะมี tool ตัวนึงที่ช่วยจัดการ coding ของทีมให้เป็นไปในทางเดียวกัน และตรงตาม coding standard ซึ่ง tool ที่ว่าก็คือ SwiftFormat นั่นเอง โดยเราสามารถเรียกใช้ SwiftFormat ผ่าน Git pre-commit hook เพื่อ re-format code ในขั้นตอนการ commit code ได้

🍑 How to install SwiftFormat 🍑

เราสามารถเรียกใช้ SwiftFormat ได้ในหลายวิธี ซึ่งตอนนี้เราจะเลือกใช้วิธี Pod เพราะว่าทีมเราสามารถ pod install และเรียกใช้ผ่าน pod file ได้เลย

1. ลง Pod ของ SwiftFormat ใน project แล้วรันคำสั่ง pod install

2. Download git-format-staged ไปวางไว้ใน folder หลักของ project

git-format-staged

3. สร้าง shell script ขึ้นมา 1 ไฟล์ แล้วก็ตั้งชื่อว่า pre-commit จากนั้นให้เขียนคำสั่งในการเรียกใช้ SwiftFormat ผ่าน path ของ pod file ดังนี้

ตัวอย่างการเรียกใช้ SwiftFormat ผ่าน Git pre-commit

4. เมื่อเรามี script แล้ว ให้เรากำหนดสิทธิ์ในการ execute ของ shell script โดยการรันคำสั่ง chmod +x (ชื่อ path)/pre-commit ผ่าน terminal

ตัวอย่างการ run คำสั่งกำหนดสิทธิ์ในการ execute

5. ต่อมาให้เรานำไฟล์ pre-commit ไปใส่ไว้ใน .git/hooks ใน folder project ของเรา (🐵 folder .git เป็น hidden folder ถ้า project เรามีการลง git ไว้เราก็จะเจอ folder นี้ ซึ่งเราสามารถเห็น folder นี้ได้โดยการกด cmd + shift + . )

ตัวอย่างการลงไฟล์ pre-commit ใน git hook

6. พอใส่แล้ว เวลาที่เรา commit code ตัว script ก็จะทำการ auto format code ให้ประมาณรูปด้านล่างเลยค่ะ เราก็ commit code เข้าไปตามปกติได้เลย 🥳

ตัวอย่างการ re-format code เวลาที่เรา commit

🍑 How to disable rule SwiftFormat 🍑

แต่ !! บางที การ re-format code ของเจ้า SwiftFormat ก็อาจจะไม่ตรงตาม pattern coding ของทีมเรา ซึ่งเราก็สามารถไป disable rule บางส่วนของตัวเจ้าตัวนี้ได้ดังนี้ค่ะ

1. เข้าไปค้นหาข้อมูลของ Rule ได้ที่ SwiftFormat — Rule

SwiftFormat Rules

2. Copy ชื่อ Rule ที่เราต้องการจะ disable

3. เปิดไฟล์ pre-commit ของเราขึ้นมา และเพิ่มชื่อ Rule เข้าไปตามรูปด้านล่าง (ก่อนหน้าคำสั่ง stdin) จากนั้นกด save file ได้เลย

ตัวอย่างการ Disable rule บางส่วนของ SwiftFormat

📝 Tip: เมื่อเราลง git pre-commit hook แล้ว ละทีนี้เราไม่อยาก run เจ้าตัวนี้ในขั้นตอนการ commit เราสามารถใช้คำสั่ง git commit — no-verify เพื่อข้ามขั้นตอนในการ run pre-commit ได้ค่ะ

ข้อมูลเพิ่มเติม:
https://github.com/nicklockwood/SwiftFormat

จบล้าวววววว… 🥳 ทีนี้ coding ของทีมเราก็จะเป็นไปในทิศทางเดียวกัน และตรงตาม coding standard แล้วค่ะ ก่อนจะไปอยากจะฝากอะไรเล็กๆ ไว้

อาจารย์ถามว่าอะไรคือตัวทำละลาย เรานี่ตอบอย่างมั่นใจเลยว่ารอยยิ้มของเธอ 🧡 ซึ่งปัจจุบันเรานั่งแก้ 0 อยู่ ตอบผิดตรงไหนเนี้ยยยยย โธ่ววววว~

--

--