#unused #cargo #projects #trick #detect #find #management

app cargo-machete

Find unused dependencies with this one weird trick!

11 unstable releases

0.6.2 Mar 24, 2024
0.6.0 Oct 10, 2023
0.5.0 Nov 15, 2022
0.3.1 Jun 12, 2022
0.1.0 Nov 13, 2021

#8 in Cargo plugins

Download history 1100/week @ 2023-12-23 2310/week @ 2023-12-30 2758/week @ 2024-01-06 3367/week @ 2024-01-13 4002/week @ 2024-01-20 3366/week @ 2024-01-27 3222/week @ 2024-02-03 3356/week @ 2024-02-10 3638/week @ 2024-02-17 3430/week @ 2024-02-24 4523/week @ 2024-03-02 3287/week @ 2024-03-09 3352/week @ 2024-03-16 4163/week @ 2024-03-23 4085/week @ 2024-03-30 4196/week @ 2024-04-06

16,271 downloads per month

MIT license

40KB
841 lines

cargo-machete

Remove unused Rust dependencies with this one weird trick!

build status matrix chat supported rustc stable

Thanks to Diego F. Goberna for the lovely logo 🥰

Introduction

cargo-machete is a Cargo tool that detects unused dependencies in Rust projects, in a fast (yet imprecise) way.

See also the blog post for a detailed writeup.

Installation

Install cargo-machete with cargo:

cargo install cargo-machete

Usage

Run cargo-machete in a directory that contains one or more Rust projects (using Cargo for dependency management):

cd my-directory && cargo machete

# alternatively

cargo machete /absolute/path/to/my/directory

The return code gives an indication whether unused dependencies have been found:

  • 0 if machete found no unused dependencies,
  • 1 if it found at least one unused dependency,
  • 2 if there was an error during processing (in which case there's no indication whether any unused dependency was found or not).

This can be used in CI situations.

False positives

To ignore a certain set of dependencies in a crate, add package.metadata.cargo-machete to Cargo.toml (or workspace.metadata.cargo-machete to a workspace Cargo.toml), and specify an ignored array:

For example:

[dependencies]
prost = "0.10" # Used in code generated by build.rs output, which cargo-machete cannot check

# in an individual package Cargo.toml
[package.metadata.cargo-machete]
ignored = ["prost"]

# in a workspace Cargo.toml
[workspace.metadata.cargo-machete]
ignored = ["prost"]

If there are too many false positives, consider using the --with-metadata CLI flag, which will call cargo metadata --all-features to find final dependency names, more accurate dependencies per build type, etc. ⚠ This may modify the Cargo.lock files in your projects.

Cargo Machete Action

A github action for cargo machete.

Example usage

The step given by,

      - uses: bnjbvr/cargo-machete@main

can be added to any workflow.

An example workflow is shown below:

name: Cargo Machete
on:
  pull_request: { branches: "*" }

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Machete
        uses: bnjbvr/cargo-machete@main

Contributing

Contributor Covenant

We welcome community contributions to this project.

License

MIT license.

Dependencies

~14MB
~311K SLoC