2015-11-11 20:01:38 +00:00
|
|
|
# rustfmt [![Build Status](https://travis-ci.org/rust-lang-nursery/rustfmt.svg)](https://travis-ci.org/rust-lang-nursery/rustfmt)
|
2015-04-30 03:09:33 +00:00
|
|
|
|
|
|
|
A tool for formatting Rust code according to style guidelines.
|
|
|
|
|
2015-11-09 18:34:44 +00:00
|
|
|
If you'd like to help out (and you should, it's a fun project!), see
|
2015-11-11 22:46:55 +00:00
|
|
|
[Contributing.md](Contributing.md).
|
2015-11-09 18:34:44 +00:00
|
|
|
|
2015-12-16 04:58:20 +00:00
|
|
|
## Quick start
|
|
|
|
|
|
|
|
To install:
|
|
|
|
|
|
|
|
```
|
2015-12-16 05:00:40 +00:00
|
|
|
cargo install rustfmt
|
2015-12-16 04:58:20 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
to run on a cargo project in the current working directory:
|
|
|
|
|
|
|
|
```
|
|
|
|
cargo fmt
|
|
|
|
```
|
2015-10-23 20:51:29 +00:00
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
2015-11-11 17:34:17 +00:00
|
|
|
> **Note:** this method currently requires you to be running cargo 0.6.0 or
|
|
|
|
> newer.
|
2015-10-23 20:51:29 +00:00
|
|
|
|
|
|
|
```
|
2015-12-16 05:00:40 +00:00
|
|
|
cargo install rustfmt
|
2015-10-23 20:51:29 +00:00
|
|
|
```
|
|
|
|
|
2015-10-27 02:51:59 +00:00
|
|
|
or if you're using [`multirust`](https://github.com/brson/multirust)
|
2015-10-23 20:51:29 +00:00
|
|
|
|
|
|
|
```
|
2015-12-16 05:00:40 +00:00
|
|
|
multirust run nightly cargo install rustfmt
|
2015-10-23 20:51:29 +00:00
|
|
|
```
|
2015-04-30 03:09:33 +00:00
|
|
|
|
2015-12-16 03:41:58 +00:00
|
|
|
Usually cargo-fmt, which enables usage of Cargo subcommand `cargo fmt`, is
|
|
|
|
installed alongside rustfmt. To only install rustfmt run
|
|
|
|
|
|
|
|
```
|
2015-12-16 05:00:40 +00:00
|
|
|
cargo install --no-default-features rustfmt
|
2015-12-16 03:41:58 +00:00
|
|
|
```
|
2015-11-04 04:45:01 +00:00
|
|
|
|
2015-12-13 19:17:26 +00:00
|
|
|
## Running
|
|
|
|
|
2015-12-16 03:41:58 +00:00
|
|
|
You can run Rustfmt by just typing `rustfmt filename` if you used `cargo
|
2015-12-13 19:17:26 +00:00
|
|
|
install`. This runs rustfmt on the given file, if the file includes out of line
|
|
|
|
modules, then we reformat those too. So to run on a whole module or crate, you
|
|
|
|
just need to run on the root file (usually mod.rs or lib.rs). Rustfmt can also
|
2015-12-16 03:41:58 +00:00
|
|
|
read data from stdin. Alternatively, you can use `cargo fmt` to format all
|
|
|
|
binary and library targets of your crate.
|
2015-12-13 19:17:26 +00:00
|
|
|
|
|
|
|
You'll probably want to specify the write mode. Currently, there are modes for
|
2016-01-23 03:33:59 +00:00
|
|
|
diff, replace, overwrite, display, coverage, and checkstyle.
|
|
|
|
|
2016-01-23 16:33:50 +00:00
|
|
|
* `replace` Is the default and overwrites the original files after creating backups of the files.
|
|
|
|
* `overwrite` Overwrites the original files _without_ creating backups.
|
|
|
|
* `display` Will print the formatted files to stdout.
|
|
|
|
* `diff` Will print a diff between the original files and formatted files to stdout.
|
2016-01-23 03:33:59 +00:00
|
|
|
* `checkstyle` Will output the lines that need to be corrected as a checkstyle XML file,
|
|
|
|
that can be used by tools like Jenkins.
|
|
|
|
|
|
|
|
The write mode can be set by passing the `--write-mode` flag on
|
|
|
|
the command line. For example `rustfmt --write-mode=display src/filename.rs`
|
2015-12-13 19:17:26 +00:00
|
|
|
|
|
|
|
You can run `rustfmt --help` for more information.
|
|
|
|
|
2015-12-16 05:07:59 +00:00
|
|
|
`cargo fmt` uses `--write-mode=replace` by default.
|
|
|
|
|
2015-12-13 19:17:26 +00:00
|
|
|
|
2015-11-12 09:44:28 +00:00
|
|
|
## Running Rustfmt from your editor
|
2015-11-04 04:45:01 +00:00
|
|
|
|
2015-11-12 09:44:28 +00:00
|
|
|
* [Vim](http://johannh.me/blog/rustfmt-vim.html)
|
|
|
|
* [Emacs](https://github.com/fbergroth/emacs-rustfmt)
|
2015-12-12 02:11:09 +00:00
|
|
|
* [Sublime Text 3](https://packagecontrol.io/packages/BeautifyRust)
|
2015-11-17 05:24:42 +00:00
|
|
|
* [Atom](atom.md)
|
2016-01-01 17:30:36 +00:00
|
|
|
* Visual Studio Code using [RustyCode](https://github.com/saviorisdead/RustyCode) or [vsc-rustfmt](https://github.com/Connorcpu/vsc-rustfmt)
|
2015-11-04 04:45:01 +00:00
|
|
|
|
2015-09-01 02:42:58 +00:00
|
|
|
## How to build and test
|
2015-10-23 20:51:29 +00:00
|
|
|
|
2015-04-30 03:09:33 +00:00
|
|
|
`cargo build` to build.
|
|
|
|
|
|
|
|
`cargo test` to run all tests.
|
|
|
|
|
2015-12-15 00:18:47 +00:00
|
|
|
To run rustfmt after this, use `cargo run --bin rustfmt -- filename`. See the
|
2015-12-16 03:41:58 +00:00
|
|
|
notes above on running rustfmt.
|
2015-11-04 04:45:01 +00:00
|
|
|
|
|
|
|
|
2016-01-14 04:58:23 +00:00
|
|
|
## Configuring Rustfmt
|
2015-11-09 18:34:44 +00:00
|
|
|
|
|
|
|
Rustfmt is designed to be very configurable. You can create a TOML file called
|
|
|
|
rustfmt.toml, place it in the project directory and it will apply the options
|
2016-02-03 23:50:39 +00:00
|
|
|
in that file. See `rustfmt --config-help` for the options which are available,
|
2016-01-14 04:58:23 +00:00
|
|
|
or if you prefer to see source code, [src/config.rs](src/config.rs).
|
2015-11-09 18:34:44 +00:00
|
|
|
|
2015-11-28 09:03:46 +00:00
|
|
|
By default, Rustfmt uses a style which (mostly) conforms to the
|
2015-11-09 18:34:44 +00:00
|
|
|
[Rust style guidelines](https://github.com/rust-lang/rust/tree/master/src/doc/style).
|
|
|
|
There are many details which the style guidelines do not cover, and in these
|
|
|
|
cases we try to adhere to a style similar to that used in the
|
|
|
|
[Rust repo](https://github.com/rust-lang/rust). Once Rustfmt is more complete, and
|
|
|
|
able to re-format large repositories like Rust, we intend to go through the Rust
|
|
|
|
RFC process to nail down the default style in detail.
|
|
|
|
|
|
|
|
If there are styling choices you don't agree with, we are usually happy to add
|
|
|
|
options covering different styles. File an issue, or even better, submit a PR.
|
|
|
|
|
|
|
|
|
2015-11-04 04:45:01 +00:00
|
|
|
## Gotchas
|
|
|
|
|
|
|
|
* For things you do not want rustfmt to mangle, use one of
|
2015-11-20 18:58:57 +00:00
|
|
|
|
2015-11-09 18:34:44 +00:00
|
|
|
```rust
|
2016-03-17 04:51:16 +00:00
|
|
|
#[rustfmt_skip] // requires nightly and #![feature(custom_attribute)] in crate root
|
|
|
|
#[cfg_attr(rustfmt, rustfmt_skip)] // works in stable
|
2015-11-04 04:45:01 +00:00
|
|
|
```
|
|
|
|
* When you run rustfmt, place a file named rustfmt.toml in target file
|
|
|
|
directory or its parents to override the default settings of rustfmt.
|
|
|
|
* After successful compilation, a `rustfmt` executable can be found in the
|
|
|
|
target directory.
|