/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
複製代碼
譯註:在Max OS X 10.11(El Capitan)版本中,homebrew在安裝軟件時可能會碰到/usr/local目錄不可寫的權限問題。可使用下面的命令修復:git
sudo chown -R `whoami` /usr/local
複製代碼
brew install swiftlint
複製代碼
SwiftLint
版本,這是一種很好的解決方案SwiftLint
以及他的依賴包的完整資源文件都安裝到 Pods/ 目錄中去,因此在使用版本管理工具好比 git/svn
時要注意設置忽略相關目錄Podfile
pod 'SwiftLint'
複製代碼
SwiftLint
還支持使用 pkg
安裝包進行安裝,在官方的 Github 頁面能夠找到最新發布的安裝包github
swiftlint help
能夠查看全部可用的命令:各個命令註釋json
//查看全部命令
swiftlint help
//忽略空格致使的警告和錯誤
swiftlint autocorrect
//輸出全部的警告和錯誤
swiftlint lint
//查看全部可得到的規則以及對應的 ID
swiftlint rules
//產看當前版本號
swiftlint version
複製代碼
swiftlint autocorrect
複製代碼
而後咱們就會發現,全部的空格符Warning都消失了。這都得益於咱們剛剛所進行的命令行操做,它會將已知的可以自動修復的Error和Warning都自動修復,大大的減輕了咱們的工做量。swift
安裝完成後,須要在Xcode中配置相關設置,才能使 SwiftLint 在 Xcode 中自動檢測代碼規範。配置也很簡單,只須要在 Xcode 的 Build Phases 中新建一個 Run Script Phase 配置項,在裏面添加相關代碼後,編譯便可!api
1. 全局安裝腳本添加方式數組
if which swiftlint >/dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
複製代碼
2. CocoaPods安裝腳本添加xcode
"${PODS_ROOT}/SwiftLint/swiftlint"
複製代碼
echo "warning: ..."
複製代碼
以後添加一行代碼:ruby
exit 1
複製代碼
3. 配置完成後,command+B
編譯bash
SwiftLint
默認方法名或者註釋不得超過120個字符SwiftLint
在作代碼規範檢查的時候自動忽略 CocoaPods
、Carthage
等包管理器引入的第三方庫(固然,手動導入的第三方庫也能設置忽略)touch .swiftlint.yml
command + shift + .
disabled_rules: # 禁用指定的規則
- colon
- comma
- control_statement
opt_in_rules: # 啓用指定的規則
- empty_count
- missing_docs
# 能夠經過執行以下指令來查找全部可用的規則:
# swiftlint rules
included: # 執行 linting 時包含的路徑。若是出現這個 `--path` 會被忽略。
- Source
excluded: # 執行 linting 時忽略的路徑。 優先級比 `included` 更高。
- Carthage
- Pods
- Source/ExcludedFolder
- Source/ExcludedFile.swift
複製代碼
能夠經過在一個源文件中定義一個以下格式的註釋來關閉某個規則:框架
// swiftlint:disable <rule>
複製代碼
在該文件結束以前或者在定義以下格式的匹配註釋以前,這條規則都會被禁用:
// swiftlint:enable <rule>
複製代碼
例如:
// swiftlint:disable opening_brace
func initTakeScreenshot(launchOptions: [AnyHashable: Any]?){
// swiftlint:enable opening_brace
if let options = launchOptions {
let userInfo = options[UIApplicationLaunchOptionsKey.remoteNotification]
NotificationCenter.default.post(name: Notification.Name.UIApplicationUserDidTakeScreenshot, object: userInfo)
}
}
複製代碼
規則關閉以前
規則關閉以後
也能夠經過添加 :previous, :this 或者 :next 來使關閉或者打開某條規則的命令分別應用於前一行,當前或者後一行代碼。
例如:
// swiftlint:disable:next force_cast
let noWarning = NSNumber() as! Int
let hasWarning = NSNumber() as! Int
let noWarning2 = NSNumber() as! Int // swiftlint:disable:this force_cast
let noWarning3 = NSNumber() as! Int
// swiftlint:disable:previous force_cast
複製代碼
CocoaPods
導入的第三方庫excluded:
- Pods
複製代碼
excluded:
- Pods
- Carthage
複製代碼
excluded: # 執行 linting 時忽略的路徑。 優先級比 `included` 更高。
- Source/ExcludedFolder
- Source/ExcludedFile.swift
複製代碼
SwiftLint
支持經過嵌套配置文件的方式來對代碼分析過程進行更加細緻的控制。
.swiftlint.yml
文件裏設置 use_nested_configs: true
值。.swiftlint.yml
文件。excluded
,included
,和 use_nested_configs
在嵌套結構中會被忽略。SwiftLint
能夠自動修正某些錯誤,磁盤上的文件會被一個修正後的版本覆蓋。swiftlint autocorrect
以前有對它們作過備份,不然的話有可能致使重要數據的丟失。disabled_rules: # 執行時排除掉的規則
- colon
- comma
- control_statement
opt_in_rules: # 一些規則僅僅是可選的
- empty_count
- missing_docs
# 能夠經過執行以下指令來查找全部可用的規則:
# swiftlint rules
included: # 執行 linting 時包含的路徑。若是出現這個 `--path` 會被忽略。
- Source
excluded: # 執行 linting 時忽略的路徑。 優先級比 `included` 更高。
- Carthage
- Pods
- Source/ExcludedFolder
- Source/ExcludedFile.swift
# 可配置的規則能夠經過這個配置文件來自定義
# 二進制規則能夠設置他們的嚴格程度
force_cast: warning # 隱式
force_try:
severity: warning # 顯式
# 同時有警告和錯誤等級的規則,能夠只設置它的警告等級
# 隱式
line_length: 110
# 能夠經過一個數組同時進行隱式設置
type_body_length:
- 300 # warning
- 400 # error
# 或者也能夠同時進行顯式設置
file_length:
warning: 500
error: 1200
# 命名規則能夠設置最小長度和最大程度的警告/錯誤
# 此外它們也能夠設置排除在外的名字
type_name:
min_length: 4 # 只是警告
max_length: # 警告和錯誤
warning: 40
error: 50
excluded: iPhone # 排除某個名字
variable_name:
min_length: # 只有最小長度
error: 4 # 只有錯誤
excluded: # 排除某些名字
- id
- URL
- GlobalAPIKey
reporter: "xcode" # 報告類型 (xcode, json, csv, checkstyle)
複製代碼
原文連接:https://github.com/realm/SwiftLint/blob/master/README.md 譯文連接:https://github.com/realm/SwiftLint/blob/master/README_CN.md