54个版本
0.17.7 | 2024年8月1日 |
---|---|
0.17.6 | 2024年7月29日 |
0.17.5 | 2024年2月4日 |
0.17.4 | 2023年11月29日 |
0.1.2 | 2019年11月26日 |
在 数据结构 类别中排名第 35
每月下载量183,292
用于 51 个crate(其中30个直接使用)
600KB
11K SLoC
guppy
跟踪和查询Cargo依赖图。
guppy
提供了一个Rust接口来运行对Cargo依赖图的查询。 guppy
解析 cargo metadata
的输出,然后在其上提供一个图形界面。
类型和生命周期
guppy
公开的中心结构是 PackageGraph
。这代表了一个有向图(尽管 不一定是无环的),其中每个节点是一个包,每条边代表一个依赖关系。
其他类型从 PackageGraph
借用数据,并有一个表示此点的 'g
生命周期参数。命名生命周期参数 'g
总是表示数据是从 PackageGraph
借用的。
PackageMetadata
包含有关各个包的信息,例如 “包”部分 中的数据。
为了遍历图,guppy
提供了一些类型
PackageLink
代表依赖边两端,以及有关依赖关系的详细信息(例如,它是否仅用于开发、平台特定等)。PackageQuery
代表依赖遍历的输入参数:一组包和方向。遍历通过PackageQuery::resolve
来执行,并通过PackageQuery::resolve_with_fn
实现对遍历的细粒度控制。PackageSet
代表图遍历的结果。这个结构体提供了多种方法来遍历包。
对于某些操作,当首次需要时,guppy
会构建一个辅助的 FeatureGraph
。在 FeatureGraph
中的每个节点都是一个包和一个在其中声明的特征的组合,每条边都是一个特征依赖。
为了遍历特征图,guppy
提供了类似的 FeatureQuery
和 FeatureSet
类型。
FeatureSet
还有一个 into_cargo_set
方法,用于模拟 Cargo 构建。此方法生成一个 CargoSet
,它本质上是由两个 FeatureSet
和一些更有用的信息组成的。
guppy
的数据结构是不可变的,并有一些内部缓存。所有 guppy
的类型都是 Send + Sync
,所有生命周期参数都是 协变的。
可选特性
proptest1
:使用proptest
框架支持基于属性的测试。rayon1
:通过 Rayon 支持并行迭代器(目前是初步工作,未来将添加更多并行迭代器)。summaries
:支持编写 构建摘要。
示例
打印出一个包的所有直接依赖
use guppy::{CargoMetadata, PackageId};
// `guppy` accepts `cargo metadata` JSON output. Use a pre-existing fixture for these examples.
let metadata = CargoMetadata::parse_json(include_str!("../../fixtures/small/metadata1.json")).unwrap();
let package_graph = metadata.build_graph().unwrap();
// `guppy` provides several ways to get hold of package IDs. Use a pre-defined one for this
// example.
let package_id = PackageId::new("testcrate 0.1.0 (path+file:///fakepath/testcrate)");
// The `metadata` method returns information about the package, or `None` if the package ID
// wasn't recognized.
let package = package_graph.metadata(&package_id).unwrap();
// `direct_links` returns all direct dependencies of a package.
for link in package.direct_links() {
// A dependency link contains `from()`, `to()` and information about the specifics of the
// dependency.
println!("direct dependency: {}", link.to().id());
}
有关更多示例,请参阅 examples
目录。
贡献
有关如何帮助的详细信息,请参阅 CONTRIBUTING 文件。
许可
此项目可在 Apache 2.0 许可证或 MIT 许可证的条款下使用。
依赖关系
~4.5–6.5MB
~112K SLoC