iOS項目自動代碼風格規範化--團隊協做的福音

本文遷移自本人簡書帳號醬油蔥, 後續不會再在簡書更新文章, 具體緣由能夠查看簡書CEO盛讚程序員出軌率高「真實、新鮮、多元」 ,對不起打擾了git

代碼風格

這是個永恆的話題, 每一個程序員都有本身的見解和習慣. 可是行業裏總會有些公認的規則, 公司裏也須要一個統一的標準. 因此這個話題直接略過, 重點談如何用工具保證一個團隊輸出內容風格的一致性.程序員

自動Format

簡書上已有很多相關的內容, 例如葉孤城的這篇文章. 目前, 本人使用的也是Square公司開源的"Clang-Format"進行代碼規範. 一直以來用的都挺好.github

可是自從Swift出世後, 問題就來了. Square公司的spacecommander項目不支持Swift文件的處理. 並且Square公司暫時也沒有開源關於Swift的Format工具. 因此只能另尋它法.swift

還好, 這邊有一個牛人開發了相應的Swift格式化工具SwiftFormat. 並且一樣流暢的命令行操做, 可讓咱們的工做變得輕鬆.bash

詳細用法

安裝

支持Homebrew安裝app

brew update brew install swiftformat工具

也支持項目編譯安裝. 這個比較麻煩, 大夥須要的話就直接去github上看README文檔吧ui

使用

因爲工具開發者本人實現了XCode 8的Extension, 因此但願使用菜單項或者Hot Key的朋友能夠嘗試一下. 文檔已經描述的很詳細了.spa

本人用的是直接Hooks到倉庫git上, 步驟以下:命令行

  1. 進入本地項目目錄, 建立或打開.git/hooks/pre-commit文件

cd *** //***爲項目路徑 vi .git/hooks/pre-commit

  1. 若是項目文件以前已存在, 則在下方添加如下內容(與文檔說明略有出入, 考慮到CocoaPods/Carthage問題)
git status --porcelain | grep -e '^[AM]\(.*\).swift$' | cut -c 3- | while read line; do
  swiftformat ${line};
  git add $line;
done
複製代碼

若是有童鞋沒有將.gitignore文件對PodsCarthage目錄進行過濾*(雖然通常人都不會這麼作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
複製代碼
  1. 若是項目文件以前不存在, 則添加如下內容
#!/bin/bash
git status --porcelain | grep -e '^[AM]\(.*\).swift$' | cut -c 3- | while read line; do
  swiftformat ${line};
  git add $line;
done
複製代碼
  1. 保存退出, 修改該文件的執行權限. 今後萬事大吉

chmod +x .git/hooks/pre-commit

示例

Format前
查看內容
提交時自動Format
自動Format結果

進一步的問題

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, 但願能在將來的版本中看到更多的改進內容.

以上內容, 若有問題或錯誤, 能夠隨時與本人聯繫. 感謝閱讀!

相關文章
相關標籤/搜索