github编辑

Swiftlint源码学习

#swiftlint #开源库

Swiftlintarrow-up-right 是统一Swift代码风格的工具,本身就是使用Swift语言编写。Swiftlint 使用 Swift_Package_Managerarrow-up-right来组织源代码,可以直接用 Xcode打开。

1. 项目结构

1.1 Package.swift

产物

  • swiftlint 可执行文件

  • SwiftLintFramework 库

依赖

关于Swift Package Manager 请参考

Using the Package Managerarrow-up-right

Package Managerarrow-up-right

PackageDescriptionarrow-up-right

1.2 代码结构

2. SwiftLint的lint流程

  1. 命令的解析

  1. 查询出所有的Swift文件,及文件对应的Swiftlint配置及规则, 返回 [CollectedLinter]

  1. 利用规则扫描swift文件, 返回 [StyleViolation]

  1. 按照指定格式输出表格

3. Rule

3.1 SourceKitFreeRule

不需要AST抽象语法树,直接通过文本查询或正则匹配实现的Rule

LeadingWhitespaceRulearrow-up-right 为例:

3.2 ASTRule

需要抽象语法树配合的Rule, 抽象语法树通过sourcekit来获取

ArrayInitRulearrow-up-right 为例:

通过 sourcekitten structure --file main.swift获取AST

通过 sourcekitten syntax --file main.swift获取Token list

3.3 AnalyzerRule

需要抽象语法树和编译日志配合的Rule, 抽象语法树通过sourcekit来获取

UnusedImportRulearrow-up-right 为例:

4. SourceKit相关的工具

SourceKit 是一套工具集,使得大多数 Swift 源代码层面的操作特性得以支持,例如Xcode中的源代码解析、语法高亮、排版、自动补全、跨语言头文件生成等等。 SourceKittenarrow-up-right 是与 SourceKit 后台进程进行交互的工具 ,基于 SourceKittenarrow-up-right 还有很多开源工具

参考文档

Swiftlint Githubarrow-up-right

Using the Package Managerarrow-up-right

SourceKitarrow-up-right

最后更新于