3 Rustfmt is designed to be very configurable. You can create a TOML file called `rustfmt.toml` or `.rustfmt.toml`, place it in the project or any other parent directory and it will apply the options in that file.
5 A possible content of `rustfmt.toml` or `.rustfmt.toml` might look like this:
10 reorder_imported_names = true
13 # Configuration Options
15 Below you find a detailed visual guide on all the supported configuration options of rustfmt:
17 ## `array_horizontal_layout_threshold`
19 How many elements array must have before rustfmt uses horizontal layout.
20 Use this option to prevent a huge array from being vertically formatted.
22 - **Default value**: `0`
23 - **Possible values**: any positive integer
25 **Note:** A value of `0` results in [`array_layout`](#array_layout) being applied regardless of a line's width.
30 // Each element will be placed on its own line.
46 // Each element will be placed on the same line as much as possible.
57 - **Default value**: `"Block"`
58 - **Possible values**: `"Block"`, `"Visual"`
60 #### `"Block"` (default):
77 let lorem = vec!["ipsum",
88 Maximum width of an array literal before falling back to vertical formatting
90 - **Default value**: `60`
91 - **Possible values**: any positive integer
93 **Note:** A value of `0` results in [`array_layout`](#array_layout) being applied regardless of a line's width.
95 #### Lines shorter than `array_width`:
97 let lorem = vec!["ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit"];
100 #### Lines longer than `array_width`:
101 See [`array_layout`](#array_layout).
103 ## `attributes_on_same_line_as_field`
105 Try to put attributes on the same line as fields
107 - **Default value**: `true`
108 - **Possible values**: `true`, `false`
110 #### `true` (default):
114 #[serde(rename = "Ipsum")] ipsum: usize,
115 #[serde(rename = "Dolor")] dolor: usize,
116 #[serde(rename = "Amet")] amet: usize,
124 #[serde(rename = "Ipsum")]
126 #[serde(rename = "Dolor")]
128 #[serde(rename = "Amet")]
133 ## `attributes_on_same_line_as_variant`
135 Try to put attributes on the same line as variants
137 - **Default value**: `true`
138 - **Possible values**: `true`, `false`
140 #### `true` (default):
144 #[serde(skip_serializing)] Ipsum,
145 #[serde(skip_serializing)] Dolor,
146 #[serde(skip_serializing)] Amet,
154 #[serde(skip_serializing)]
156 #[serde(skip_serializing)]
158 #[serde(skip_serializing)]
165 Where to put a binary operator when a binary expression goes multiline.
167 - **Default value**: `"Front"`
168 - **Possible values**: `"Front"`, `"Back"`
170 #### `"Front"` (default):
181 let range = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
182 ..bbbbbbbbbbbbbbbbbbbbbbbbbbbbb;
196 let range = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..
197 bbbbbbbbbbbbbbbbbbbbbbbbbbbbb;
204 - **Default value**: `"Block"`
205 - **Possible values**: `"Block"`, `"Visual"`
207 #### `"Block"` (default):
222 let lorem = ipsum.dolor()
230 See also [`chain_one_line_max`](#chain_one_line_max).
232 ## `chain_one_line_max`
234 Maximum length of a chain to fit on a single line
236 - **Default value**: `60`
237 - **Possible values**: any positive integer
239 #### Lines shorter than `chain_one_line_max`:
241 let lorem = ipsum.dolor().sit().amet().consectetur().adipiscing().elit();
244 #### Lines longer than `chain_one_line_max`:
245 See [`chain_indent`](#chain_indent).
247 ## `chain_split_single_child`
249 Split a chain with a single child if its length exceeds [`chain_one_line_max`](#chain_one_line_max).
251 - **Default value**: `false`
252 - **Possible values**: `false`, `true`
254 #### `false` (default):
257 let files = fs::read_dir("tests/coverage/source").expect("Couldn't read source dir");
263 let files = fs::read_dir("tests/coverage/source")
264 .expect("Couldn't read source dir");
267 See also [`chain_one_line_max`](#chain_one_line_max).
269 ## `closure_block_indent_threshold`
271 How many lines a closure must have before it is block indented. -1 means never use block indent.
273 - **Default value**: `7`
274 - **Possible values**: `-1`, or any positive integer
276 #### Closures shorter than `closure_block_indent_threshold`:
287 #### Closures longer than `closure_block_indent_threshold`:
295 println!("consectetur");
296 println!("adipiscing");
301 **Note**: This option only takes effect when `fn_call_style` is set to `"Visual"`.
303 ## `combine_control_expr`
305 Combine control expressions with function calls.
307 - **Default value**: `true`
308 - **Possible values**: `true`, `false`
310 #### `true` (default):
322 foo!(if let Some(..) = x {
335 foo!(while let Some(..) = x {
361 Maximum length of comments. No effect unless`wrap_comments = true`.
363 - **Default value**: `80`
364 - **Possible values**: any positive integer
366 **Note:** A value of `0` results in [`wrap_comments`](#wrap_comments) being applied regardless of a line's width.
368 #### Comments shorter than `comment_width`:
370 // Lorem ipsum dolor sit amet, consectetur adipiscing elit.
373 #### Comments longer than `comment_width`:
375 // Lorem ipsum dolor sit amet,
376 // consectetur adipiscing elit.
379 See also [`wrap_comments`](#wrap_comments).
381 ## `condense_wildcard_suffixes`
383 Replace strings of _ wildcards by a single .. in tuple patterns
385 - **Default value**: `false`
386 - **Possible values**: `true`, `false`
388 #### `false` (default):
391 let (lorem, ipsum, _, _) = (1, 2, 3, 4);
397 let (lorem, ipsum, ..) = (1, 2, 3, 4);
402 Indent style for control flow statements
404 - **Default value**: `"Rfc"`
405 - **Possible values**: `"Rfc"`, `"Legacy"`
407 #### `"Rfc"` (default):
428 See also: [`control_brace_style`](#control_brace_style).
430 ## `control_brace_style`
432 Brace style for control flow constructs
434 - **Default value**: `"AlwaysSameLine"`
435 - **Possible values**: `"AlwaysNextLine"`, `"AlwaysSameLine"`, `"ClosingNextLine"`
437 #### `"AlwaysSameLine"` (default):
447 #### `"AlwaysNextLine"`:
460 #### `"ClosingNextLine"`:
471 ## `disable_all_formatting`
473 Don't reformat anything
475 - **Default value**: `false`
476 - **Possible values**: `true`, `false`
478 ## `error_on_line_overflow`
480 Error if unable to get all lines within max_width
482 - **Default value**: `true`
483 - **Possible values**: `true`, `false`
485 See also [`max_width`](#max_width).
489 Argument density in functions
491 - **Default value**: `"Tall"`
492 - **Possible values**: `"Compressed"`, `"CompressedIfEmpty"`, `"Tall"`, `"Vertical"`
494 #### `"Tall"` (default):
498 fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet);
500 fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet) {
509 consectetur: onsectetur,
510 adipiscing: Adipiscing,
519 consectetur: onsectetur,
520 adipiscing: Adipiscing,
532 fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet);
534 fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet) {
539 ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, consectetur: Consectetur,
540 adipiscing: Adipiscing, elit: Elit,
544 ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, consectetur: Consectetur,
545 adipiscing: Adipiscing, elit: Elit,
552 #### `"CompressedIfEmpty"`:
556 fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet);
558 fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet) {
563 ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, consectetur: Consectetur,
564 adipiscing: Adipiscing, elit: Elit,
572 consectetur: onsectetur,
573 adipiscing: Adipiscing,
585 fn lorem(ipsum: Ipsum,
590 fn lorem(ipsum: Ipsum,
597 fn lorem(ipsum: Ipsum,
601 consectetur: onsectetur,
602 adipiscing: Adipiscing,
605 fn lorem(ipsum: Ipsum,
609 consectetur: onsectetur,
610 adipiscing: Adipiscing,
619 Layout of function arguments and tuple structs
621 - **Default value**: `"Block"`
622 - **Possible values**: `"Block"`, `"Visual"`
624 #### `"Block"` (default):
629 fn lorem(ipsum: usize) {}
649 fn lorem(ipsum: usize) {}
651 fn lorem(ipsum: usize,
662 ## `fn_args_paren_newline`
664 If function argument parenthesis goes on a newline
666 - **Default value**: `false`
667 - **Possible values**: `true`, `false`
669 #### `false` (default):
677 ) -> DolorSitAmetConsecteturAdipiscingElitLoremIpsumDolorSitAmetConsecteturAdipiscingElit {
691 ) -> DolorSitAmetConsecteturAdipiscingElitLoremIpsumDolorSitAmetConsecteturAdipiscingElit {
698 Brace style for functions
700 - **Default value**: `"SameLineWhere"`
701 - **Possible values**: `"AlwaysNextLine"`, `"PreferSameLine"`, `"SameLineWhere"`
703 #### `"SameLineWhere"` (default):
710 fn lorem(ipsum: usize) {
714 fn lorem<T>(ipsum: T)
716 T: Add + Sub + Mul + Div,
722 #### `"AlwaysNextLine"`:
730 fn lorem(ipsum: usize)
735 fn lorem<T>(ipsum: T)
737 T: Add + Sub + Mul + Div,
743 #### `"PreferSameLine"`:
750 fn lorem(ipsum: usize) {
754 fn lorem<T>(ipsum: T)
756 T: Add + Sub + Mul + Div, {
763 Indentation for function calls, etc.
765 - **Default value**: `"Block"`
766 - **Possible values**: `"Block"`, `"Visual"`
768 #### `"Block"` (default):
798 Maximum width of the args of a function call before falling back to vertical formatting
800 - **Default value**: `60`
801 - **Possible values**: any positive integer
803 **Note:** A value of `0` results in vertical formatting being applied regardless of a line's width.
805 #### Function call shorter than `fn_call_width`:
807 lorem("lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit");
810 #### Function call longer than `fn_call_width`:
812 See [`fn_call_style`](#fn_call_style).
814 ## `fn_empty_single_line`
816 Put empty-body functions on a single line
818 - **Default value**: `true`
819 - **Possible values**: `true`, `false`
821 #### `true` (default):
834 See also [`control_brace_style`](#control_brace_style).
836 ## `fn_return_indent`
838 Location of return type in function declaration
840 - **Default value**: `"WithArgs"`
841 - **Possible values**: `"WithArgs"`, `"WithWhereClause"`
843 #### `"WithArgs"` (default):
846 fn lorem(ipsum: Ipsum,
850 consectetur: Consectetur,
851 adipiscing: Adipiscing)
860 #### `"WithWhereClause"`:
863 fn lorem(ipsum: Ipsum,
867 consectetur: Consectetur,
868 adipiscing: Adipiscing)
877 **Note**: This option only takes effect when `fn_call_style` is set to `"Visual"`.
881 Put single-expression functions on a single line
883 - **Default value**: `false`
884 - **Possible values**: `true`, `false`
886 #### `false` (default):
889 fn lorem() -> usize {
893 fn lorem() -> usize {
902 fn lorem() -> usize { 42 }
904 fn lorem() -> usize {
910 See also [`control_brace_style`](#control_brace_style).
912 ## `force_explicit_abi`
914 Always print the abi for extern items
916 - **Default value**: `true`
917 - **Possible values**: `true`, `false`
919 **Note:** Non-"C" ABIs are always printed. If `false` then "C" is removed.
921 #### `true` (default):
925 pub static lorem: c_int;
933 pub static lorem: c_int;
937 ## `force_format_strings`
939 Always format string literals
941 - **Default value**: `false`
942 - **Possible values**: `true`, `false`
944 See [`format_strings`](#format_strings).
946 See also [`max_width`](#max_width).
950 Format string literals where necessary
952 - **Default value**: `false`
953 - **Possible values**: `true`, `false`
955 #### `false` (default):
958 let lorem = "ipsum dolor sit amet consectetur adipiscing elit lorem ipsum dolor sit";
965 "ipsum dolor sit amet consectetur \
966 adipiscing elit lorem ipsum dolor sit";
969 See also [`force_format_strings`](#force_format_strings), [`max_width`](#max_width).
973 Indentation of generics
975 - **Default value**: `"Block"`
976 - **Possible values**: `"Block"`, `"Visual"`
978 #### `"Block"` (default):
986 Adipiscing: Eq = usize,
987 Consectetur: Eq = usize,
994 adipiscing: Adipiscing,
995 consectetur: Consectetur,
1005 fn lorem<Ipsum: Eq = usize,
1009 Adipiscing: Eq = usize,
1010 Consectetur: Eq = usize,
1016 adipiscing: Adipiscing,
1017 consectetur: Consectetur,
1026 Use tab characters for indentation, spaces for alignment
1028 - **Default value**: `false`
1029 - **Possible values**: `true`, `false`
1031 #### `false` (default):
1034 fn lorem() -> usize {
1035 42 // spaces before 42
1042 fn lorem() -> usize {
1043 42 // tabs before 42
1047 See also: [`tab_spaces`](#tab_spaces).
1049 ## `impl_empty_single_line`
1051 Put empty-body implementations on a single line
1053 - **Default value**: `true`
1054 - **Possible values**: `true`, `false`
1056 #### `true` (default):
1069 See also [`item_brace_style`](#item_brace_style).
1071 ## `indent_match_arms`
1073 Indent match arms instead of keeping them at the same indentation level as the match keyword
1075 - **Default value**: `true`
1076 - **Possible values**: `true`, `false`
1078 #### `true` (default):
1100 See also: [`match_block_trailing_comma`](#match_block_trailing_comma), [`wrap_match_arms`](#wrap_match_arms).
1104 Indent style of imports
1106 - **Default Value**: `"Visual"`
1107 - **Possible values**: `"Block"`, `"Visual"`
1109 #### `"Visual"` (default):
1127 See also: [`imports_layout`](#imports_layout).
1131 Item layout inside a imports block
1133 - **Default value**: "Mixed"
1134 - **Possible values**: "Horizontal", "HorizontalVertical", "Mixed", "Vertical"
1136 #### `"Mixed"` (default):
1139 use foo::{xxx, yyy, zzz};
1141 use foo::{aaa, bbb, ccc,
1145 #### `"Horizontal"`:
1147 **Note**: This option forces to put everything on one line and may exceeds `max_width`.
1150 use foo::{xxx, yyy, zzz};
1152 use foo::{aaa, bbb, ccc, ddd, eee, fff};
1155 #### `"HorizontalVertical"`
1158 use foo::{xxx, yyy, zzz};
1183 ## `item_brace_style`
1185 Brace style for structs and enums
1187 - **Default value**: `"SameLineWhere"`
1188 - **Possible values**: `"AlwaysNextLine"`, `"PreferSameLine"`, `"SameLineWhere"`
1190 #### `"SameLineWhere"` (default):
1204 #### `"AlwaysNextLine"`:
1219 #### `"PreferSameLine"`:
1232 ## `match_block_trailing_comma`
1234 Put a trailing comma after a block based match arm (non-block arms are not affected)
1236 - **Default value**: `false`
1237 - **Possible values**: `true`, `false`
1239 #### `false` (default):
1246 Lorem::Dolor => println!("dolor"),
1257 Lorem::Dolor => println!("dolor"),
1261 See also: [`indent_match_arms`](#indent_match_arms), [`trailing_comma`](#trailing_comma), [`wrap_match_arms`](#wrap_match_arms).
1263 ## `match_pattern_separator_break_point`
1265 Put a match sub-patterns' separator (`|`) in front or back.
1267 - **Default value**: `"Back"`
1268 - **Possible values**: `"Back"`, `"Front"`
1270 #### `"Back"` (default):
1292 | Variant::Tag6 => {}
1298 Maximum width of each line
1300 - **Default value**: `100`
1301 - **Possible values**: any positive integer
1303 See also [`error_on_line_overflow`](#error_on_line_overflow).
1307 Merge multiple derives into a single one.
1309 - **Default value**: `true`
1310 - **Possible values**: `true`, `false`
1312 #### `true` (default):
1315 #[derive(Eq, PartialEq, Debug, Copy, Clone)]
1322 #[derive(Eq, PartialEq)]
1324 #[derive(Copy, Clone)]
1328 ## `multiline_closure_forces_block`
1330 Force multiline closure bodies to be wrapped in a block
1332 - **Default value**: `false`
1333 - **Possible values**: `false`, `true`
1335 #### `false` (default):
1338 result.and_then(|maybe_value| match maybe_value {
1348 result.and_then(|maybe_value| {
1356 ## `multiline_match_arm_forces_block`
1358 Force multiline match arm bodies to be wrapped in a block
1360 - **Default value**: `false`
1361 - **Possible values**: `false`, `true`
1363 #### `false` (default):
1368 println!("Hello World");
1380 println!("Hello World");
1389 Unix or Windows line endings
1391 - **Default value**: `"Unix"`
1392 - **Possible values**: `"Native"`, `"Unix"`, `"Windows"`
1394 ## `normalize_comments`
1396 Convert /* */ comments to // comments where possible
1398 - **Default value**: `false`
1399 - **Possible values**: `true`, `false`
1401 #### `false` (default):
1405 fn dolor() -> usize {}
1408 fn adipiscing() -> usize {}
1415 fn dolor() -> usize {}
1418 fn adipiscing() -> usize {}
1421 ## `reorder_imported_names`
1423 Reorder lists of names in import statements alphabetically
1425 - **Default value**: `false`
1426 - **Possible values**: `true`, `false`
1428 #### `false` (default):
1431 use super::{lorem, ipsum, dolor, sit};
1437 use super::{dolor, ipsum, lorem, sit};
1440 See also [`reorder_imports`](#reorder_imports).
1442 ## `reorder_imports`
1444 Reorder import statements alphabetically
1446 - **Default value**: `false`
1447 - **Possible values**: `true`, `false`
1449 #### `false` (default):
1467 See also [`reorder_imported_names`](#reorder_imported_names), [`reorder_imports_in_group`](#reorder_imports_in_group).
1469 ## `reorder_imports_in_group`
1471 Reorder import statements in group
1473 - **Default value**: `false`
1474 - **Possible values**: `true`, `false`
1476 **Note:** This option takes effect only when [`reorder_imports`](#reorder_imports) is set to `true`.
1478 #### `false` (default):
1502 See also [`reorder_imports`](#reorder_imports).
1504 ## `single_line_if_else_max_width`
1506 Maximum line length for single line if-else expressions.
1508 - **Default value**: `50`
1509 - **Possible values**: any positive integer
1511 **Note:** A value of `0` results in if-else expressions being broken regardless of their line's width.
1513 #### Lines shorter than `single_line_if_else_max_width`:
1515 let lorem = if ipsum { dolor } else { sit };
1518 #### Lines longer than `single_line_if_else_max_width`:
1520 let lorem = if ipsum {
1527 See also: [`control_brace_style`](#control_brace_style).
1531 Don't reformat out of line modules
1533 - **Default value**: `false`
1534 - **Possible values**: `true`, `false`
1536 ## `space_after_bound_colon`
1538 Leave a space after the colon in a trait or lifetime bound
1540 - **Default value**: `true`
1541 - **Possible values**: `true`, `false`
1543 #### `true` (default):
1546 fn lorem<T: Eq>(t: T) {
1554 fn lorem<T:Eq>(t: T) {
1559 See also: [`space_before_bound`](#space_before_bound).
1561 ## `struct_field_align_threshold`
1563 The maximum diff of width between struct fields to be aligned with each other.
1565 - **Default value** : 0
1566 - **Possible values**: any positive integer
1588 ## `space_after_struct_lit_field_colon`
1590 Leave a space after the colon in a struct literal field
1592 - **Default value**: `true`
1593 - **Possible values**: `true`, `false`
1595 #### `true` (default):
1613 See also: [`space_before_struct_lit_field_colon`](#space_before_struct_lit_field_colon).
1615 ## `space_after_type_annotation_colon`
1617 Leave a space after the colon in a type annotation
1619 - **Default value**: `true`
1620 - **Possible values**: `true`, `false`
1622 #### `true` (default):
1625 fn lorem<T: Eq>(t: T) {
1626 let ipsum: Dolor = sit;
1633 fn lorem<T: Eq>(t:T) {
1634 let ipsum:Dolor = sit;
1638 See also: [`space_before_type_annotation`](#space_before_type_annotation).
1640 ## `space_before_bound`
1642 Leave a space before the colon in a trait or lifetime bound
1644 - **Default value**: `false`
1645 - **Possible values**: `true`, `false`
1647 #### `false` (default):
1650 fn lorem<T: Eq>(t: T) {
1651 let ipsum: Dolor = sit;
1658 fn lorem<T : Eq>(t: T) {
1659 let ipsum: Dolor = sit;
1663 See also: [`space_after_bound_colon`](#space_after_bound_colon).
1665 ## `space_before_struct_lit_field_colon`
1667 Leave a space before the colon in a struct literal field
1669 - **Default value**: `false`
1670 - **Possible values**: `true`, `false`
1672 #### `false` (default):
1690 See also: [`space_after_struct_lit_field_colon`](#space_after_struct_lit_field_colon).
1692 ## `space_before_type_annotation`
1694 Leave a space before the colon in a type annotation
1696 - **Default value**: `false`
1697 - **Possible values**: `true`, `false`
1699 #### `false` (default):
1702 fn lorem<T: Eq>(t: T) {
1703 let ipsum: Dolor = sit;
1710 fn lorem<T: Eq>(t : T) {
1711 let ipsum : Dolor = sit;
1715 See also: [`space_after_type_annotation_colon`](#space_after_type_annotation_colon).
1717 ## `spaces_around_ranges`
1719 Put spaces around the .. and ... range operators
1721 - **Default value**: `false`
1722 - **Possible values**: `true`, `false`
1724 #### `false` (default):
1733 let lorem = 0 .. 10;
1736 ## `spaces_within_angle_brackets`
1738 Put spaces within non-empty generic arguments
1740 - **Default value**: `false`
1741 - **Possible values**: `true`, `false`
1743 #### `false` (default):
1746 fn lorem<T: Eq>(t: T) {
1754 fn lorem< T: Eq >(t: T) {
1759 See also: [`spaces_within_parens`](#spaces_within_parens), [`spaces_within_square_brackets`](#spaces_within_square_brackets).
1761 ## `spaces_within_parens`
1763 Put spaces within non-empty parentheses
1765 - **Default value**: `false`
1766 - **Possible values**: `true`, `false`
1768 #### `false` (default):
1771 fn lorem<T: Eq>(t: T) {
1772 let lorem = (ipsum, dolor);
1779 fn lorem<T: Eq>( t: T ) {
1780 let lorem = ( ipsum, dolor );
1784 See also: [`spaces_within_angle_brackets`](#spaces_within_angle_brackets), [`spaces_within_square_brackets`](#spaces_within_square_brackets).
1786 ## `spaces_within_square_brackets`
1788 Put spaces within non-empty square brackets
1790 - **Default value**: `false`
1791 - **Possible values**: `true`, `false`
1793 #### `false` (default):
1796 let lorem: [usize; 2] = [ipsum, dolor];
1802 let lorem: [ usize; 2 ] = [ ipsum, dolor ];
1805 See also: [`spaces_within_parens`](#spaces_within_parens), [`spaces_within_angle_brackets`](#spaces_within_angle_brackets).
1807 ## `struct_lit_multiline_style`
1809 Multiline style on literal structs
1811 - **Default value**: `"PreferSingle"`
1812 - **Possible values**: `"ForceMulti"`, `"PreferSingle"`
1814 #### `"PreferSingle"` (default):
1817 let lorem = Lorem { ipsum: dolor, sit: amet };
1820 #### `"ForceMulti"`:
1829 See also: [`struct_lit_style`](#struct_lit_style), [`struct_lit_width`](#struct_lit_width).
1831 ## `struct_lit_style`
1833 Style of struct definition
1835 - **Default value**: `"Block"`
1836 - **Possible values**: `"Block"`, `"Visual"`
1838 #### `"Block"` (default):
1850 let lorem = Lorem { ipsum: dolor,
1854 See also: [`struct_lit_multiline_style`](#struct_lit_multiline_style), [`struct_lit_style`](#struct_lit_style).
1856 ## `struct_lit_width`
1858 Maximum width in the body of a struct lit before falling back to vertical formatting
1860 - **Default value**: `18`
1861 - **Possible values**: any positive integer
1863 **Note:** A value of `0` results in vertical formatting being applied regardless of a line's width.
1865 #### Lines shorter than `struct_lit_width`:
1867 let lorem = Lorem { ipsum: dolor, sit: amet };
1870 #### Lines longer than `struct_lit_width`:
1871 See [`struct_lit_style`](#struct_lit_style).
1873 See also: [`struct_lit_multiline_style`](#struct_lit_multiline_style), [`struct_lit_style`](#struct_lit_style).
1875 ## `struct_variant_width`
1877 Maximum width in the body of a struct variant before falling back to vertical formatting
1879 - **Default value**: `35`
1880 - **Possible values**: any positive integer
1882 **Note:** A value of `0` results in vertical formatting being applied regardless of a line's width.
1884 #### Struct variants shorter than `struct_variant_width`:
1889 Sit { amet: Consectetur, adipiscing: Elit },
1893 #### Struct variants longer than `struct_variant_width`:
1907 Number of spaces per tab
1909 - **Default value**: `4`
1910 - **Possible values**: any positive integer
1916 let ipsum = dolor();
1918 "amet consectetur adipiscing elit."
1927 let ipsum = dolor();
1929 "amet consectetur adipiscing elit."
1934 See also: [`hard_tabs`](#hard_tabs).
1936 ## `take_source_hints`
1938 Retain some formatting characteristics from the source code
1940 - **Default value**: `false`
1941 - **Possible values**: `true`, `false`
1943 #### `false` (default):
1948 .dolor(|| { sit.amet().consectetur().adipiscing().elit(); });
1964 Note: This only applies if the call chain within the inner closure had already been formatted on separate lines before running rustfmt.
1968 How to handle trailing commas for lists
1970 - **Default value**: `"Vertical"`
1971 - **Possible values**: `"Always"`, `"Never"`, `"Vertical"`
1973 #### `"Vertical"` (default):
1976 let Lorem { ipsum, dolor, sit } = amet;
1990 let Lorem { ipsum, dolor, sit, } = amet;
2004 let Lorem { ipsum, dolor, sit } = amet;
2015 See also: [`match_block_trailing_comma`](#match_block_trailing_comma).
2017 ## `trailing_semicolon`
2019 Add trailing semicolon after break, continue and return
2021 - **Default value**: `true`
2022 - **Possible values**: `true`, `false`
2024 #### `true` (default):
2038 ## `type_punctuation_density`
2040 Determines if `+` or `=` are wrapped in spaces in the punctuation of types
2042 - **Default value**: `"Wide"`
2043 - **Possible values**: `"Compressed"`, `"Wide"`
2045 #### `"Wide"` (default):
2048 fn lorem<Ipsum: Dolor + Sit = Amet>() {
2053 #### `"Compressed"`:
2056 fn lorem<Ipsum: Dolor+Sit=Amet>() {
2061 ## `use_try_shorthand`
2063 Replace uses of the try! macro by the ? shorthand
2065 - **Default value**: `false`
2066 - **Possible values**: `true`, `false`
2068 #### `false` (default):
2071 let lorem = try!(ipsum.map(|dolor|dolor.sit()));
2077 let lorem = ipsum.map(|dolor| dolor.sit())?;
2082 Density of a where clause.
2084 - **Default value**: `"CompressedIfEmpty"`
2085 - **Possible values**: `"Compressed"`, `"CompressedIfEmpty"`, `"Tall"`, `"Vertical"`
2087 #### `"CompressedIfEmpty"` (default):
2091 fn ipsum<Dolor>(dolor: Dolor) -> Sit
2094 fn ipsum<Dolor>(dolor: Dolor) -> Sit
2103 #### `"Compressed"`:
2107 fn ipsum<Dolor>(dolor: Dolor) -> Sit
2110 fn ipsum<Dolor>(dolor: Dolor) -> Sit
2121 fn ipsum<Dolor>(dolor: Dolor) -> Sit
2125 fn ipsum<Dolor>(dolor: Dolor) -> Sit
2134 **Note:** `where_density = "Tall"` currently produces the same output as `where_density = "Vertical"`.
2140 fn ipsum<Dolor>(dolor: Dolor) -> Sit
2143 fn ipsum<Dolor>(dolor: Dolor) -> Sit
2151 **Note:** `where_density = "Vertical"` currently produces the same output as `where_density = "Tall"`.
2153 See also: [`where_layout`](#where_layout), [`where_pred_indent`](#where_pred_indent), [`where_style`](#where_style).
2157 Element layout inside a where clause
2159 - **Default value**: `"Vertical"`
2160 - **Possible values**: `"Horizontal"`, `"HorizontalVertical"`, `"Mixed"`, `"Vertical"`
2162 #### `"Vertical"` (default):
2165 fn lorem<Ipsum, Dolor>(ipsum: Ipsum, dolor: Dolor)
2166 where Ipsum: IpsumDolorSitAmet,
2167 Dolor: DolorSitAmetConsectetur
2172 fn lorem<Ipsum, Dolor, Sit, Amet>(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet)
2173 where Ipsum: IpsumDolorSitAmet,
2174 Dolor: DolorSitAmetConsectetur,
2175 Sit: SitAmetConsecteturAdipiscing,
2176 Amet: AmetConsecteturAdipiscingElit
2182 #### `"Horizontal"`:
2185 fn lorem<Ipsum, Dolor>(ipsum: Ipsum, dolor: Dolor)
2186 where Ipsum: IpsumDolorSitAmet, Dolor: DolorSitAmetConsectetur
2191 fn lorem<Ipsum, Dolor, Sit, Amet>(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet)
2192 where Ipsum: IpsumDolorSitAmet, Dolor: DolorSitAmetConsectetur, Sit: SitAmetConsecteturAdipiscing, Amet: AmetConsecteturAdipiscingElit
2198 #### `"HorizontalVertical"`:
2201 fn lorem<Ipsum, Dolor>(ipsum: Ipsum, dolor: Dolor)
2202 where Ipsum: IpsumDolorSitAmet, Dolor: DolorSitAmetConsectetur
2207 fn lorem<Ipsum, Dolor, Sit, Amet>(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet)
2208 where Ipsum: IpsumDolorSitAmet,
2209 Dolor: DolorSitAmetConsectetur,
2210 Sit: SitAmetConsecteturAdipiscing,
2211 Amet: AmetConsecteturAdipiscingElit
2220 fn lorem<Ipsum, Dolor>(ipsum: Ipsum, dolor: Dolor)
2221 where Ipsum: IpsumDolorSitAmet, Dolor: DolorSitAmetConsectetur
2226 fn lorem<Ipsum, Dolor, Sit, Amet>(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet)
2227 where Ipsum: IpsumDolorSitAmet, Dolor: DolorSitAmetConsectetur,
2228 Sit: SitAmetConsecteturAdipiscing, Amet: AmetConsecteturAdipiscingElit
2234 **Note**: This option only takes effect when `where_style` is set to `"Legacy"`.
2236 See also: [`where_density`](#where_density), [`where_pred_indent`](#where_pred_indent), [`where_style`](#where_style).
2238 ## `where_pred_indent`
2240 Indentation style of a where predicate
2242 - **Default value**: `"Visual"`
2243 - **Possible values**: `"Block"`, `"Visual"`
2245 #### `"Visual"` (default):
2248 fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
2261 fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
2271 **Note**: This option only takes effect when `where_style` is set to `"Legacy"`.
2273 See also: [`where_density`](#where_density), [`where_layout`](#where_layout), [`where_style`](#where_style).
2277 Overall strategy for where clauses
2279 - **Default value**: `"Rfc"`
2280 - **Possible values**: `"Rfc"`, `"Legacy"`
2282 #### `"Rfc"` (default):
2285 fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
2299 fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
2309 See also: [`where_density`](#where_density), [`where_layout`](#where_layout), [`where_pred_indent`](#where_pred_indent).
2313 Break comments to fit on the line
2315 - **Default value**: `false`
2316 - **Possible values**: `true`, `false`
2318 #### `false` (default):
2321 // Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
2327 // Lorem ipsum dolor sit amet, consectetur adipiscing elit,
2328 // sed do eiusmod tempor incididunt ut labore et dolore
2329 // magna aliqua. Ut enim ad minim veniam, quis nostrud
2330 // exercitation ullamco laboris nisi ut aliquip ex ea
2331 // commodo consequat.
2334 ## `wrap_match_arms`
2336 Wrap the body of arms in blocks when it does not fit on the same line with the pattern of arms
2338 - **Default value**: `true`
2339 - **Possible values**: `true`, `false`
2341 #### `true` (default):
2346 foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(x)
2348 false => println!("{}", sit),
2357 foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(x),
2358 false => println!("{}", sit),
2362 See also: [`indent_match_arms`](#indent_match_arms), [`match_block_trailing_comma`](#match_block_trailing_comma).
2366 What Write Mode to use when none is supplied: Replace, Overwrite, Display, Diff, Coverage
2368 - **Default value**: `"Overwrite"`
2369 - **Possible values**: `"Checkstyle"`, `"Coverage"`, `"Diff"`, `"Display"`, `"Overwrite"`, `"Plain"`, `"Replace"`