grin/doc/style.md
Simon B 765996a630 rustfmt install instruction gotcha (#663)
* rustfmt install instruction gotcha

rustfmt stopped working for me. It turns out people started having trouble with this last year already https://github.com/rust-lang-nursery/rustfmt/issues/2304

* rustfmt on a single file now works! Secrets inside

After `rustup component add rustfmt-preview` I get rustfmt as a command in my terminal.

`rustfmt --help` reveals --write-mode [replace|overwrite|display|plain|diff|coverage|checkstyle] and we've been using the default which is either `overwrite` or `replace` (depending on rustfmt version) and this was changing a bunch of files and a messed up workflow.

* Newcomer-friendly explanation how to use `rustfmt`
2018-01-30 08:36:18 -05:00

1.7 KiB

Grin Style Guide

Grin uses rustfmt to maintain consistent formatting.

Install rustfmt (nightly)

Note: we assume Rust has been installed via Rustup. See build docs for more info.

rustfmt itself requires the nightly toolchain -

rustup update
rustup install nightly
rustup run nightly cargo install rustfmt-nightly

If you still get problems with running cargo +nightly fmt, you might need to also do rustup component add rustfmt-preview (see more info)

Install git pre-commit hook

There is a basic git pre-commit hook in the repo.

The pre-commit hook will not prevent commits if style issues are present but it will indicate any files that need formatting.

To enable this, create a symlink in .git/hooks (note the relative path) -

cd .git/hooks
ln -s -f ../../.hooks/pre-commit

Running rustfmt

To run rustfmt against a single file, this new command works with latest rust and after having done rustup component add rustfmt-preview and by setting --write-mode it doesn't overwrite files.

First maybe try a dry-run to see what changes would be made: rustfmt --write-mode diff -- client.rs

Then if you don't want to do any other cleanups manually, make rustfmt make the changes

rustfmt -- client.rs

and add that as a separate commit at the end of your Pull Request.

The old method would typically change formatting in nearly every file in the grin repo. If you feel adventurous, try this:

cargo +nightly fmt -- ./core/src/lib.rs

(and please take care, since the ending -- file/names.rs actually doesn't have any effect)