SwiftLint
一直以來,我都非常注重代碼的風(fēng)格,例如變量和方法的命名乘凸、是否需要空白行、如果讓代碼更加簡(jiǎn)短并且保持高可讀性等等累榜,有時(shí)候我會(huì)對(duì)一個(gè)變量或者方法名糾結(jié)好久营勤,就是為了找到一個(gè)更清晰易懂的名字。
SwiftLint是一個(gè)檢查Swift代碼風(fēng)格的第三方庫(kù)壹罚,他可以讓我們?cè)诰帉懘a的時(shí)候減少不必要的錯(cuò)誤和冗余代碼葛作,并且使代碼更加清晰易懂。盡早養(yǎng)成一個(gè)良好的編程習(xí)慣非常重要猖凛。
大家可以先看看有哪些良好的Swift編程習(xí)慣:swift-style-guide >>赂蠢,這個(gè)中文版的,英語好的可以去看英文版的辨泳。
安裝
用Homebrew安裝:brew install swiftlint
在Xcode添加運(yùn)行腳本
if which swiftlint >/dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
添加方法如下圖:
添加配置文件
在想要執(zhí)行代碼風(fēng)格檢查的文件夾新建一個(gè)名為.swiftlint.yml
的文件(注意不要漏了前面的點(diǎn))虱岂,我們可以在這個(gè)文件添加一些自定義的規(guī)則:
-
disabled_rules
:從默認(rèn)的可用規(guī)則集合中,禁用規(guī)則 -
opt_in_rules
:激活不在默認(rèn)的可用規(guī)則集合的規(guī)則 -
whitelist_rules
:白名單規(guī)則菠红,只有在這個(gè)列表的規(guī)則才會(huì)被激活第岖,在這個(gè)列表激活的規(guī)則不能出現(xiàn)在disabled_rules
或者opt_in_rules
。
下面是自定義配置文件的示例:
disabled_rules: # 禁用規(guī)則
- colon
- comma
- control_statement
opt_in_rules: # 可選規(guī)則
- empty_count
- missing_docs
# 執(zhí)行這個(gè)命令可以查看所有規(guī)則: swiftlint rules
included: # 指定需要進(jìn)行風(fēng)格檢查的路徑
- Source
excluded: # 指定不需要進(jìn)行風(fēng)格檢查的路徑途乃,優(yōu)先于included
- Carthage
- Pods
- Source/ExcludedFolder
- Source/ExcludedFile.swift
# 自定義某個(gè)規(guī)則
force_cast: warning # 隱式地
force_try:
severity: warning # 顯式地
# 有warning和error的規(guī)則绍傲,可以僅僅設(shè)置warning
# 隱式地
line_length: 110
# 使用一個(gè)數(shù)組隱式地設(shè)置
type_body_length:
- 300 # warning
- 400 # error
# 或者顯式地設(shè)置
file_length:
warning: 500
error: 1200
# 命名規(guī)則可以為min_length和max_length設(shè)置warnings或者errors
# 另外可以設(shè)置某些名字除外
type_name:
min_length: 4 # 只設(shè)置 warning
max_length: # 同時(shí)設(shè)置warning和error
warning: 40
error: 50
excluded: iPhone # 這些字符串除外
identifier_name:
min_length: # 只設(shè)置 min_length
error: 4 # 只設(shè)置 error
excluded: # 這些字符串除外
- id
- URL
- GlobalAPIKey
reporter: "xcode" # 指定報(bào)告類型 (xcode, json, csv, checkstyle, junit, html, emoji)
swiftlint命令
autocorrect 自動(dòng)更正warnings和errors
help 查看幫助
lint 查看當(dāng)前文件夾的文件中的warnings和errors扔傅,這是默認(rèn)命令
rules 查看所有規(guī)則
version 查看SwiftLint的版本
實(shí)際使用
下面是我在某個(gè)項(xiàng)目中實(shí)際運(yùn)用SwiftLint耍共。.swiftlint.yml
配置文件如下:
included:
- LBJWeChat
excluded:
- Pods
cyclomatic_complexity:
warning: 20
error: 30
disabled_rules:
- trailing_newline
- opening_brace
- empty_count
- comma
- colon
- force_cast
- type_name
- trailing_semicolon
- force_try
- function_body_length
- nesting
- variable_name
- operator_whitespace
- control_statement
- legacy_constant
- line_length
- return_arrow_whitespace
- trailing_whitespace
- closing_brace
- statement_position
- type_body_length
- todo
- legacy_constructor
- valid_docs
- missing_docs
- file_length
- leading_whitespace
identifier_name:
excluded: id # 允許命名為id
在剛開始時(shí),我們先把所有想要檢查的規(guī)則放到disabled_rules
猎塞,然后每次刪除一個(gè)規(guī)則试读,刪除后記得保存。刪除一個(gè)規(guī)則后荠耽,在終端執(zhí)行swiftlint
钩骇,就能看到有多少個(gè)warning和error,例如這個(gè)執(zhí)行結(jié)果有36個(gè)warnings和5個(gè)errors:Done linting! Found 36 violations, 5 serious in 55 files.
某些規(guī)則的warning可以讓swiftlint自動(dòng)幫我們解決铝量,例如trailing_newline
倘屹、comma
和colon
等等,執(zhí)行swiftlint autocorrect
即可慢叨。如果不能自動(dòng)解決的纽匙,那么需要自己手動(dòng)一個(gè)個(gè)改。
直到disabled_rules
列表的所有規(guī)則刪除完后拍谐,代碼風(fēng)格檢查工作也完成了烛缔。
更新SwiftLint
如果SwiftLint有新版本馏段,在終端執(zhí)行brew upgrade swiftlint
,然后在Build一下践瓷,看看項(xiàng)目有哪些代碼風(fēng)格問題院喜。
完
如果有問題,歡迎大家留言晕翠。同時(shí)歡迎真心喜歡Swift的童鞋加入我管理的Swift開發(fā)群:536353151
喷舀,本群只討論Swift相關(guān)內(nèi)容。謝謝A苌觥(目前群里人數(shù)不多元咙,呵呵)