```toml
indent_style = "Block"
-reorder_imported_names = true
+reorder_imports = false
```
Each configuration option is either stable or unstable.
## `error_on_line_overflow`
-Error if unable to get all lines within `max_width`
+Error if Rustfmt is unable to get all lines within `max_width`, except for comments and string
+literals. If this happens, then it is a bug in Rustfmt. You might be able to work around the bug by
+refactoring your code to avoid long/complex expressions, usually by extracting a local variable or
+using a shorter name.
-- **Default value**: `true`
+- **Default value**: `false`
- **Possible values**: `true`, `false`
- **Stable**: No
See also [`max_width`](#max_width).
-## `error_on_line_overflow_comments`
+## `error_on_unformatted`
-Error if unable to get all comment lines within `comment_width`.
+Error if unable to get comments or string literals within `max_width`, or they are left with
+trailing whitespaces.
-- **Default value**: `true`
+- **Default value**: `false`
- **Possible values**: `true`, `false`
- **Stable**: No
-See also [`comment_width`](#comment_width).
-
## `fn_args_density`
Argument density in functions
## `where_single_line`
-To force single line where layout
+Forces the `where` clause to be laid out on a single line.
- **Default value**: `false`
- **Possible values**: `true`, `false`
```rust
use foo::{xxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyy, zzzzzzzzzzzzzzzzzz};
-use foo::{aaaaaaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbb, cccccccccccccccccc, dddddddddddddddddd,
- eeeeeeeeeeeeeeeeee, ffffffffffffffffff};
+use foo::{
+ aaaaaaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbb, cccccccccccccccccc, dddddddddddddddddd,
+ eeeeeeeeeeeeeeeeee, ffffffffffffffffff,
+};
```
#### `"Horizontal"`:
```rust
use foo::{xxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyy, zzzzzzzzzzzzzzzzzz};
-use foo::{aaaaaaaaaaaaaaaaaa,
- bbbbbbbbbbbbbbbbbb,
- cccccccccccccccccc,
- dddddddddddddddddd,
- eeeeeeeeeeeeeeeeee,
- ffffffffffffffffff};
+use foo::{
+ aaaaaaaaaaaaaaaaaa,
+ bbbbbbbbbbbbbbbbbb,
+ cccccccccccccccccc,
+ dddddddddddddddddd,
+ eeeeeeeeeeeeeeeeee,
+ ffffffffffffffffff,
+};
```
#### `"Vertical"`:
```rust
-use foo::{xxx,
- yyy,
- zzz};
+use foo::{
+ xxx,
+ yyy,
+ zzz,
+};
-use foo::{aaa,
- bbb,
- ccc,
- ddd,
- eee,
- fff};
+use foo::{
+ aaa,
+ bbb,
+ ccc,
+ ddd,
+ eee,
+ fff,
+};
+```
+
+## `merge_imports`
+
+Merge multiple imports into a single nested import.
+
+- **Default value**: `false`
+- **Possible values**: `true`, `false`
+- **Stable**: No
+
+#### `false` (default):
+
+```rust
+use foo::{a, c, d};
+use foo::{b, g};
+use foo::{e, f};
+```
+
+#### `true`:
+
+```rust
+use foo::{a, b, c, d, e, f, g};
```
fn adipiscing() -> usize {}
```
-## `reorder_imported_names`
+## `remove_nested_parens`
-Reorder lists of names in import statements alphabetically
+Remove nested parens.
-- **Default value**: `false`
+- **Defalut value**: `false`,
- **Possible values**: `true`, `false`
- **Stable**: No
#### `false` (default):
-
```rust
-use super::{lorem, ipsum, dolor, sit};
+fn main() {
+ ((((foo()))));
+}
```
#### `true`:
-
```rust
-use super::{dolor, ipsum, lorem, sit};
+fn main() {
+ (foo());
+}
```
-See also [`reorder_imports`](#reorder_imports).
## `reorder_imports`
-Reorder import statements alphabetically
+Reorder import and extern crate statements alphabetically in groups (a group is
+separated by a newline).
-- **Default value**: `false`
+- **Default value**: `true`
- **Possible values**: `true`, `false`
- **Stable**: No
-#### `false` (default):
-
-```rust
-use lorem;
-use ipsum;
-use dolor;
-use sit;
-```
-
-#### `true`:
+#### `true` (default):
```rust
use dolor;
use sit;
```
-See also [`reorder_imported_names`](#reorder_imported_names), [`reorder_imports_in_group`](#reorder_imports_in_group).
-
-## `reorder_imports_in_group`
-
-Reorder import statements in group
-
-- **Default value**: `false`
-- **Possible values**: `true`, `false`
-- **Stable**: No
-
-**Note:** This option takes effect only when [`reorder_imports`](#reorder_imports) is set to `true`.
-
-#### `false` (default):
+#### `false`:
```rust
-use std::mem;
-use std::io;
-
use lorem;
use ipsum;
use dolor;
use sit;
```
-#### `true`:
-
-```rust
-use std::io;
-use std::mem;
-use dolor;
-use ipsum;
-use lorem;
-use sit;
-```
+## `reorder_modules`
-See also [`reorder_imports`](#reorder_imports).
-
-## `reorder_extern_crates`
-
-Reorder `extern crate` statements alphabetically
+Reorder `mod` declarations alphabetically in group.
- **Default value**: `true`
- **Possible values**: `true`, `false`
- **Stable**: No
-#### `true` (default):
+#### `true` (default)
```rust
-extern crate dolor;
-extern crate ipsum;
-extern crate lorem;
-extern crate sit;
+mod a;
+mod b;
+
+mod dolor;
+mod ipsum;
+mod lorem;
+mod sit;
```
-#### `false`:
+#### `false`
```rust
-extern crate lorem;
-extern crate ipsum;
+mod b;
+mod a;
-extern crate dolor;
-extern crate sit;
+mod lorem;
+mod ipsum;
+mod dolor;
+mod sit;
```
-See also [`reorder_extern_crates_in_group`](#reorder_extern_crates_in_group).
+**Note** `mod` with `#[macro_export]` will not be reordered since that could change the semantic
+of the original source code.
-## `reorder_extern_crates_in_group`
+## `reorder_impl_items`
-Reorder `extern crate` statements in group
+Reorder impl items. `type` and `const` are put first, then macros and methods.
-- **Default value**: `true`
+- **Default value**: `false`
- **Possible values**: `true`, `false`
- **Stable**: No
-#### `true` (default):
-
-**Note:** This only takes effect when [`reorder_extern_crates`](#reorder_extern_crates) is set to `true`.
+#### `false` (default)
```rust
-extern crate a;
-extern crate b;
+struct Dummy;
-extern crate dolor;
-extern crate ipsum;
-extern crate lorem;
-extern crate sit;
+impl Iterator for Dummy {
+ fn next(&mut self) -> Option<Self::Item> {
+ None
+ }
+
+ type Item = i32;
+}
```
-#### `false`:
+#### `true`
+
+```rust
+struct Dummy;
+
+impl Iterator for Dummy {
+ type Item = i32;
-This value has no influence beyond the effect of the [`reorder_extern_crates`](#reorder_extern_crates) option. Set [`reorder_extern_crates`](#reorder_extern_crates) to `false` if you do not want `extern crate` groups to be collapsed and ordered.
+ fn next(&mut self) -> Option<Self::Item> {
+ None
+ }
+}
+```
## `report_todo`
fn lorem() {
let ipsum = dolor();
let sit = vec![
- "amet consectetur adipiscing elit amet consectetur adipiscing elit amet consectetur.",
+ "amet consectetur adipiscing elit amet",
+ "consectetur adipiscing elit amet consectetur.",
];
}
```
fn lorem() {
let ipsum = dolor();
let sit = vec![
- "amet consectetur adipiscing elit amet consectetur adipiscing elit amet consectetur.",
+ "amet consectetur adipiscing elit amet",
+ "consectetur adipiscing elit amet consectetur.",
];
}
```
println!("c");
}
```
+
+## `remove_blank_lines_at_start_or_end_of_block`
+
+Remove blank lines at the start or the end of a block.
+
+- **Default value**: `true`
+- **Possible values**: `true`, `false`
+- **Stable**: No
+
+#### `true`
+
+```rust
+fn foo() {
+ let msg = {
+ let mut str = String::new();
+ str.push_str("hello, ");
+ str.push_str("world!");
+ str
+ };
+ println!("{}", msg);
+}
+```
+
+#### `false`
+
+```rust
+fn foo() {
+
+ let msg = {
+
+ let mut str = String::new();
+ str.push_str("hello, ");
+ str.push_str("world!");
+ str
+
+ };
+ println!("{}", msg);
+
+}
+```
+
+## `required_version`
+
+Require a specific version of rustfmt. If you want to make sure that the
+specific version of rustfmt is used in your CI, use this option.
+
+- **Default value**: `CARGO_PKG_VERSION`
+- **Possible values**: any published version (e.g. `"0.3.8"`)
+- **Stable**: No
+
+## `hide_parse_errors`
+
+Do not show parse errors if the parser failed to parse files.
+
+- **Default value**: `false`
+- **Possible values**: `true`, `false`
+- **Stable**: No
+
+## `color`
+
+Whether to use colored output or not.
+
+- **Default value**: `"Auto"`
+- **Possible values**: "Auto", "Always", "Never"
+- **Stable**: No
+
+## `unstable_features`
+
+Enable unstable features on stable channel.
+
+- **Default value**: `false`
+- **Possible values**: `true`, `false`
+- **Stable**: Yes
+
+## `license_template_path`
+
+Check whether beginnings of files match a license template.
+
+- **Default value**: `""``
+- **Possible values**: path to a license template file
+- **Stable**: No
+
+A license template is a plain text file which is matched literally against the
+beginning of each source file, except for `{}`-delimited blocks, which are
+matched as regular expressions. The following license template therefore
+matches strings like `// Copyright 2017 The Rust Project Developers.`, `//
+Copyright 2018 The Rust Project Developers.`, etc.:
+
+```
+// Copyright {\d+} The Rust Project Developers.
+```
+
+`\{`, `\}` and `\\` match literal braces / backslashes.
+
+## `ignore`
+
+Skip formatting the specified files and directories.
+
+- **Default value**: format every files
+- **Possible values**: See an example below
+- **Stable**: No
+
+### Example
+
+If you want to ignore specific files, put the following to your config file:
+
+```toml
+ignore = [
+ "src/types.rs",
+ "src/foo/bar.rs",
+]
+```
+
+If you want to ignore every file under `examples/`, put the following to your config file:
+
+```toml
+ignore [
+ "examples",
+]
+```