Xcode 程式碼自動化排版 - ClangFormat


目前針對 Objective-C 的自動化程式碼排版可以找到 ClangFormatUncrustify 這兩套討論熱度比較高的工具。

其中 Uncrustify 截至 0.62 版,Features 提供 508 種設定值可以調整,可以依據需求的 coding conventions 建立完整的設定檔,彈性真的很高,但相對的設定會有些麻煩。

講了一些關於 Uncrustify 的資訊,但今天會以另一套 ClangFormat 為主,一方面記錄一下我的 build script。


為什麼需要自動化排版

這個問題的答案其實很簡單,因為

工程師在開發的過程中,遵守 coding conventions 是理所當然的事,不過只要是人經手處理的事情,總是會有機會出錯,與其在 code review 時額外花時間檢查程式碼是否有符合規範,這種枝微末節的事情,還不如將檢查自動化處理,把時間花在其他寶貴的事情上。

目前大部分 Xcode 的做法

目前大部分看到的自動化作法,我個人覺得都是屬於單機(個人)的操作。通常是你先安裝 Alcatraz 這套 Xcode 的套件管理工具,然後再安裝 ClangFormat-Xcode 套件,接著再整合至 Xcode 的排版功能或是儲存時自動排版。

如果你只是想自己開發使用的話,其實看到這邊就好。

因為後面要講的主要是針對多人協同開發,且希望其他工程師不會忘記做 code format 的處理。

於 Xcode Build Phase 增加 Run Script

在 Xcode 的 Build Phase 加入一組 Run Script 專門處理 Code Format 工作,主要的用意在於讓工程師無痛使用相關的設定。

這邊我將三樣東西加在專案中,讓整個 script 可以安穩運作。
  • clang-format
  • .clang-format
  • Run Script

clang-format

一方面不知道工程師們會不會乖乖的安裝 clang-format ,另一方面我也怕被打擾,所以將截至目前最新版本的 clang-format 放到專案的根目錄下面,一同加入版本控制。

好處是大家都會使用到同一版本的 clang-format,壞處就是 git 的 repo 容量又變大。

.clang-format

這邊是 clang-format 排版的設定檔,一樣丟到專案的根目錄中。

Run Script

於 Xcode 中,點選專案 -> TARGETS -> Build Phase -> + -> New Run Script Phase
至於這邊的 shell script 要怎麼寫端看個人自由了。為了趕時間我是直接將專案下面的檔案列表直接餵給 clang-format 做處理,沒使用什麼特別技巧。

感想

clang-format 雖然彈性低了一些,但優點就是可以快速上線使用。之後可能還要再花點時間將 clang-format 設定弄更清楚,讓結果更符合自己的預期。

未來想做個專案生成軟體,將一些預設的設定及 script 綁定在裡面,這樣就不用每次開專案就需要重設定一次,重複做一樣的事,其實挺惱人的。

留言

這個網誌中的熱門文章

執行 StrongLifts 5x5 三個月心得

第一次教召就上手

瓶頸