| Swift , iOS , Xcode , 实用工具 , CLI(命令行)
SwiftLint 是一个很不错的 Swift 项目检查工具。其具有以下特点:
1.容易集成;
2.配置简单;
3.支持自动纠正部分代码;
4.甚至有一些官方的 中文教程;
对于个人而言,如果你想改善代码质量,我相信它一定可以帮到你,而且效果会非常显著。
对于团队而言,如果项目中集成了 SwiftLint,PR 里面的评论数量会少很多,尤其是语法层面的一些低级错误。虽然集成了 SwiftLint 会增加些许的项目编译耗时,但是它可以有效地帮助团队提高代码审核的效率,同时也提高代码的质量。所以,这也是一举多得的好事。
可以直接参考官方的 中文教程 来集成。Ficow 在这里分享一些注意事项。
exit 1
报错。请参考下面的示例脚本代码:if [[ "$(uname -m)" == arm64 ]]; then
export PATH="/opt/homebrew/bin:$PATH"
fi
if which swiftlint > /dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
exit 1 # 编译会失败并报错,便于发现 SwiftLint 集成问题
fi
在项目根目录下新建一个 .swiftlint.yml
文件,然后把官方的 默认配置内容 复制到该文件中。
同时,记得将默认配置中 included
下面的 - Sources
改为你实际项目中的路径,尤其是主项目中代码所在的那个目录。比如:
included: # 执行 linting 时包含的路径。如果出现这个 `--path` 会被忽略。
- Sources
否则,Xcode会报错:
然后,在脚本中添加 SwiftLint 要执行的配置文件路径:
if [[ "$(uname -m)" == arm64 ]]; then
export PATH="/opt/homebrew/bin:$PATH"
fi
if which swiftlint > /dev/null; then
swiftlint --config "$SRCROOT/.swiftlint.yml" # 使用指定的配置文件
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
exit 1 # 编译会失败,而且会报错,便于发现 SwiftLint 集成问题
fi
在命令行中执行 swiftlint rules -e
即可查看已启用的规则(enabled in your config
列):
按照官方教程里面的步骤集成完 SwiftLint 之后,在 Xcode 中直接编译项目即可确认 SwiftLint 是否成功集成。
默认开启的 Lint 规则里面包含了: vertical_whitespace
和 line_length
,如果 SwiftLint 已经成功集成了,你多半会看到很多代码行出现这些警告。
在命令行中执行 swiftlint lint
,如果你可以看到类似下面截图中的效果,说明集成成功:
你可以直接参考官方的中文文档 配置,内容非常详细而且简单易懂。
由于该配置文件是 .yml
格式,所以请你一定要注意配置项的 缩进
是否正确,还要避免输入 中文冒号 :
,否则最终的配置结果很可能不是你想要的。
如果你想在某些代码行禁用某个规则,可以参考 在代码中关闭某个规则。
你可以在这个页面查看和搜索所有的规则:
该页面会说明每个规则的作用,以及配置参数,还有是否触发 lint 警告/错误的示例代码。
如果感兴趣,你可以看看 colon 这个例子。
在开启自动纠正之前,先在命令行中执行 swiftlint rules
确认该规则支持自动纠正(correctable
列为 yes
):
或者,直接执行 swiftlint rules -c
,输出所有支持自动纠正的规则。
如果需要查看 rules 相关的结果,可以通过 swiftlint rules --help
来查看 swiftlint rules
的帮助文档。
在此,Ficow 以 explicit_init
为例,展示其纠正效果。
首先,在配置文件中的 opt_in_rules
部分添加以下规则:
- explicit_init
你可以参考该规则的文档页 explicit_init,在项目代码中添加一些违反规则的示例代码,比如:
func foo() -> [String] {
return [1].compactMap { String.init($0) }
}
在命令行中运行以下命令,即可自动纠正代码:
swiftlint autocorrect --fix --format
Ficow根据官方的教程,直接执行 swiftlint autocorrect 之后没有纠正效果。
你可以看到,String.init($0)
被纠正为: String($)
。
如果项目中太多这种显式的 init
调用,自动纠正就可以有效地压缩源代码。对于大型项目来说,会很有帮助。
有些规则不是简单修改 SwiftLint 规则就可以启用的,比如 unused_import
。
如果查看该规则的文档,我们会发现这样的说明:
Analyzer rule: Yes
对于 analyzer rule,需要执行 swiftLint analyze
而不是 swiftLint lint
命令。
而且,配置起来要相对复杂一些,你可以参考这篇帖子的做法:
swiftlint lint | grep -o '([A-Za-z].*)' | sed 's/[()]//g' | uniq
从上图中可以看到,目前项目代码中存在以下问题:
line_length
explicit_init
line_length
unused_optional_binding
如果你想禁用一些规则,可以将它们添加到配置文件中的 disabled_rules
部分。
如果你想统计每种问题发生的次数,可以执行以下命令:
swiftlint lint | grep -o '([A-Za-z].*)' | sed 's/[()]//g' | uniq -c
本小节的脚本内容摘自 SwiftLint in Use - Medium
SwiftLint 易集成,易学易用,还可以帮你优化项目。你也快用起来吧~
如果你在集成 SwiftLint 的过程中遇到了什么问题,这个 demo 项目 可供你参考。
如本文有谬误,或者你有任何改进建议,欢迎你留言与我交流,谢谢!
参考内容:
realm/SwiftLint - Github
GitHub Swift 风格指南
SwiftLint Rules
Rule Directory
SwiftLint in Use - Medium
觉得不错?点个赞呗~
转载声明:本站文章如无特别说明,皆为原创。转载请注明:Ficow Shen's Blog