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 请参考

Using the Package Manager

Package Manager

PackageDescription

1.2 代码结构

2. SwiftLint的lint流程

  1. 命令的解析

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

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

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

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 还有很多开源工具

参考文档

Swiftlint Github

Using the Package Manager

SourceKit

最后更新于

这有帮助吗?