Swiftlint源码学习
#swiftlint #开源库
Swiftlint 是统一Swift代码风格的工具,本身就是使用Swift语言编写。Swiftlint 使用 Swift_Package_Manager来组织源代码,可以直接用 Xcode打开。

1. 项目结构
1.1 Package.swift
产物
swiftlint 可执行文件
SwiftLintFramework 库
依赖
swift-argument-parser swift命令行的脚手架工具,用于使用swift快速创建命令行工具
SwiftSyntax 允许 Swift 工具解析、检查、生成和转换 Swift 源代码。
SourceKitten 用于和SourceKit进行交互的工具
Yams 解析yaml格式的工具
SwiftyTextTable 生成文本格式表格的工具
关于Swift Package Manager 请参考
1.2 代码结构
2. SwiftLint的lint流程
命令的解析
查询出所有的Swift文件,及文件对应的Swiftlint配置及规则, 返回
[CollectedLinter]
利用规则扫描swift文件, 返回
[StyleViolation]
按照指定格式输出表格
3. Rule
3.1 SourceKitFreeRule
不需要AST抽象语法树,直接通过文本查询或正则匹配实现的Rule
以 LeadingWhitespaceRule 为例:
3.2 ASTRule
需要抽象语法树配合的Rule, 抽象语法树通过sourcekit来获取
以 ArrayInitRule 为例:
通过 sourcekitten structure --file main.swift获取AST
通过 sourcekitten syntax --file main.swift获取Token list
3.3 AnalyzerRule
需要抽象语法树和编译日志配合的Rule, 抽象语法树通过sourcekit来获取
以 UnusedImportRule 为例:
4. SourceKit相关的工具
SourceKit 是一套工具集,使得大多数 Swift 源代码层面的操作特性得以支持,例如Xcode中的源代码解析、语法高亮、排版、自动补全、跨语言头文件生成等等。 SourceKitten 是与 SourceKit 后台进程进行交互的工具 ,基于 SourceKitten 还有很多开源工具
Jazzy: 为Swift/OC生成文档
Sourcery: 生成模版代码
SwiftyMocky: 生成Mock代码的框架
SourceKittenDaemon: 为任何文本编辑器提供swift代码补全
SourceDocs: 从源码注释中生成Markdown文档的命令行工具
Cuckoo: Swift Mock 框架
IBAnalyzer: 无需运行代码或单元测试发现xib或storyboard相关的问题
参考文档
最后更新于
这有帮助吗?