IndexStoreDB 是一个源代码索引库。它为查找源代码符号、符号出现位置和关系提供了一个可组合且高效的查询 API。IndexStoreDB 使用 libIndexStore 库,该库位于 swiftlang/llvm-project 中,用于读取原始索引数据。原始索引数据可以由 Apple Clang 和 Swift 等编译器使用 -index-store-path
选项生成。IndexStoreDB 通过在用 LMDB 构建的键值数据库中维护加速表,从而实现高效地查询这些数据。
IndexStoreDB 的数据模型源自 libIndexStore。有关 libIndexStore 以及生成原始索引数据的更多信息,请参阅 构建时索引 白皮书。
IndexStoreDB 使用 Swift Package Manager 构建。
标准调试构建和测试
$ swift build
$ swift test
索引中的 C++ 代码需要 libdispatch
,但与 Swift 代码不同,它无法在 Linux 上自动找到它。您可以通过手动添加搜索路径来解决此问题。
$ swift build -Xcxx -I<path_to_swift_toolchain>/usr/lib/swift -Xcxx -I<path_to_swift_toolchain>/usr/lib/swift/Block
Pecker:一个基于 SwiftSyntax 和 IndexStoreDB 检测未使用代码的工具。
欢迎并鼓励为 indexstore-db 做出贡献!请参阅 Swift 贡献指南。
在提交拉取请求之前,请确保您已测试了您的更改,并且它们遵循 Swift 项目的代码贡献指南。
为了成为一个真正伟大的社区,Swift.org 需要欢迎来自各行各业、不同背景和具有广泛经验的开发者。一个多元化和友好的社区将拥有更多伟大的想法、更多独特的视角,并产生更多优秀的代码。我们将努力使 Swift 社区欢迎所有人。
为了明确我们对成员的期望,Swift 采用了 Contributor Covenant 定义的行为准则。这份文件在许多开源社区中使用,我们认为它很好地表达了我们的价值观。有关更多信息,请参阅行为准则。
有关开发 IndexStoreDB 的更多信息,请参阅Development。