Cargo is a fantastic tool. It’s number 1 or 2 on my list whenever someone asks me to describe the benefits of Rust.
This post is about little crates that you can install to extend cargo’s day-to-day functionality. They add things that may be a little opinionated, making the core developers leave them out of the main tool and instead available as community maintained addons.
First I’ll mention 3 great tips for cargo itself:
Tips for cargo itself
The secret weapon of the Rust community.
Make sure you know how to document your crates (tldr
/// comments annotate ) and the cool
features you can do like running tests in the docs. Then you can see these docs with
A great thing I’ve found is that you can use
cargo doc --open to directly open the browser to the
generated docs. Before that I was manually looking for the docs under
Even though it’s well known, I often forget to use this!
cargo check! It doesn’t compile & link
your code into an executable, it simply checks that your code is valid so it’s much faster.
When using a language it is KEY to know how to run specific
tests. As a recap with cargo this is
cargo test $yourtestname, which is also a substring match, so
it will run all tests with
yourtestname in their name, like
Ok, now onto what you’re here for, cargo extensions!
Useful: I use these nearly every day
Lets you type
cargo add mycrate to add
mycrate as a dependency to your project.
IIRC the cargo developers didn’t want to add this functionality in by default with the tool, as a sort of nudge to use fewer dependencies, but it’s just a nice feature to have so you don’t have to go digging for the latest version number yourself.
Watches your rust project and re-runs cargo commands when it changes. Mostly I use it to be able to have an IDE-like experience:
cargo watch -x check cargo watch -x run --example example_im_tweaking
You can watch non Rust files and execute more complex commands, but that’s what I use it for most often.
I use these occasionally
Helpful extension for profiling your Rust application on macOS. This collects performance information and simplifies the process of running Instruments with Rust code.
Same deal, but with perf on linux. Collects a nice flamegraph for your Rust application.
Shows your dependency tree in a clear way. Very useful with the
-d option, which inverts the tree to show
you when and why you have the same crate installed twice.
Shows you which dependencies you can bump with semver.
Crates I’ve never used, but I’m curious about
Shows you which of your dependencies have known vulnerabilities in them.
Builds your readme out of rustdoc so the examples are never out of date! Sounds neat.
Lets you compare the output of two
cargo bench runs.
cargo fuzz and
Lets you use
libfuzzer or AFL to fuzz your program. I’ve used afl before and it was really fun, but I haven’t been in
the position of needing to use one for my Rust work yet.
Cargo-crev is attempting to build a web of trust system for auditing crates. I’m not big on Web Of Trust but sounds interesting.
So there you have it, some little niceties for writing lots of Rust.
comments powered by Disqus