"這誰寫的代碼,前邊的空格手敲的啊棺棵,我正常換行居然沒對齊楼咳?!""這個 else 是跟哪個 if 配對的臥槽".......如果你也這樣抱怨過烛恤,恭喜你母怜,來對了,請接著往下看缚柏。
誰都想自己寫的代碼清清爽爽苹熏,也都想自己工作中看到的代碼清清爽爽,或者最起碼盡量風(fēng)格統(tǒng)一。但是代碼格式這種重復(fù)勞動的問題轨域,如果旁邊坐一個美女幫我添一個空格袱耽,做一個換行該多好啊。如果你是這樣想的干发,可以右上角xx出門找x家朱巨、x天,地上小紙片打個電話談價錢去了铐然。我這里要分享的是用 spacecommander 工具在 Xcode 8.x 時代實現(xiàn)對 OC
的自動化蔬崩,另外 spacecommander
跟 git
更配哦,好了搀暑,飆車正式開始沥阳!
1. 準(zhǔn)備工作和環(huán)境配置
1.1 下載源文件
從上邊的 github
鏈接下載 spacecommander
源文件并解壓。你可以將文件放到自己項目的工程目錄下自点,這樣 git
可以將 spacecommander
源文件自動同步到遠(yuǎn)端桐罕,其他同事更新代碼之后只需要執(zhí)行命令即可,更方便桂敛。我這里是先放在了電腦的文稿目錄下功炮。
1.2 配置
使用命令行 cd
到工程目錄,然后使用 spacecommander
目錄下的 setup-repo.sh
初始化環(huán)境术唬。命令類似于: $ /Users/mac/Documents/spacecommander/setup-repo.sh
薪伏,
前邊是 spacecommander
源文件所在的目錄,自行替換即可粗仓,或者更簡單的直接將 setup-repo.sh
文件拖拽到命令行嫁怀,系統(tǒng)會自動生成路徑信息,然后直接回車即可借浊。之后你的命令行大概會是這個樣子:
- 左起第一個是個快捷方式塘淑,指向我們剛剛解壓的
spacecommander
源文件中的.clang-format
腳本。使用編輯器打開這個腳本你會發(fā)現(xiàn)spacecommander-clangFormat.pngclang-format
配置"曙蒸。這里不贅述捌治。或者可以自己寫個小 demo纽窟,弄幾個if-else
具滴、for
循環(huán)、block
师倔,方法和屬性等构韵,試著修改一下這個文件周蹭,看格式化后是什么樣子,印象更深刻疲恢,活著就是折騰嘛凶朗。 - 中間是一個
.git
的文件夾,點進(jìn)去會發(fā)現(xiàn)有一個hooks
的文件夾显拳,繼續(xù)點進(jìn)去有一個pre-commit
的可執(zhí)行文件棚愤。hooks
顧名思義,鉤子的意思杂数,詳見git 鉤子官方說明宛畦。說白了拓萌,其實就類似于是OC
中的block
模式然爆,使用git
的小伙伴們對git commit
提交代碼肯定再熟悉不過了,不過拖云,假如我們想在提交每次提交代碼之前進(jìn)行一些操作那伐,例如:格式化代碼 : ) 踏施。那這個鉤子就相當(dāng)于是 git 官方給我們暴露出來的block
回調(diào),可以在每次執(zhí)行commit
之前自動調(diào)用罕邀,從而達(dá)到自動化的目的畅形。 - 看到最后一個文件,是不是特別熟悉诉探?和我們工程目錄下的忽略文件一毛一樣日熬!它的作用就是忽略文件(呸!廢話I隹琛)竖席。其實這個是因為我初始化時的目錄沒跟我原有的
.gitignore
所在目錄一致導(dǎo)致的。也就是說阳液,setup-repo.sh
會自動檢測當(dāng)前目錄下是否有.gitignore
文件,如果有就會自動在后邊追加.clang-format
揣炕,如果沒有就會新建一個忽略文件并添加.clang-format
帘皿。目的當(dāng)然是為了不同步.clang-format
文件。因為.clang-format
只是個快捷方式畸陡,當(dāng)被同步到其他電腦上時鹰溜,這個快捷方式很大程度上是無效的,所以就不需要被同步到遠(yuǎn)端丁恭。所以需不需要這個文件被忽略曹动,取決于你的spacecommander
源文件的目錄。如果spacecommander
也在你的工程目錄下并且被同步到了遠(yuǎn)端牲览,那這個快捷方式就可以不用忽略墓陈,這樣其他的協(xié)作小伙伴pull
之后什么操作都不用,就可以直接使用自動整理代碼的功能。否則就不需要同步贡必,到時候喊你的小伙伴再看一遍這篇文章即可兔港,我真是個心機婊啊 : )。
2. 整理代碼
2.1 常用的格式化命令
看到現(xiàn)在是不是對于自動化整理代碼的流程大致有印象了呢仔拟。接下來就是見證奇跡的時刻衫樊。在 spacecommander
的源文件目錄下,除了 setup-repo.sh
之外利花,其實還有好幾個 .sh
文件科侈。它們就是我們接下來要使用的命令們。
-
format-objc-file.sh
:整理單個文件的命令炒事,用法同setup-repo.sh
一樣臀栈,也是通過路徑加載命令,然后空格加需要格式化文件的路徑即可羡洛。 -
format-objc-files.sh
:英語老師教我們挂脑,名詞加 s 代表復(fù)數(shù),所以這個命令是用來格式化多個文件的欲侮,用法同上崭闲。需要被格式化的文件路徑之間用空格隔開即可。 -
format-objc-files-in-repo.sh
:in-repo威蕉,顧名思義刁俭,就是整理整個倉庫下的所有文件。這個命令建議不要一開始就使用韧涨,請閱讀完 排除整理 部分之后再使用牍戚。
說完了格式化需要用到的命令,我們暫時還不能立即使用虑粥,還要知道怎么避免某些文件不被格式化如孝,因為現(xiàn)在的工程基本都會用到很多的第三方,而這些文件往往不需要再次整理娩贷。好在這些東西 spacecommander
都已經(jīng)為我們想到了第晰,配置起來也是相當(dāng)?shù)暮唵危逻厱榻B到彬祖。當(dāng)然你可以自己寫個小 demo茁瘦,或者使用spacecommander
目錄下Testing Support
的測試代碼進(jìn)行測試。這里貼幾張格式化官方例子的前后對比圖吧:
2.2 自動化整理
上邊我們提到 git 鉤子的問題储笑,按照上述步驟配置完成之后甜熔,其實我們已經(jīng)就已經(jīng)實現(xiàn)了自動化整理代碼的目的。試一下突倍,修改項目中的某個文件腔稀,然后 git add .
之后 git commit -m "提交備注信息"
盆昙,注意一定要是這兩個命令,如果使用 git commit -am "提交備注信息"
的話烧颖,spacecommander
是無法識別要整理的文件的弱左。正常情況下會提示
。這就說明要提交的文件不符合代碼規(guī)范的要求炕淮。接下來我們可以有兩種操作:使用
git commit --no-verify
強制提交拆火,這不是我們的重點⊥吭玻或者使用spacecommander路徑/format-objc-files.sh -s
先對代碼進(jìn)行格式化们镜,這里的-s
后綴參數(shù)是-stage
的意思,是只對暫存區(qū)润歉,也就是要提交的代碼進(jìn)行格式化模狭。成功格式化之后會提示Formatting complete
。然后我們再次運行 git commit -m
對代碼進(jìn)行提交即可踩衩。
3. 排除不想整理的代碼
3.1 排除不需要格式化的文件夾
默認(rèn)情況下嚼鹉,spacecommander 已經(jīng)將 Pods
和 Carthage
路徑下的文件排除掉了
所以不用擔(dān)心這些文件。如果是手動拖入的第三方驱富,我們可以在項目工程目錄下锚赤,創(chuàng)建一個名為
.formatting-directory-ignore
的文件,里邊寫入需要忽略的文件夾路徑即可褐鸥。
3.2 排除不需要格式化的單個文件
上邊說到的是文件夾忽略线脚,那如果是單個文件要怎么做呢?不用怕叫榕,spacecommander 也支持浑侥。我們只需在需要忽略的文件的頭部,注意是最頭部晰绎,添加 #pragma Formatter Exempt
或者// MARK: Formatter Exempt
即可寓落。
3.3 部分代碼避免格式化
同樣,一個文件內(nèi)的某幾行代碼同樣也可以在整理范圍之外荞下。使用到的命令為:// clang-format off
和 // clang-format on
伶选。就像這樣:
3.4 bug。注冊推送時的代碼格式化之后老會多一個分號锄弱,像這樣:
考蕾,我嘗試使用
// clang-format off
依舊不好使祸憋,無奈只能手動修改会宪,之后使用 git commit --no-verify
強制提交了。
4. 快捷鍵配置
4.1 快捷鍵
如果我們每次提交代碼都需要輸入那么長的路徑信息和命令蚯窥,估計代碼格式化工具使用的人也不多掸鹅。幸運的是塞帐,我們可以通過一些設(shè)置來簡化這些操作。這種簡化是屬于命令行層級的操作巍沙,我使用的是 zsh 命令行葵姥,如果你使用的是系統(tǒng)命令行,修改思想完全一致句携,只不過是文件不一樣榔幸。
4.2 路徑快捷鍵
zsh 命令行需要修改用戶根目錄下的 .zshrc
文件,在文件末尾輸入export SPACECOMMANDER="/Users/mac/Documents/spacecommander"
矮嫉,意思是使用SPACECOMMANDER
代表后邊的路徑信息削咆。重啟命令行工具,輸入space之后按 tab
鍵即可自動填充SPACECOMMANDER
蠢笋。
4.3 命令快捷鍵
當(dāng)然我們可以在上邊路徑快捷鍵的基礎(chǔ)上拨齐,直接在路徑快捷鍵的后邊后綴命令,例如SPACECOMMANDER format-objc-files.sh -s
來對整理暫存區(qū)的代碼昨寞。不過這依然不夠快捷瞻惋,是吧?所以我們需要使用更加方便的自定義命令快捷鍵援岩。還是修改 .zshrc
文件歼狼,這次我們添加如下內(nèi)容:
alias formatstage="/Users/mac/Documents/spacecommander/format-objc-files.sh -s"
alias formatfile="/Users/mac/Documents/spacecommander/format-objc-file.sh"
alias formatall="/Users/mac/Documents/spacecommander/format-objc-files-in-repo.sh"
。
重啟命令行工具窄俏,輸入format
之后按tab
我們剛剛添加的三條命令就自動提示出來了蹂匹。
5. 結(jié)束語
至此,關(guān)于日常開發(fā)使用 spacecommander 自動化整理代碼就介紹完了凹蜈,配置完之后限寞,開發(fā)的流程基本是這個樣子:
修改代碼 -> git add . -> git commit -m -> formatstage -> git commit -m
即可實現(xiàn)代碼自動整理,動手試一下吧仰坦,感謝您的閱讀履植!