iOS程式碼規範工具 SwiftLint SwiftFormat
SwiftLint
強制檢查 Swift 程式碼風格和規定的工具,以 Ray Wenderlich's Swift 程式碼風格指南為基礎。
安裝
Swift支援全域性安裝和專案安裝,全域性安裝詳見官方文件,下面只貼用到的方式。
1、CocoaPods安裝
pod 'SwiftLint'
2、新增指令碼
"${PODS_ROOT}/SwiftLint/swiftlint"
3、配置 .swiftlint.yml
檔案
建立一個命名為 .swiftlint.yml
的配置檔案,放在 根目錄 即可,執行會遞迴子資料夾
現有的配置檔案裡大部分有註解和說明,預設配置詳見官方連結,規則明細在這裡。
4、在程式碼內控制規則開關
當前檔案忽略指定規則,在檔案頂部加入註釋
``` // swiftlint:disable xxxx
xxxx 替換規則名,exmple: // swiftlint:disable file_length ```
通過註釋開關指定規則
// swiftlint:disable function_body_length
func testFunction() {
// swiftlint:enable function_body_length
}
通過新增引數指定程式碼行,開關指定規則
:previous
,前一行:this
,當前行:next
,後一行
// swiftlint:disable:next cyclomatic_complexity
func testFunc() {
…… ……
}
使用
執行檢查
./Pods/SwiftLint/swiftlint lint
自動修復
./Pods/SwiftLint/swiftlint --fix
SwiftFormat
SwfitFormat 是快捷格式化 Swift 程式碼的工具。
安裝
官方給出了多種安裝和使用的方式,最終決定使用全域性安裝的方式,考慮如下:
SwiftFormat
其實具備Lint
功能,但是規則覆蓋度和知名度上不如 SwiftLint;
所以規則選擇使用SwiftLint
限制。
- 但是
SwiftLint
的自動修復不能覆蓋所有問題修復(例如單行長度的限制)
Format
正好可以方便的解決這部分問題,所以選擇雙管齊下
- 讓
Format
作為Lint
的補充和修復工具,所以輕量配置使用一下就行。
全域性安裝
brew install swiftformat
安裝 Xcode 外掛
brew install --cask swiftformat-for-xcode
open "/Applications/SwiftFormat For Xcode.app"
開啟 SwiftFormat For Xcode.app
後,
會自動安裝到 Xcode
,重啟Xcode
生效。
重啟後在 Editor
選單下能看到 SwiftFormat
,安裝成功。
配置自動格式化
最簡單的使用就是通過上圖的選單點選即可,官方文件裡還有各種不同的觸發方式。
而作為開發者更希望在日常開發中,可以不知不覺地實現格式化。
使用Automator
可以實現這個操作,這是一款系統軟體。
中文名是自動操作,搜一下就出來了。
工作流程選沒有輸入,位於選擇Xcode
複製指令碼替換
on run {input, parameters}
tell application "System Events"
tell process "Xcode"
set frontmost to true
if menu item "Format File" of menu of menu item "SwiftFormat" of menu "Editor" of menu bar 1 exists then
click menu item "Format File" of menu of menu item "SwiftFormat" of menu "Editor" of menu bar 1
end if
click menu item "Save" of menu "File" of menu bar 1
end tell
end tell
return input
end run
點選build
之後程式碼會高亮,接下來儲存下來
回到Xcode
,Services
選單下看到剛剛儲存填寫的名字SwiftFormat
系統偏好設定 -> 安全性與隱私 -> 輔助功能
,新增Xcode
控制權限
系統設定裡面給Xcode
新增一個和儲存一樣的快捷鍵,這樣就可以在每次儲存的時候自動觸發。
匯出 / 匯入規則檔案
command + S
就可以匯出配置檔案
匯入的時候如果出現找不到可配置的規則,就在配置檔案裡面搜尋關鍵字,然後刪掉