#workspace #fix #lint #automatic #substrate #check #manifest-path

已删除 功能

了解 Rust 依赖项和功能是如何启用的

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

Download history 3/week @ 2024-03-09 1/week @ 2024-03-16 40/week @ 2024-03-30 10/week @ 2024-04-06

每月下载 67

GPL-3.0-only

36KB
721 代码行

Rust crates.io docs.rs

功能

了解为什么以及在 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