本文遷移自本人簡書賬號醬油蔥, 後續不會再在簡書更新文章, 具體原因可以檢視簡書CEO盛讚程式設計師出軌率高“真實、新鮮、多元” ,對不起打擾了
程式碼風格
這是個永恆的話題, 每個程式設計師都有自己的看法和習慣. 但是行業裡總會有些公認的規則, 公司裡也需要一個統一的標準. 所以這個話題直接略過, 重點談如何用工具保證一個團隊輸出內容風格的一致性.
自動Format
簡書上已有不少相關的內容, 例如葉孤城的這篇文章. 目前, 本人使用的也是Square公司開源的"Clang-Format"進行程式碼規範. 一直以來用的都挺好.
但是自從Swift出世後, 問題就來了. Square公司的spacecommander專案不支援Swift檔案的處理. 而且Square公司暫時也沒有開源關於Swift的Format工具. 所以只能另尋它法.
還好, 這邊有一個牛人開發了相應的Swift格式化工具SwiftFormat. 而且同樣流暢的命令列操作, 可以讓我們的工作變得輕鬆.
詳細用法
安裝
支援Homebrew安裝
brew update brew install swiftformat
也支援專案編譯安裝. 這個比較麻煩, 大夥需要的話就直接去github上看README文件吧
使用
由於工具開發者本人實現了XCode 8的Extension, 所以希望使用選單項或者Hot Key的朋友可以嘗試一下. 文件已經描述的很詳細了.
本人用的是直接Hooks到倉庫git上, 步驟如下:
- 進入本地專案目錄, 建立或開啟.git/hooks/pre-commit檔案
cd *** //***為專案路徑 vi .git/hooks/pre-commit
- 如果專案檔案之前已存在, 則在下方新增以下內容(與文件說明略有出入, 考慮到CocoaPods/Carthage問題)
git status --porcelain | grep -e '^[AM]\(.*\).swift$' | cut -c 3- | while read line; do
swiftformat ${line};
git add $line;
done
複製程式碼
如果有童鞋沒有將.gitignore
檔案對Pods
或Carthage
目錄進行過濾*(雖然一般人都不會這麼做ORZ)*, 那麼可以考慮換成以下內容
git status --porcelain | grep -v 'Pods/' | grep -v 'Carthage/' | grep -e '^[AM]\(.*\).swift$' | cut -c 3- | while read line; do
swiftformat ${line};
git add $line;
done
複製程式碼
- 如果專案檔案之前不存在, 則新增以下內容
#!/bin/bash
git status --porcelain | grep -e '^[AM]\(.*\).swift$' | cut -c 3- | while read line; do
swiftformat ${line};
git add $line;
done
複製程式碼
- 儲存退出, 修改該檔案的執行許可權. 從此萬事大吉
chmod +x .git/hooks/pre-commit
示例
進一步的問題
ObjectiveC老專案, 新增新的Swift語言進行混編時, 如何進行程式碼自動規範化?
很簡單, 首先先使用Square公司的spacecommander專案工具指令碼setup-repo.sh
對專案進行初始化. 這個指令碼會自動幫你在專案的.git/hooks
目錄下建立pre-commit
檔案並填入指令碼內容.
然後, 在第二行插入以下內容(就是上面提及的SwiftFormat指令碼):
git status --porcelain | grep -e '^[AM]\(.*\).swift$' | cut -c 3- | while read line; do
swiftformat ${line};
git add $line;
done
複製程式碼
考慮到我們團隊可能需要保留未使用的引數, 所以可以修改為以上內容為:
git status --porcelain | grep -e '^[AM]\(.*\).swift$' | cut -c 3- | while read line; do
swiftformat --disable unusedArguments ${line};
git add $line;
done
複製程式碼
儲存退出. 從此你就能滿地圖的亂寫OC/Swift程式碼了. 媽媽再也不用擔心我的格式問題了!
程式碼格式化規範如何調整
目前還真沒有比較好的辦法. 正如spacecommander專案提及的: You may wish to fork [ Space Commander] to apply your team's particular set of formatting rules (more details below), or clone to enjoy Square's flavor of Objective-C formatting.
如果你們團隊希望使用自己的規範, 基本只能考慮fork專案, 然後在本地進行修改生成新的pods, 再做匯出.
而SwiftFormat專案則提供了命令列引數的方式進行部分風格設定項:
目前SwiftFormat的版本為0.24.6
, 希望能在未來的版本中看到更多的改進內容.
末
以上內容, 如有問題或錯誤, 可以隨時與本人聯絡. 感謝閱讀!