Running rustfmt on Travis CI

Aug 24, 2016

rustfmt just added a small feature that will hopefully have great impact on the way people use it in the future.

rustfmt --write-mode=diff now returns an exit code of 4 if the code is not properly formatted, which will cause Travis and other CI tools to fail the build. That's great for checking if your contributors ran cargo fmt .

This is an example Travis configuration you can use:

language : rust cache : cargo before_script : (cargo install rustfmt || true) script : - | cargo fmt -- --write-mode=diff && cargo build && cargo test

cache: cargo is highly suggested, compiling a fresh rustfmt on every run significantly slows down your CI. Since cargo returns an error if a package is installed already, I have to use (cargo install rustfmt || true) . (If anyone wants to add support for a --update flag in cargo, I think they'd be happy to merge it).

You can obviously adjust the cargo fmt command to whatever custom rustfmt configuration you're using. Just remember to append --write-mode=diff . Also note that I'd like to discourage you from configuring your rustfmt. Instead, you could participate in the upcoming process outlined by RFC 1607 to decide on a common Rust style for everyone.

I already converted my liquid and Cobalt projects to automatically check if pull requests adhere to the rustfmt style and it works quite well. The program output even shows you a list of things you need to fix (example).

I hope this is useful to folks!