swift-syntax
github - https://github.com/apple/swift-syntax
这是苹果官方的工具,Xcode工具包里有,可以扫描Swift源文件,生成AST树(抽象语法树)
用法也很简单,命令行输入
xcrun swiftc -frontend -emit-syntax ./a.swift | python3 -m json.tool
a.swift是创建的测试文件
class Demo {
var a;
func foo() {
}
}
生成如下
{
"kind": "SourceFile",
"layout": [
{
"kind": "CodeBlockItemList",
"layout": [
{
"kind": "CodeBlockItem",
"layout": [
{
"kind": "ClassDecl",
"layout": [
null,
null,
{
"tokenKind": {
"kind": "kw_class"
},
"leadingTrivia": "",
"trailingTrivia": " ",
"presence": "Present"
},
{
"tokenKind": {
"kind": "identifier",
"text": "Demo"
},
"leadingTrivia": "",
"trailingTrivia": " ",
"presence": "Present"
}, // 下面省略几百行
可以看到,AST树的嵌套层级非常深,即使代码非常简单,结果也很复杂。因为它是官方工具,要非常完备地分析文件,但是对于UML类图来说并不需要。
swift-ast-explorer
github - https://github.com/SwiftFiddle/swift-ast-explorer
测试地址 - https://swift-ast-explorer.com/
这是把swift代码生成AST树的网页,也是用swift-syntax生成的
swift-auto-diagram
github - https://github.com/yoshimkd/swift-auto-diagram
它可以把目录下的swift文件生成UML类图,自动生成一个网页,可以缩放拖动。只需要输入一句命令行(YourSwiftDir代表包含swift文件的目录)
ruby generateEntityDiagram.rb ~/YourSwiftDir
它没有用AST,而是直接用正则表达式扫描分析文件中的类、对象和方法,优点是速度快,缺点是生成结果摆放非常乱,类型关系不准确。