catalog
是一个简单但功能强大的 Swift Package 插件,用于生成符号图 (symbolgraph)、收集代码片段 (snippets) 以及检测项目中的 DocC 文档资源。
它类似于 swift-docc-plugin
,但它实际上并不构建文档,而只是生成和定位使用 Swift Package Manager 的符号图和项目扫描功能构建文档所需的资源。
catalog
以 JSON 格式输出文档元数据,格式相当简单明了。其输出旨在易于被下游工具转换,这些工具可以消费、重新定位、压缩或以其他方式后处理这些元数据。
从 v0.4.0 版本开始,swift-package-catalog
包含两个工具
blame
catalog
catalog
是一个普通的 Swift Package 插件,您可以像使用任何其他插件一样使用它,只需将其添加到您的 Package.swift
依赖项列表中即可
let package:Package = .init(name: "example", products: [],
dependencies:
[
.package(url: "https://github.com/kelvin13/swift-package-catalog", from: "0.4.0"),
],
targets: [])
blame
可用于发现依赖项的直接使用者。要使用 blame
,请向其传递目标名称列表
$ swift package blame Atomics NIOCore
direct consumers of Atomics:
0. NIOEmbedded (in 'swift-nio')
1. NIOPosix (in 'swift-nio')
direct consumers of NIOCore:
0. NIO (in 'swift-nio')
1. NIOEmbedded (in 'swift-nio')
2. NIOPosix (in 'swift-nio')
3. NIOSSL (in 'swift-nio-ssl')
4. NIOTLS (in 'swift-nio')
使用 swift package
运行 catalog
将以 JSON 格式输出它设法找到的所有文档资源。在幕后,它将指示 SPM 生成相关的符号图。
$ swift package catalog
Building for debugging...
Build complete! (0.08s)
Building for debugging...
Build complete! (0.07s)
[
{
"catalog_tools_version": 3,
"package": "swift-grammar",
"modules":
[
{
"module": "Grammar",
"dependencies": [],
"include":
[
".build/x86_64-unknown-linux-gnu/extracted-symbols/swift-grammar/Grammar"
]
}
],
"snippets":
[
]
},
{
"catalog_tools_version": 3,
"package": "swift-json",
"modules":
[
{
"module": "JSON",
"dependencies": [{"package": "swift-grammar", "modules": ["Grammar"]}],
"include":
[
".build/x86_64-unknown-linux-gnu/extracted-symbols/swift-json/JSON",
"Sources/JSON/JSON.docc"
]
}
],
"snippets":
[
{
"snippet": "LintingDictionary",
"dependencies":
[
{
"package": "swift-grammar",
"modules": ["Grammar"]
},
{
"package": "swift-json",
"modules": ["JSON"]
}
],
"sources":
[
"Snippets/LintingDictionary.swift"
]
},
{
"snippet": "BasicDecoding",
"dependencies":
[
{
"package": "swift-grammar",
"modules": ["Grammar"]
},
{
"package": "swift-json",
"modules": ["JSON"]
}
],
"sources":
[
"Snippets/BasicDecoding.swift"
]
}
]
}
]
注意:相对路径仅为演示目的而显示。
catalog
插件实际上发出的是绝对路径。
您可以通过传递模块作为位置参数来过滤 catalog
扫描的模块。顺序无关紧要。
$ swift package catalog JSON
Building for debugging...
Build complete! (0.07s)
[
{
"catalog_tools_version": 3,
"package": "swift-json",
"modules":
[
{
"module": "JSON",
"dependencies": [{"package": "swift-grammar", "modules": ["Grammar"]}],
"include":
[
".build/x86_64-unknown-linux-gnu/extracted-symbols/swift-json/JSON",
"sources/json.docc"
]
}
],
"snippets":
[
...
]
}
]
代码片段不绑定到任何模块,因此将始终显示。
目标过滤区分大小写。
$ swift package catalog json
error: target 'json' is not a swift source module in this package
请注意,具有相同名称的多个模块可能出现在依赖树中,只要冲突的模块永远不会组合到同一个产品中。这意味着此工具编目的模块数量可能大于传递给其调用的参数数量。