9 个版本 (4 个重大更改)
0.5.1 | 2023年2月11日 |
---|---|
0.5.0 | 2023年2月10日 |
0.4.1 | 2023年2月7日 |
0.3.2 | 2023年1月31日 |
0.1.0 | 2023年1月27日 |
在 #manifest-path 中排名 5
每月下载 67 次
36KB
721 代码行
功能
了解为什么以及在 Rust 工作区中如何启用功能。 Feature
可以自动修复缺少功能传播到依赖项的问题。最终,它将准备好用于 CI,以检查 MR 的功能使用一致性。
安装
cargo install -f feature
示例 - 修复功能传播
让我们检查 runtime-benchmarks
功能是否正确传递到工作区中 frame-support
软件包的所有依赖项。
feature lint propagate-feature --manifest-path ../substrate/Cargo.toml --feature runtime-benchmarks --workspace -p frame-support
输出显示有些依赖项公开了功能,但没有将其传递下去
Analyzing workspace
crate "frame-support"
feature "runtime-benchmarks"
must propagate to:
frame-system
sp-runtime
sp-staking
Generated 1 errors and 0 warnings and fixed 0 issues.
如果没有 -p
,它会检测到更多问题。您可以验证 frame-support,实际上它缺少了 sp-runtime
的功能,而 sp-runtime 明显有 🤔。
可以通过应用 --fix
标志来修复此问题
feature lint propagate-feature --manifest-path ../substrate/Cargo.toml --feature runtime-benchmarks --workspace -p frame-support --fix
这将产生以下差异
-runtime-benchmarks = []
+runtime-benchmarks = [
+ "frame-system/runtime-benchmarks",
+ "sp-runtime/runtime-benchmarks",
+ "sp-staking/runtime-benchmarks"
+]
自动修复目前比较粗略,不会检查可选依赖项。它也不会将功能添加到没有该功能但需要该功能的软件包中,因为它依赖于其他软件包。这将在不久的将来得到修复。
示例 - 依赖项跟踪
最近在 Substrate 主 CI 中出现了一个构建错误,这是由下游依赖项 snow
引起的。为了调查这个问题,了解 Substrate 如何依赖它是很有用的。
让我们了解 node-cli
如何依赖 snow
feature trace --manifest-path substrate/Cargo.toml node-cli snow
输出
node-cli -> try-runtime-cli -> substrate-rpc-client -> sc-rpc-api ->sc-chain-spec -> sc-telemetry -> libp2p -> libp2p-webrtc -> libp2p-noise -> snow
所以它来自 libp2p,好吧。知道了。
路线图
- 将功能信息添加到启用的依赖项
- 允许手动跳过开发依赖项(目前总是跳过)
- 引入用于
to
参数的版本和功能过滤器 - 优化
shortest_path
函数 - 创建用于验证工作区中某些约束的 lint 规则
依赖项
~6.5–9MB
~163K SLoC