]> git.lizzy.rs Git - rust.git/blobdiff - Configurations.md
Merge pull request #2213 from topecongiro/issue-2212
[rust.git] / Configurations.md
index 68ff64cffb9b41ba7be82fd7a403c2a69773047d..7726193fafe24c7ba6a644a9b283ce3445a988f7 100644 (file)
@@ -5,8 +5,7 @@ Rustfmt is designed to be very configurable. You can create a TOML file called `
 A possible content of `rustfmt.toml` or `.rustfmt.toml` might look like this:
 
 ```toml
-array_indent = "Block"
-array_width = 80
+indent_style = "Block"
 reorder_imported_names = true
 ```
 
@@ -14,53 +13,114 @@ reorder_imported_names = true
 
 Below you find a detailed visual guide on all the supported configuration options of rustfmt:
 
-## `array_horizontal_layout_threshold`
 
-How many elements array must have before rustfmt uses horizontal layout.  
-Use this option to prevent a huge array from being vertically formatted.
+## `indent_style`
 
-- **Default value**: `0`
-- **Possible values**: any positive integer
+Indent on expressions or items.
+
+- **Default value**: `"Block"`
+- **Possible values**: `"Block"`, `"Visual"`
 
-**Note:** A value of `0` results in [`array_indent`](#array_indent) being applied regardless of a line's width.
+### Array
 
-#### `0` (default):
+#### `"Block"` (default):
 
 ```rust
-// Each element will be placed on its own line.
-let a = vec![
-    0,
-    1,
-    2,
-    3,
-    4,
-    ...
-    999,
-    1000,
+let lorem = vec![
+    "ipsum",
+    "dolor",
+    "sit",
+    "amet",
+    "consectetur",
+    "adipiscing",
+    "elit",
 ];
 ```
 
-#### `1000`:
+#### `"Visual"`:
 
 ```rust
-// Each element will be placed on the same line as much as possible.
-let a = vec![
-    0, 1, 2, 3, 4, ...
-    ..., 999, 1000,
-];
+let lorem = vec!["ipsum",
+                 "dolor",
+                 "sit",
+                 "amet",
+                 "consectetur",
+                 "adipiscing",
+                 "elit"];
 ```
 
-## `array_indent`
+### Control flow
 
-Indent on arrays
+#### `"Block"` (default):
 
-- **Default value**: `"Block"`
-- **Possible values**: `"Block"`, `"Visual"`
+```rust
+if lorem_ipsum &&
+    dolor_sit &&
+    amet_consectetur
+{
+    // ...
+}
+```
+
+#### `"Visual"`:
+
+```rust
+if lorem_ipsum &&
+   dolor_sit &&
+   amet_consectetur {
+    // ...
+}
+```
+
+See also: [`control_brace_style`](#control_brace_style).
+
+### Function arguments
 
 #### `"Block"` (default):
 
 ```rust
-let lorem = vec![
+fn lorem() {}
+
+fn lorem(ipsum: usize) {}
+
+fn lorem(
+    ipsum: usize,
+    dolor: usize,
+    sit: usize,
+    amet: usize,
+    consectetur: usize,
+    adipiscing: usize,
+    elit: usize,
+) {
+    // body
+}
+```
+
+#### `"Visual"`:
+
+```rust
+fn lorem() {}
+
+fn lorem(ipsum: usize) {}
+
+fn lorem(ipsum: usize,
+         dolor: usize,
+         sit: usize,
+         amet: usize,
+         consectetur: usize,
+         adipiscing: usize,
+         elit: usize) {
+    // body
+}
+```
+
+### Function calls
+
+#### `"Block"` (default):
+
+```rust
+lorem(
+    "lorem",
     "ipsum",
     "dolor",
     "sit",
@@ -68,41 +128,123 @@ let lorem = vec![
     "consectetur",
     "adipiscing",
     "elit",
-];
+);
 ```
 
 #### `"Visual"`:
 
 ```rust
-let lorem = vec!["ipsum",
-                 "dolor",
-                 "sit",
-                 "amet",
-                 "consectetur",
-                 "adipiscing",
-                 "elit"];
+lorem("lorem",
+      "ipsum",
+      "dolor",
+      "sit",
+      "amet",
+      "consectetur",
+      "adipiscing",
+      "elit");
 ```
 
-## `array_width`
+### Generics
 
-Maximum width of an array literal before falling back to vertical formatting
+#### `"Block"` (default):
 
-- **Default value**: `60`
-- **Possible values**: any positive integer
+```rust
+fn lorem<
+    Ipsum: Eq = usize,
+    Dolor: Eq = usize,
+    Sit: Eq = usize,
+    Amet: Eq = usize,
+    Adipiscing: Eq = usize,
+    Consectetur: Eq = usize,
+    Elit: Eq = usize
+>(
+    ipsum: Ipsum,
+    dolor: Dolor,
+    sit: Sit,
+    amet: Amet,
+    adipiscing: Adipiscing,
+    consectetur: Consectetur,
+    elit: Elit,
+) -> T {
+    // body
+}
+```
+
+#### `"Visual"`:
+
+```rust
+fn lorem<Ipsum: Eq = usize,
+         Dolor: Eq = usize,
+         Sit: Eq = usize,
+         Amet: Eq = usize,
+         Adipiscing: Eq = usize,
+         Consectetur: Eq = usize,
+         Elit: Eq = usize>
+    (ipsum: Ipsum,
+     dolor: Dolor,
+     sit: Sit,
+     amet: Amet,
+     adipiscing: Adipiscing,
+     consectetur: Consectetur,
+     elit: Elit)
+     -> T {
+    // body
+}
+```
+
+#### Struct
+
+#### `"Block"` (default):
+
+```rust
+let lorem = Lorem {
+    ipsum: dolor,
+    sit: amet,
+};
+```
+
+#### `"Visual"`:
+
+```rust
+let lorem = Lorem { ipsum: dolor,
+                    sit: amet, };
+```
+
+See also: [`struct_lit_single_line`](#struct_lit_single_line), [`indent_style`](#indent_style).
+
+### Where predicates
+
+#### `"Block"` (default):
+
+```rust
+fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
+where 
+    Ipsum: Eq,
+    Dolor: Eq,
+    Sit: Eq,
+    Amet: Eq
+{
+    // body
+}
+```
 
-**Note:** A value of `0` results in [`array_indent`](#array_indent) being applied regardless of a line's width.
+#### `"Visual"`:
 
-#### Lines shorter than `array_width`:
 ```rust
-let lorem = vec!["ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit"];
+fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
+    where Ipsum: Eq,
+          Dolor: Eq,
+          Sit: Eq,
+          Amet: Eq
+{
+    // body
+}
 ```
 
-#### Lines longer than `array_width`:
-See [`array_indent`](#array_indent).
 
-## `attributes_on_same_line_as_field`
+## `same_line_attributes`
 
-Try to put attributes on the same line as fields
+Try to put attributes on the same line as fields and variants
 
 - **Default value**: `true`
 - **Possible values**: `true`, `false`
@@ -115,6 +257,12 @@ struct Lorem {
     #[serde(rename = "Dolor")] dolor: usize,
     #[serde(rename = "Amet")] amet: usize,
 }
+
+enum Lorem {
+    #[serde(skip_serializing)] Ipsum,
+    #[serde(skip_serializing)] Dolor,
+    #[serde(skip_serializing)] Amet,
+}
 ```
 
 #### `false`:
@@ -128,11 +276,20 @@ struct Lorem {
     #[serde(rename = "Amet")]
     amet: usize,
 }
+
+enum Lorem {
+    #[serde(skip_serializing)]
+    Ipsum,
+    #[serde(skip_serializing)]
+    Dolor,
+    #[serde(skip_serializing)]
+    Amet,
+}
 ```
 
-## `attributes_on_same_line_as_variant`
+## `use_small_heuristics`
 
-Try to put attributes on the same line as variants
+Whether to use different formatting for items and expressions if they satisfy a heuristic notion of 'small'.
 
 - **Default value**: `true`
 - **Possible values**: `true`, `false`
@@ -141,9 +298,25 @@ Try to put attributes on the same line as variants
 
 ```rust
 enum Lorem {
-    #[serde(skip_serializing)] Ipsum,
-    #[serde(skip_serializing)] Dolor,
-    #[serde(skip_serializing)] Amet,
+    Ipsum,
+    Dolor(bool),
+    Sit { amet: Consectetur, adipiscing: Elit },
+}
+
+fn main() {
+    lorem(
+        "lorem",
+        "ipsum",
+        "dolor",
+        "sit",
+        "amet",
+        "consectetur",
+        "adipiscing",
+    );
+
+    let lorem = Lorem { ipsum: dolor, sit: amet };
+
+    let lorem = if ipsum { dolor } else { sit };
 }
 ```
 
@@ -151,12 +324,27 @@ enum Lorem {
 
 ```rust
 enum Lorem {
-    #[serde(skip_serializing)]
     Ipsum,
-    #[serde(skip_serializing)]
-    Dolor,
-    #[serde(skip_serializing)]
-    Amet,
+    Dolor(bool),
+    Sit {
+        amet: Consectetur,
+        adipiscing: Elit,
+    },
+}
+
+fn main() {
+    lorem("lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing");
+
+    let lorem = Lorem {
+        ipsum: dolor,
+        sit: amet,
+    };
+
+    let lorem = if ipsum {
+        dolor
+    } else {
+        sit
+    };
 }
 ```
 
@@ -227,78 +415,7 @@ let lorem = ipsum.dolor()
                  .elit();
 ```
 
-See also [`chain_width`](#chain_width).
-
-## `chain_width`
-
-Maximum length of a chain to fit on a single line
-
-- **Default value**: `60`
-- **Possible values**: any positive integer
-
-#### Lines shorter than `chain_width`:
-```rust
-let lorem = ipsum.dolor().sit().amet().consectetur().adipiscing().elit();
-```
-
-#### Lines longer than `chain_width`:
-See [`chain_indent`](#chain_indent).
-
-## `chain_split_single_child`
-
-Split a chain with a single child if its length exceeds [`chain_width`](#chain_width).
-
-- **Default value**: `false`
-- **Possible values**: `false`, `true`
-
-#### `false` (default):
-
-```rust
-let files = fs::read_dir("tests/coverage/source").expect("Couldn't read source dir");
-```
-
-#### `true`:
-
-```rust
-let files = fs::read_dir("tests/coverage/source")
-    .expect("Couldn't read source dir");
-```
-
-See also [`chain_width`](#chain_width).
-
-## `closure_block_indent_threshold`
 
-How many lines a closure must have before it is block indented. -1 means never use block indent.
-
-- **Default value**: `7`
-- **Possible values**: `-1`, or any positive integer
-
-#### Closures shorter than `closure_block_indent_threshold`:
-```rust
-lorem_ipsum(|| {
-                println!("lorem");
-                println!("ipsum");
-                println!("dolor");
-                println!("sit");
-                println!("amet");
-            });
-```
-
-#### Closures longer than `closure_block_indent_threshold`:
-```rust
-lorem_ipsum(|| {
-    println!("lorem");
-    println!("ipsum");
-    println!("dolor");
-    println!("sit");
-    println!("amet");
-    println!("consectetur");
-    println!("adipiscing");
-    println!("elit");
-});
-```
-
-**Note**: This option only takes effect when `fn_call_indent` is set to `"Visual"`.
 
 ## `combine_control_expr`
 
@@ -354,6 +471,57 @@ fn example() {
 #### `false`:
 
 ```rust
+fn example() {
+    // If
+    foo!(
+        if x {
+            foo();
+        } else {
+            bar();
+        }
+    );
+
+    // IfLet
+    foo!(
+        if let Some(..) = x {
+            foo();
+        } else {
+            bar();
+        }
+    );
+
+    // While
+    foo!(
+        while x {
+            foo();
+            bar();
+        }
+    );
+
+    // WhileLet
+    foo!(
+        while let Some(..) = x {
+            foo();
+            bar();
+        }
+    );
+
+    // ForLoop
+    foo!(
+        for x in y {
+            foo();
+            bar();
+        }
+    );
+
+    // Loop
+    foo!(
+        loop {
+            foo();
+            bar();
+        }
+    );
+}
 ```
 
 ## `comment_width`
@@ -397,36 +565,6 @@ let (lorem, ipsum, _, _) = (1, 2, 3, 4);
 let (lorem, ipsum, ..) = (1, 2, 3, 4);
 ```
 
-## `control_style`
-
-Indent style for control flow statements
-
-- **Default value**: `"Rfc"`
-- **Possible values**: `"Rfc"`, `"Legacy"`
-
-#### `"Rfc"` (default):
-
-```rust
-if lorem_ipsum &&
-    dolor_sit &&
-    amet_consectetur
-{
-    // ...
-}
-```
-
-#### `"Legacy"`:
-
-```rust
-if lorem_ipsum &&
-   dolor_sit &&
-   amet_consectetur {
-    // ...
-}
-```
-
-See also: [`control_brace_style`](#control_brace_style).
-
 ## `control_brace_style`
 
 Brace style for control flow constructs
@@ -498,7 +636,7 @@ See also [`comment_width`](#comment_width).
 Argument density in functions
 
 - **Default value**: `"Tall"`
-- **Possible values**: `"Compressed"`, `"CompressedIfEmpty"`, `"Tall"`, `"Vertical"`
+- **Possible values**: `"Compressed"`, `"Tall"`, `"Vertical"`
 
 #### `"Tall"` (default):
 
@@ -558,35 +696,6 @@ trait Lorem {
 }
 ```
 
-#### `"CompressedIfEmpty"`:
-
-```rust
-trait Lorem {
-    fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet);
-
-    fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet) {
-        // body
-    }
-
-    fn lorem(
-        ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, consectetur: Consectetur,
-        adipiscing: Adipiscing, elit: Elit,
-    );
-
-    fn lorem(
-        ipsum: Ipsum,
-        dolor: Dolor,
-        sit: Sit,
-        amet: Amet,
-        consectetur: Consectetur,
-        adipiscing: Adipiscing,
-        elit: Elit,
-    ) {
-        // body
-    }
-}
-```
-
 #### `"Vertical"`:
 
 ```rust
@@ -623,92 +732,16 @@ trait Lorem {
 }
 ```
 
-## `fn_args_indent`
 
-Layout of function arguments and tuple structs
+## `brace_style`
 
-- **Default value**: `"Block"`
-- **Possible values**: `"Block"`, `"Visual"`
-
-#### `"Block"` (default):
-
-```rust
-fn lorem() {}
-
-fn lorem(ipsum: usize) {}
-
-fn lorem(
-    ipsum: usize,
-    dolor: usize,
-    sit: usize,
-    amet: usize,
-    consectetur: usize,
-    adipiscing: usize,
-    elit: usize,
-) {
-    // body
-}
-```
-
-#### `"Visual"`:
-
-```rust
-fn lorem() {}
-
-fn lorem(ipsum: usize) {}
-
-fn lorem(ipsum: usize,
-         dolor: usize,
-         sit: usize,
-         amet: usize,
-         consectetur: usize,
-         adipiscing: usize,
-         elit: usize) {
-    // body
-}
-```
-
-## `fn_args_paren_newline`
-
-If function argument parenthesis goes on a newline
-
-- **Default value**: `false`
-- **Possible values**: `true`, `false`
-
-#### `false` (default):
-
-```rust
-fn lorem(
-    ipsum: Ipsum,
-    dolor: Dolor,
-    sit: Sit,
-    amet: Amet,
-) -> DolorSitAmetConsecteturAdipiscingElitLoremIpsumDolorSitAmetConsecteturAdipiscingElit {
-    // body
-}
-```
-
-#### `true`:
-
-```rust
-fn lorem
-    (
-    ipsum: Ipsum,
-    dolor: Dolor,
-    sit: Sit,
-    amet: Amet,
-) -> DolorSitAmetConsecteturAdipiscingElitLoremIpsumDolorSitAmetConsecteturAdipiscingElit {
-    // body
-}
-```
-
-## `fn_brace_style`
-
-Brace style for functions
+Brace style for items
 
 - **Default value**: `"SameLineWhere"`
 - **Possible values**: `"AlwaysNextLine"`, `"PreferSameLine"`, `"SameLineWhere"`
 
+### Functions
+
 #### `"SameLineWhere"` (default):
 
 ```rust
@@ -767,62 +800,54 @@ where
 }
 ```
 
-## `fn_call_indent`
-
-Indentation for function calls, etc.
+### Structs and enums
 
-- **Default value**: `"Block"`
-- **Possible values**: `"Block"`, `"Visual"`
-
-#### `"Block"` (default):
+#### `"SameLineWhere"` (default):
 
 ```rust
-lorem(
-    "lorem",
-    "ipsum",
-    "dolor",
-    "sit",
-    "amet",
-    "consectetur",
-    "adipiscing",
-    "elit",
-);
-```
-
-#### `"Visual"`:
+struct Lorem {
+    ipsum: bool,
+}
 
-```rust
-lorem("lorem",
-      "ipsum",
-      "dolor",
-      "sit",
-      "amet",
-      "consectetur",
-      "adipiscing",
-      "elit");
+struct Dolor<T>
+    where T: Eq
+{
+    sit: T,
+}
 ```
 
-## `fn_call_width`
+#### `"AlwaysNextLine"`:
 
-Maximum width of the args of a function call before falling back to vertical formatting
+```rust
+struct Lorem
+{
+    ipsum: bool,
+}
 
-- **Default value**: `60`
-- **Possible values**: any positive integer
+struct Dolor<T>
+    where T: Eq
+{
+    sit: T,
+}
+```
 
-**Note:** A value of `0` results in vertical formatting being applied regardless of a line's width.
+#### `"PreferSameLine"`:
 
-#### Function call shorter than `fn_call_width`:
 ```rust
-lorem("lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit");
-```
+struct Lorem {
+    ipsum: bool,
+}
 
-#### Function call longer than `fn_call_width`:
+struct Dolor<T>
+    where T: Eq {
+    sit: T,
+}
+```
 
-See [`fn_call_indent`](#fn_call_indent).
 
-## `fn_empty_single_line`
+## `empty_item_single_line`
 
-Put empty-body functions on a single line
+Put empty-body functions and impls on a single line
 
 - **Default value**: `true`
 - **Possible values**: `true`, `false`
@@ -831,6 +856,8 @@ Put empty-body functions on a single line
 
 ```rust
 fn lorem() {}
+
+impl Lorem {}
 ```
 
 #### `false`:
@@ -838,52 +865,13 @@ fn lorem() {}
 ```rust
 fn lorem() {
 }
-```
-
-See also [`control_brace_style`](#control_brace_style).
-
-## `fn_return_indent`
 
-Location of return type in function declaration
-
-- **Default value**: `"WithArgs"`
-- **Possible values**: `"WithArgs"`, `"WithWhereClause"`
-
-#### `"WithArgs"` (default):
-
-```rust
-fn lorem(ipsum: Ipsum,
-         dolor: Dolor,
-         sit: Sit,
-         amet: Amet,
-         consectetur: Consectetur,
-         adipiscing: Adipiscing)
-         -> Elit
-    where Ipsum: Eq
-{
-    // body
+impl Lorem {
 }
-
 ```
 
-#### `"WithWhereClause"`:
+See also [`brace_style`](#brace_style), [`control_brace_style`](#control_brace_style).
 
-```rust
-fn lorem(ipsum: Ipsum,
-         dolor: Dolor,
-         sit: Sit,
-         amet: Amet,
-         consectetur: Consectetur,
-         adipiscing: Adipiscing)
-    -> Elit
-    where Ipsum: Eq
-{
-    // body
-}
-
-```
-
-**Note**: This option only takes effect when `fn_call_indent` is set to `"Visual"`.
 
 ## `fn_single_line`
 
@@ -935,178 +923,62 @@ extern "C" {
 }
 ```
 
-#### `false`:
-
-```rust
-extern {
-    pub static lorem: c_int;
-}
-```
-
-## `force_format_strings`
-
-Always format string literals
-
-- **Default value**: `false`
-- **Possible values**: `true`, `false`
-
-See [`format_strings`](#format_strings).
-
-See also [`max_width`](#max_width).
-
-## `format_strings`
-
-Format string literals where necessary
-
-- **Default value**: `false`
-- **Possible values**: `true`, `false`
-
-#### `false` (default):
-
-```rust
-let lorem = "ipsum dolor sit amet consectetur adipiscing elit lorem ipsum dolor sit";
-```
-
-#### `true`:
-
-```rust
-let lorem =
-    "ipsum dolor sit amet consectetur \
-     adipiscing elit lorem ipsum dolor sit";
-```
-
-See also [`force_format_strings`](#force_format_strings), [`max_width`](#max_width).
-
-## `generics_indent`
-
-Indentation of generics
-
-- **Default value**: `"Block"`
-- **Possible values**: `"Block"`, `"Visual"`
-
-#### `"Block"` (default):
-
-```rust
-fn lorem<
-    Ipsum: Eq = usize,
-    Dolor: Eq = usize,
-    Sit: Eq = usize,
-    Amet: Eq = usize,
-    Adipiscing: Eq = usize,
-    Consectetur: Eq = usize,
-    Elit: Eq = usize
->(
-    ipsum: Ipsum,
-    dolor: Dolor,
-    sit: Sit,
-    amet: Amet,
-    adipiscing: Adipiscing,
-    consectetur: Consectetur,
-    elit: Elit,
-) -> T {
-    // body
-}
-```
-
-#### `"Visual"`:
-
-```rust
-fn lorem<Ipsum: Eq = usize,
-         Dolor: Eq = usize,
-         Sit: Eq = usize,
-         Amet: Eq = usize,
-         Adipiscing: Eq = usize,
-         Consectetur: Eq = usize,
-         Elit: Eq = usize>
-    (ipsum: Ipsum,
-     dolor: Dolor,
-     sit: Sit,
-     amet: Amet,
-     adipiscing: Adipiscing,
-     consectetur: Consectetur,
-     elit: Elit)
-     -> T {
-    // body
-}
-```
-
-## `hard_tabs`
-
-Use tab characters for indentation, spaces for alignment
-
-- **Default value**: `false`
-- **Possible values**: `true`, `false`
-
-#### `false` (default):
-
-```rust
-fn lorem() -> usize {
-    42 // spaces before 42
-}
-```
-
-#### `true`:
+#### `false`:
 
 ```rust
-fn lorem() -> usize {
-       42 // tabs before 42
+extern {
+    pub static lorem: c_int;
 }
 ```
 
-See also: [`tab_spaces`](#tab_spaces).
-
-## `impl_empty_single_line`
+## `format_strings`
 
-Put empty-body implementations on a single line
+Format string literals where necessary
 
-- **Default value**: `true`
+- **Default value**: `false`
 - **Possible values**: `true`, `false`
 
-#### `true` (default):
+#### `false` (default):
 
 ```rust
-impl Lorem {}
+let lorem = "ipsum dolor sit amet consectetur adipiscing elit lorem ipsum dolor sit";
 ```
 
-#### `false`:
+#### `true`:
 
 ```rust
-impl Lorem {
-}
+let lorem =
+    "ipsum dolor sit amet consectetur \
+     adipiscing elit lorem ipsum dolor sit";
 ```
 
-See also [`item_brace_style`](#item_brace_style).
+See also [`max_width`](#max_width).
 
-## `indent_match_arms`
+## `hard_tabs`
 
-Indent match arms instead of keeping them at the same indentation level as the match keyword
+Use tab characters for indentation, spaces for alignment
 
-- **Default value**: `true`
+- **Default value**: `false`
 - **Possible values**: `true`, `false`
 
-#### `true` (default):
+#### `false` (default):
 
 ```rust
-match lorem {
-    Lorem::Ipsum => (),
-    Lorem::Dolor => (),
-    Lorem::Sit => (),
-    Lorem::Amet => (),
+fn lorem() -> usize {
+    42 // spaces before 42
 }
 ```
 
-#### `false`:
+#### `true`:
 
 ```rust
-match lorem {
-Lorem::Ipsum => (),
-Lorem::Dolor => (),
-Lorem::Sit => (),
-Lorem::Amet => (),
+fn lorem() -> usize {
+       42 // tabs before 42
 }
 ```
 
-See also: [`match_block_trailing_comma`](#match_block_trailing_comma), [`wrap_match_arms`](#wrap_match_arms).
+See also: [`tab_spaces`](#tab_spaces).
+
 
 ## `imports_indent`
 
@@ -1189,96 +1061,6 @@ use foo::{aaa,
           fff};
 ```
 
-## `item_brace_style`
-
-Brace style for structs and enums
-
-- **Default value**: `"SameLineWhere"`
-- **Possible values**: `"AlwaysNextLine"`, `"PreferSameLine"`, `"SameLineWhere"`
-
-#### `"SameLineWhere"` (default):
-
-```rust
-struct Lorem {
-    ipsum: bool,
-}
-
-struct Dolor<T>
-    where T: Eq
-{
-    sit: T,
-}
-```
-
-#### `"AlwaysNextLine"`:
-
-```rust
-struct Lorem
-{
-    ipsum: bool,
-}
-
-struct Dolor<T>
-    where T: Eq
-{
-    sit: T,
-}
-```
-
-#### `"PreferSameLine"`:
-
-```rust
-struct Lorem {
-    ipsum: bool,
-}
-
-struct Dolor<T>
-    where T: Eq {
-    sit: T,
-}
-```
-
-## `match_arm_forces_newline`
-
-Consistently put match arms (block based or not) in a newline.
-
-- **Default value**: `false`
-- **Possible values**: `true`, `false`
-
-#### `false` (default):
-
-```rust
-match x {
-    // a non-empty block
-    X0 => {
-        f();
-    }
-    // an empty block
-    X1 => {}
-    // a non-block
-    X2 => println!("ok"),
-}
-```
-
-#### `true`:
-
-```rust
-match x {
-    // a non-empty block
-    X0 => {
-        f();
-    }
-    // an empty block
-    X1 =>
-        {}
-    // a non-block
-    X2 => {
-        println!("ok")
-    }
-}
-```
-
-See also: [`wrap_match_arms`](#wrap_match_arms).
 
 ## `match_block_trailing_comma`
 
@@ -1309,40 +1091,7 @@ match lorem {
 }
 ```
 
-See also: [`indent_match_arms`](#indent_match_arms), [`trailing_comma`](#trailing_comma), [`wrap_match_arms`](#wrap_match_arms).
-
-## `match_pattern_separator_break_point`
-
-Put a match sub-patterns' separator (`|`) in front or back.
-
-- **Default value**: `"Back"`
-- **Possible values**: `"Back"`, `"Front"`
-
-#### `"Back"` (default):
-
-```rust
-match m {
-    Variant::Tag |
-    Variant::Tag2 |
-    Variant::Tag3 |
-    Variant::Tag4 |
-    Variant::Tag5 |
-    Variant::Tag6 => {}
-}
-```
-
-#### `Front`:
-
-```rust
-match m {
-    Variant::Tag
-    | Variant::Tag2
-    | Variant::Tag3
-    | Variant::Tag4
-    | Variant::Tag5
-    | Variant::Tag6 => {}
-}
-```
+See also: [`trailing_comma`](#trailing_comma), [`match_arm_blocks`](#match_arm_blocks).
 
 ## `max_width`
 
@@ -1376,9 +1125,9 @@ pub enum Foo {}
 pub enum Foo {}
 ```
 
-## `multiline_closure_forces_block`
+## `force_multiline_blocks`
 
-Force multiline closure bodies to be wrapped in a block
+Force multiline closure and match arm bodies to be wrapped in a block
 
 - **Default value**: `false`
 - **Possible values**: `false`, `true`
@@ -1390,6 +1139,13 @@ result.and_then(|maybe_value| match maybe_value {
     None => ...,
     Some(value) => ...,
 })
+
+match lorem {
+    None => if ipsum {
+        println!("Hello World");
+    },
+    Some(dolor) => ...,
+}
 ```
 
 #### `true`:
@@ -1402,29 +1158,7 @@ result.and_then(|maybe_value| {
         Some(value) => ...,
     }
 })
-```
-
-## `multiline_match_arm_forces_block`
 
-Force multiline match arm bodies to be wrapped in a block
-
-- **Default value**: `false`
-- **Possible values**: `false`, `true`
-
-#### `false` (default):
-
-```rust
-match lorem {
-    None => if ipsum {
-        println!("Hello World");
-    },
-    Some(dolor) => ...,
-}
-```
-
-#### `true`:
-
-```rust
 match lorem {
     None => {
         if ipsum {
@@ -1435,6 +1169,7 @@ match lorem {
 }
 ```
 
+
 ## `newline_style`
 
 Unix or Windows line endings
@@ -1640,30 +1375,6 @@ it contains a `#X` (with `X` being a number) in parentheses following the
 
 See also [`report_todo`](#report_todo).
 
-## `single_line_if_else_max_width`
-
-Maximum line length for single line if-else expressions.
-
-- **Default value**: `50`
-- **Possible values**: any positive integer
-
-**Note:** A value of `0` results in if-else expressions being broken regardless of their line's width.
-
-#### Lines shorter than `single_line_if_else_max_width`:
-```rust
-let lorem = if ipsum { dolor } else { sit };
-```
-
-#### Lines longer than `single_line_if_else_max_width`:
-```rust
-let lorem = if ipsum {
-    dolor
-} else {
-    sit
-};
-```
-
-See also: [`control_brace_style`](#control_brace_style).
 
 ## `skip_children`
 
@@ -1672,88 +1383,9 @@ Don't reformat out of line modules
 - **Default value**: `false`
 - **Possible values**: `true`, `false`
 
-## `space_after_bound_colon`
-
-Leave a space after the colon in a trait or lifetime bound
-
-- **Default value**: `true`
-- **Possible values**: `true`, `false`
-
-#### `true` (default):
-
-```rust
-fn lorem<T: Eq>(t: T) {
-    // body
-}
-```
-
-#### `false`:
-
-```rust
-fn lorem<T:Eq>(t: T) {
-    // body
-}
-```
-
-See also: [`space_before_bound`](#space_before_bound).
-
-## `struct_field_align_threshold`
-
-The maximum diff of width between struct fields to be aligned with each other.
-
-- **Default value** : 0
-- **Possible values**: any positive integer
-
-#### `0` (default):
-
-```rust
-struct Foo {
-    x: u32,
-    yy: u32,
-    zzz: u32,
-}
-```
-
-#### `20`:
-
-```rust
-struct Foo {
-    x:   u32,
-    yy:  u32,
-    zzz: u32,
-}
-```
-
-## `space_after_struct_lit_field_colon`
-
-Leave a space after the colon in a struct literal field
-
-- **Default value**: `true`
-- **Possible values**: `true`, `false`
-
-#### `true` (default):
-
-```rust
-let lorem = Lorem {
-    ipsum: dolor,
-    sit: amet,
-};
-```
-
-#### `false`:
-
-```rust
-let lorem = Lorem {
-    ipsum:dolor,
-    sit:amet,
-};
-```
-
-See also: [`space_before_struct_lit_field_colon`](#space_before_struct_lit_field_colon).
+## `space_after_colon`
 
-## `space_after_type_annotation_colon`
-
-Leave a space after the colon in a type annotation
+Leave a space after the colon.
 
 - **Default value**: `true`
 - **Possible values**: `true`, `false`
@@ -1762,96 +1394,85 @@ Leave a space after the colon in a type annotation
 
 ```rust
 fn lorem<T: Eq>(t: T) {
-    let ipsum: Dolor = sit;
+    let lorem: Dolor = Lorem {
+        ipsum: dolor,
+        sit: amet,
+    };
 }
 ```
 
 #### `false`:
 
 ```rust
-fn lorem<T: Eq>(t:T) {
-    let ipsum:Dolor = sit;
-}
-```
-
-See also: [`space_before_type_annotation`](#space_before_type_annotation).
-
-## `space_before_bound`
-
-Leave a space before the colon in a trait or lifetime bound
-
-- **Default value**: `false`
-- **Possible values**: `true`, `false`
-
-#### `false` (default):
-
-```rust
-fn lorem<T: Eq>(t: T) {
-    let ipsum: Dolor = sit;
-}
-```
-
-#### `true`:
-
-```rust
-fn lorem<T : Eq>(t: T) {
-    let ipsum: Dolor = sit;
+fn lorem<T:Eq>(t:T) {
+    let lorem:Dolor = Lorem {
+        ipsum:dolor,
+        sit:amet,
+    };
 }
 ```
 
-See also: [`space_after_bound_colon`](#space_after_bound_colon).
+See also: [`space_before_colon`](#space_before_colon).
 
-## `space_before_struct_lit_field_colon`
+## `space_before_colon`
 
-Leave a space before the colon in a struct literal field
+Leave a space before the colon.
 
 - **Default value**: `false`
 - **Possible values**: `true`, `false`
 
 #### `false` (default):
-
-```rust
-let lorem = Lorem {
-    ipsum: dolor,
-    sit: amet,
-};
+
+```rust
+fn lorem<T: Eq>(t: T) {
+    let lorem: Dolor = Lorem {
+        ipsum: dolor,
+        sit: amet,
+    };
+}
 ```
 
 #### `true`:
 
 ```rust
-let lorem = Lorem {
-    ipsum : dolor,
-    sit : amet,
-};
+fn lorem<T : Eq>(t : T) {
+    let lorem : Dolor = Lorem {
+        ipsum : dolor,
+        sit : amet,
+    };
+}
 ```
 
-See also: [`space_after_struct_lit_field_colon`](#space_after_struct_lit_field_colon).
+See also: [`space_after_colon`](#space_after_colon).
 
-## `space_before_type_annotation`
+## `struct_field_align_threshold`
 
-Leave a space before the colon in a type annotation
+The maximum diff of width between struct fields to be aligned with each other.
 
-- **Default value**: `false`
-- **Possible values**: `true`, `false`
+- **Default value** : 0
+- **Possible values**: any positive integer
 
-#### `false` (default):
+#### `0` (default):
 
 ```rust
-fn lorem<T: Eq>(t: T) {
-    let ipsum: Dolor = sit;
+struct Foo {
+    x: u32,
+    yy: u32,
+    zzz: u32,
 }
 ```
 
-#### `true`:
+#### `20`:
 
 ```rust
-fn lorem<T: Eq>(t : T) {
-    let ipsum : Dolor = sit;
+struct Foo {
+    x:   u32,
+    yy:  u32,
+    zzz: u32,
 }
 ```
 
-See also: [`space_after_type_annotation_colon`](#space_after_type_annotation_colon).
+```
 
 ## `spaces_around_ranges`
 
@@ -1872,7 +1493,7 @@ let lorem = 0..10;
 let lorem = 0 .. 10;
 ```
 
-## `spaces_within_angle_brackets`
+## `spaces_within_parens_and_brackets`
 
 Put spaces within non-empty generic arguments
 
@@ -1895,9 +1516,9 @@ fn lorem< T: Eq >(t: T) {
 }
 ```
 
-See also: [`spaces_within_parens`](#spaces_within_parens), [`spaces_within_square_brackets`](#spaces_within_square_brackets).
+See also: [`spaces_within_parens_and_brackets`](#spaces_within_parens_and_brackets), [`spaces_within_parens_and_brackets`](#spaces_within_parens_and_brackets).
 
-## `spaces_within_parens`
+## `spaces_within_parens_and_brackets`
 
 Put spaces within non-empty parentheses
 
@@ -1920,9 +1541,9 @@ fn lorem<T: Eq>( t: T ) {
 }
 ```
 
-See also: [`spaces_within_angle_brackets`](#spaces_within_angle_brackets), [`spaces_within_square_brackets`](#spaces_within_square_brackets).
+See also: [`spaces_within_parens_and_brackets`](#spaces_within_parens_and_brackets), [`spaces_within_parens_and_brackets`](#spaces_within_parens_and_brackets).
 
-## `spaces_within_square_brackets`
+## `spaces_within_parens_and_brackets`
 
 Put spaces within non-empty square brackets
 
@@ -1941,40 +1562,22 @@ let lorem: [usize; 2] = [ipsum, dolor];
 let lorem: [ usize; 2 ] = [ ipsum, dolor ];
 ```
 
-See also: [`spaces_within_parens`](#spaces_within_parens), [`spaces_within_angle_brackets`](#spaces_within_angle_brackets).
+See also: [`spaces_within_parens_and_brackets`](#spaces_within_parens_and_brackets), [`spaces_within_parens_and_brackets`](#spaces_within_parens_and_brackets).
 
-## `struct_lit_multiline_style`
+## `struct_lit_single_line`
 
-Multiline style on literal structs
+Put small struct literals on a single line
 
-- **Default value**: `"PreferSingle"`
-- **Possible values**: `"ForceMulti"`, `"PreferSingle"`
+- **Default value**: `true`
+- **Possible values**: `true`, `false`
 
-#### `"PreferSingle"` (default):
+#### `true` (default):
 
 ```rust
 let lorem = Lorem { ipsum: dolor, sit: amet };
 ```
 
-#### `"ForceMulti"`:
-
-```rust
-let lorem = Lorem {
-    ipsum: dolor,
-    sit: amet,
-};
-```
-
-See also: [`struct_lit_indent`](#struct_lit_indent), [`struct_lit_width`](#struct_lit_width).
-
-## `struct_lit_indent`
-
-Style of struct definition
-
-- **Default value**: `"Block"`
-- **Possible values**: `"Block"`, `"Visual"`
-
-#### `"Block"` (default):
+#### `false`:
 
 ```rust
 let lorem = Lorem {
@@ -1983,63 +1586,8 @@ let lorem = Lorem {
 };
 ```
 
-#### `"Visual"`:
-
-```rust
-let lorem = Lorem { ipsum: dolor,
-                    sit: amet, };
-```
-
-See also: [`struct_lit_multiline_style`](#struct_lit_multiline_style), [`struct_lit_indent`](#struct_lit_indent).
-
-## `struct_lit_width`
-
-Maximum width in the body of a struct lit before falling back to vertical formatting
-
-- **Default value**: `18`
-- **Possible values**: any positive integer
-
-**Note:** A value of `0` results in vertical formatting being applied regardless of a line's width.
-
-#### Lines shorter than `struct_lit_width`:
-```rust
-let lorem = Lorem { ipsum: dolor, sit: amet };
-```
-
-#### Lines longer than `struct_lit_width`:
-See [`struct_lit_indent`](#struct_lit_indent).
-
-See also: [`struct_lit_multiline_style`](#struct_lit_multiline_style), [`struct_lit_indent`](#struct_lit_indent).
+See also: [`indent_style`](#indent_style).
 
-## `struct_variant_width`
-
-Maximum width in the body of a struct variant before falling back to vertical formatting
-
-- **Default value**: `35`
-- **Possible values**: any positive integer
-
-**Note:** A value of `0` results in vertical formatting being applied regardless of a line's width.
-
-#### Struct variants shorter than `struct_variant_width`:
-```rust
-enum Lorem {
-    Ipsum,
-    Dolor(bool),
-    Sit { amet: Consectetur, adipiscing: Elit },
-}
-```
-
-#### Struct variants longer than `struct_variant_width`:
-```rust
-enum Lorem {
-    Ipsum,
-    Dolor(bool),
-    Sit {
-        amet: Consectetur,
-        adipiscing: Elit,
-    },
-}
-```
 
 ## `tab_spaces`
 
@@ -2072,35 +1620,6 @@ fn lorem() {
 
 See also: [`hard_tabs`](#hard_tabs).
 
-## `take_source_hints`
-
-Retain some formatting characteristics from the source code
-
-- **Default value**: `false`
-- **Possible values**: `true`, `false`
-
-#### `false` (default):
-
-```rust
-lorem
-    .ipsum()
-    .dolor(|| { sit.amet().consectetur().adipiscing().elit(); });
-```
-
-#### `true`:
-
-```rust
-lorem
-    .ipsum()
-    .dolor(|| {
-               sit.amet()
-                   .consectetur()
-                   .adipiscing()
-                   .elit();
-           });
-```
-
-Note: This only applies if the call chain within the inner closure had already been formatted on separate lines before running rustfmt.
 
 ## `trailing_comma`
 
@@ -2216,236 +1735,6 @@ let lorem = try!(ipsum.map(|dolor|dolor.sit()));
 let lorem = ipsum.map(|dolor| dolor.sit())?;
 ```
 
-## `where_density`
-
-Density of a where clause.
-
-- **Default value**: `"Vertical"`
-- **Possible values**: `"Compressed"`, `"CompressedIfEmpty"`, `"Tall"`, `"Vertical"`
-
-#### `"Vertical"` (default):
-
-```rust
-trait Lorem {
-    fn ipsum<Dolor>(dolor: Dolor) -> Sit
-        where Dolor: Eq;
-
-    fn ipsum<Dolor>(dolor: Dolor) -> Sit
-        where Dolor: Eq
-    {
-        // body
-    }
-}
-```
-
-**Note:** `where_density = "Vertical"` currently produces the same output as `where_density = "Tall"`.
-
-#### `"CompressedIfEmpty"`:
-
-```rust
-trait Lorem {
-    fn ipsum<Dolor>(dolor: Dolor) -> Sit
-    where Dolor: Eq;
-
-    fn ipsum<Dolor>(dolor: Dolor) -> Sit
-    where
-        Dolor: Eq,
-    {
-        // body
-    }
-}
-```
-
-#### `"Compressed"`:
-
-```rust
-trait Lorem {
-    fn ipsum<Dolor>(dolor: Dolor) -> Sit
-    where Dolor: Eq;
-
-    fn ipsum<Dolor>(dolor: Dolor) -> Sit
-    where Dolor: Eq {
-        // body
-    }
-}
-```
-
-#### `"Tall"`:
-
-```rust
-trait Lorem {
-    fn ipsum<Dolor>(dolor: Dolor) -> Sit
-    where
-        Dolor: Eq;
-
-    fn ipsum<Dolor>(dolor: Dolor) -> Sit
-    where
-        Dolor: Eq,
-    {
-        // body
-    }
-}
-```
-
-**Note:** `where_density = "Tall"` currently produces the same output as `where_density = "Vertical"`.
-
-See also: [`where_layout`](#where_layout), [`where_pred_indent`](#where_pred_indent), [`where_style`](#where_style).
-
-## `where_layout`
-
-Element layout inside a where clause
-
-- **Default value**: `"Vertical"`
-- **Possible values**: `"Horizontal"`, `"HorizontalVertical"`, `"Mixed"`, `"Vertical"`
-
-#### `"Vertical"` (default):
-
-```rust
-fn lorem<Ipsum, Dolor>(ipsum: Ipsum, dolor: Dolor)
-    where Ipsum: IpsumDolorSitAmet,
-          Dolor: DolorSitAmetConsectetur
-{
-    // body
-}
-
-fn lorem<Ipsum, Dolor, Sit, Amet>(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet)
-    where Ipsum: IpsumDolorSitAmet,
-          Dolor: DolorSitAmetConsectetur,
-          Sit: SitAmetConsecteturAdipiscing,
-          Amet: AmetConsecteturAdipiscingElit
-{
-    // body
-}
-```
-
-#### `"Horizontal"`:
-
-```rust
-fn lorem<Ipsum, Dolor>(ipsum: Ipsum, dolor: Dolor)
-    where Ipsum: IpsumDolorSitAmet, Dolor: DolorSitAmetConsectetur
-{
-    // body
-}
-
-fn lorem<Ipsum, Dolor, Sit, Amet>(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet)
-    where Ipsum: IpsumDolorSitAmet, Dolor: DolorSitAmetConsectetur, Sit: SitAmetConsecteturAdipiscing, Amet: AmetConsecteturAdipiscingElit
-{
-    // body
-}
-```
-
-#### `"HorizontalVertical"`:
-
-```rust
-fn lorem<Ipsum, Dolor>(ipsum: Ipsum, dolor: Dolor)
-    where Ipsum: IpsumDolorSitAmet, Dolor: DolorSitAmetConsectetur
-{
-    // body
-}
-
-fn lorem<Ipsum, Dolor, Sit, Amet>(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet)
-    where Ipsum: IpsumDolorSitAmet,
-          Dolor: DolorSitAmetConsectetur,
-          Sit: SitAmetConsecteturAdipiscing,
-          Amet: AmetConsecteturAdipiscingElit
-{
-    // body
-}
-```
-
-#### `"Mixed"`:
-
-```rust
-fn lorem<Ipsum, Dolor>(ipsum: Ipsum, dolor: Dolor)
-    where Ipsum: IpsumDolorSitAmet, Dolor: DolorSitAmetConsectetur
-{
-    // body
-}
-
-fn lorem<Ipsum, Dolor, Sit, Amet>(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet)
-    where Ipsum: IpsumDolorSitAmet, Dolor: DolorSitAmetConsectetur,
-          Sit: SitAmetConsecteturAdipiscing, Amet: AmetConsecteturAdipiscingElit
-{
-    // body
-}
-```
-
-**Note**: This option only takes effect when `where_style` is set to `"Legacy"`.
-
-See also: [`where_density`](#where_density), [`where_pred_indent`](#where_pred_indent), [`where_style`](#where_style).
-
-## `where_pred_indent`
-
-Indentation style of a where predicate
-
-- **Default value**: `"Visual"`
-- **Possible values**: `"Block"`, `"Visual"`
-
-#### `"Visual"` (default):
-
-```rust
-fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
-    where Ipsum: Eq,
-          Dolor: Eq,
-          Sit: Eq,
-          Amet: Eq
-{
-    // body
-}
-```
-
-#### `"Block"`:
-
-```rust
-fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
-    where Ipsum: Eq,
-        Dolor: Eq,
-        Sit: Eq,
-        Amet: Eq
-{
-    // body
-}
-```
-
-**Note**: This option only takes effect when `where_style` is set to `"Legacy"`.
-
-See also: [`where_density`](#where_density), [`where_layout`](#where_layout), [`where_style`](#where_style).
-
-## `where_style`
-
-Overall strategy for where clauses
-
-- **Default value**: `"Rfc"`
-- **Possible values**: `"Rfc"`, `"Legacy"`
-
-#### `"Rfc"` (default):
-
-```rust
-fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
-where
-    Ipsum: Eq,
-    Dolor: Eq,
-    Sit: Eq,
-    Amet: Eq,
-{
-    // body
-}
-```
-
-#### `"Legacy"`:
-
-```rust
-fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
-    where Ipsum: Eq,
-          Dolor: Eq,
-          Sit: Eq,
-          Amet: Eq
-{
-    // body
-}
-```
-
-See also: [`where_density`](#where_density), [`where_layout`](#where_layout), [`where_pred_indent`](#where_pred_indent).
 
 ## `wrap_comments`
 
@@ -2470,7 +1759,7 @@ Break comments to fit on the line
 // commodo consequat.
 ```
 
-## `wrap_match_arms`
+## `match_arm_blocks`
 
 Wrap the body of arms in blocks when it does not fit on the same line with the pattern of arms
 
@@ -2498,7 +1787,7 @@ match lorem {
 }
 ```
 
-See also: [`indent_match_arms`](#indent_match_arms), [`match_block_trailing_comma`](#match_block_trailing_comma).
+See also: [`match_block_trailing_comma`](#match_block_trailing_comma).
 
 ## `write_mode`