bacon is a background rust code checker.
It's designed for minimal interaction so that you can just let it running, side to your editor, and be notified of warnings and errors in your Rust code.
cargo install bacon
bacon in a terminal you keep visible.
check the current project
check another project
bacon --path ../broot
check all targets (tests, examples, etc)
bacon --job check-all
run clippy instead of cargo check
bacon --job clippy
define your own jobs
First create a
bacon.toml file by running
This file already contains some standard jobs. Add your own, for example
[jobs.check-win] command = ["cargo", "check", "--target", "x86_64-pc-windows-gnu", "--color", "always"]
[jobs.check-examples] command = ["cargo", "check", "--examples", "--color", "always"] watch = ["examples"] # src is implicitly included
Don't forget the
--color always part: bacon uses style information to recognize warnings and errors.
bacon.toml file may evolve with the features and settings of your project and should be added to source control.
configure clippy lints
You can change the clippy job in the
[jobs.clippy] command = [ "cargo", "clippy", "--color", "always", "--", "-A", "clippy::match_like_matches_macro", "-A", "clippy::collapsible_if", "-A", "clippy::module_inception", ] need_stdout = false
What does it exactly do ?
It watches the content of your source directories and launches
cargo check or other commands on changes.
Watching and computations are done on background threads to prevent any blocking.
The screen isn't cleaned until the compilation is finished to prevent useful information from being replaced by the lines of an unfinished computation.
Errors are displayed before warnings because you usually want to fix them first.
Rendering is adapted to the dimensions of the terminal to ensure you get a proper usable report. And bacon manages rewrapping on resize.
Can I run several bacon in parallel ?
It's perfectly OK and can be useful to check several compilation targets.
Similarly you don't have to stop bacon when you want to use cargo to build the application.
Bacon is efficient and doesn't work when there's no notification.
What are the supported platforms ?
It works on all decent terminals on Linux, Max OSX and Windows.
Are there settings ?
Yes, they let you enable vim-like key bindings, or always start in summary mode or with lines wrapped.
To create a default preferences file, use
$EDITOR $(bacon --prefs)
Why is bacon sometimes not recomputing when I'm using (neo)vim ?
The default write strategy of vim makes successive savings of the same file not always detectable by inotify.
A solution is to add this to your init.vim file:
This doesn't prevent vim from keeping copies during editions, it just changes the behavior of the write operation.
Can I get backtraces in tests ?
To have the backtrace displayed when a test panics, run
RUST_BACKTRACE=1 bacon test
Why "bacon" ?
- It's a background conpiler.
- It comes from France and, as you know, France is bacon.
Bacon is licenced under AGPL-3.0.
The logo is designed by Peter Varo and licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.