If you'd like to help out (and you should, it's a fun project!), see
[Contributing.md](Contributing.md).
-We are changing the default style used by rustfmt. There is an ongoing [RFC process](https://github.com/rust-lang-nursery/fmt-rfcs).
-The last version using the old style was 0.8.6. From 0.9 onwards, the RFC style
-is the default. If you want the old style back, you can use [legacy-rustfmt.toml](legacy-rustfmt.toml)
-as your rustfmt.toml.
+We are changing the default style used by rustfmt. There is an ongoing [RFC
+process][fmt rfcs]. The last version using the old style was 0.8.6. From 0.9
+onwards, the RFC style is the default. If you want the old style back, you can
+use [legacy-rustfmt.toml](legacy-rustfmt.toml) as your rustfmt.toml.
The current `master` branch uses libsyntax (part of the compiler). It is
published as `rustfmt-nightly`. The `syntex` branch uses Syntex instead of
## Quick start
-You must be using a nightly compiler toolchain.
+You must be using the latest nightly compiler toolchain.
To install:
or if you're using [Rustup](https://www.rustup.rs/)
```
+rustup update
rustup run nightly cargo install rustfmt-nightly
```
binary and library targets of your crate.
You'll probably want to specify the write mode. Currently, there are modes for
-diff, replace, overwrite, display, coverage, and checkstyle.
+`diff`, `replace`, `overwrite`, `display`, `coverage`, `checkstyle`, and `plain`.
-* `replace` Is the default and overwrites the original files after creating backups of the files.
-* `overwrite` Overwrites the original files _without_ creating backups.
+* `overwrite` Is the default and overwrites the original files _without_ creating backups.
+* `replace` Overwrites the original files after creating backups of the files.
* `display` Will print the formatted files to stdout.
+* `plain` Also writes to stdout, but with no metadata.
* `diff` Will print a diff between the original files and formatted files to stdout.
Will also exit with an error code if there are any differences.
* `checkstyle` Will output the lines that need to be corrected as a checkstyle XML file,
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`
-`cargo fmt` uses `--write-mode=replace` by default.
+`cargo fmt` uses `--write-mode=overwrite` by default.
If you want to restrict reformatting to specific sets of lines, you can
use the `--file-lines` option. Its argument is a JSON array of objects
--config-help` for the options which are available, or if you prefer to see
visual style previews, [Configurations.md](Configurations.md).
-By default, Rustfmt uses a style which (mostly) conforms to the
-[Rust style guidelines](https://doc.rust-lang.org/1.12.0/style/README.html).
-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.
+By default, Rustfmt uses a style which conforms to the [Rust style guide][style
+guide]. For details that have not yet been formalized through the [style RFC
+process][fmt rfcs], we try to adhere to a style similar to that used in the
+[Rust repo][rust].
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.
* If you're having issues compiling Rustfmt (or compile errors when trying to
install), make sure you have the most recent version of Rust installed.
+* If you get an error like `error while loading shared libraries` while starting
+ up rustfmt you should try the following:
+
+On Linux:
+
+```
+export LD_LIBRARY_PATH=$(rustc --print sysroot)/lib:$LD_LIBRARY_PATH
+```
+
+On MacOS:
+
+```
+export DYLD_LIBRARY_PATH=$(rustc --print sysroot)/lib:$DYLD_LIBRARY_PATH
+```
+
+On Windows (Git Bash/Mingw):
+
+```
+export PATH=$(rustc --print sysroot)/lib/rustlib/x86_64-pc-windows-gnu/lib/:$PATH
+```
+
+(Substitute `x86_64` by `i686` and `gnu` by `msvc` depending on which version of rustc was used to install rustfmt).
## License
Apache License (Version 2.0).
See [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT) for details.
+
+[rust]: https://github.com/rust-lang/rust
+[fmt rfcs]: https://github.com/rust-lang-nursery/fmt-rfcs
+[style guide]: https://github.com/rust-lang-nursery/fmt-rfcs/blob/master/guide/guide.md