#cargo-toml #unused #cargo #dependencies #machete #udeps

bin+lib cargo-shear

检测并从 Cargo.toml 中删除未使用的依赖

31 个版本 (5 个稳定版)

1.1.2 2024 年 8 月 18 日
1.1.1 2024 年 7 月 25 日
0.0.26 2024 年 5 月 29 日
0.0.24 2024 年 4 月 9 日
0.0.16 2024 年 3 月 29 日

Cargo 插件 中排名 82

Download history 523/week @ 2024-05-01 943/week @ 2024-05-08 1192/week @ 2024-05-15 1388/week @ 2024-05-22 1645/week @ 2024-05-29 1536/week @ 2024-06-05 1464/week @ 2024-06-12 1749/week @ 2024-06-19 1742/week @ 2024-06-26 1726/week @ 2024-07-03 2267/week @ 2024-07-10 2359/week @ 2024-07-17 2704/week @ 2024-07-24 2555/week @ 2024-07-31 3137/week @ 2024-08-07 2565/week @ 2024-08-14

每月下载量 11,473

MIT 许可证

26KB
447 行代码(不包括注释)

Cargo Shear ✂️ 🐑

检测并从 Rust 项目的 Cargo.toml 中移除未使用的依赖。

安装

cargo binstall cargo-shear
# OR
cargo install cargo-shear

用法

cargo shear --fix

忽略假阳性

[!IMPORTANT] cargo shear 不能检测宏中的依赖使用,因为它使用 syn 解析文件

可以通过将它们添加到包的 Cargo.toml

[package.metadata.cargo-shear]
ignored = ["crate"]

或工作区的 Cargo.toml

[workspace.metadata.cargo-shear]
ignored = ["crate"]

否则请以错误报告问题。

CI

- name: Install cargo-binstall
  uses: cargo-bins/cargo-binstall@main

- name: Install cargo-shear
  run: cargo binstall --no-confirm cargo-shear

- run: cargo shear

退出码(用于 CI)

退出码指示是否发现了未使用的依赖

  • 如果没有发现未使用的依赖,则返回 0
  • 如果发现了至少一个未使用的依赖,则返回 1
  • 如果在处理过程中发生错误,则返回 2(在这种情况下,无法指示是否发现了任何未使用的依赖)。

技术

  1. 使用 cargo_metadata 包列出在 [workspace.dependencies][dependencies] 中指定的所有依赖
  2. 遍历所有包目标(libbinexampletestbench)以定位所有 Rust 文件
  3. 使用 syn 解析这些 Rust 文件并提取导入
  4. 找出导入与包依赖之间的差异

先前的艺术

  • est31/cargo-udeps
    • 它通过编译你的项目来收集依赖使用,并在 target/ 目录中找到它们
    • 似乎不再与最新版本的 cargo 兼容
    • 不与 cargo 工作空间兼容
  • bnjbvr/cargo-machete
    • 通过在源代码上运行正则表达式模式来收集依赖项使用情况
    • 无法检测到依赖项的所有使用情况
    • 不会从工作空间根目录中删除未使用的依赖项

获奖案例

赞助商

My sponsors

依赖项

~8–17MB
~255K SLoC