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_indent`](#array_indent) 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_indent`](#array_indent) 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_indent`](#array_indent).
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_width`](#chain_width).
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_width`:
241 let lorem = ipsum.dolor().sit().amet().consectetur().adipiscing().elit();
244 #### Lines longer than `chain_width`:
245 See [`chain_indent`](#chain_indent).
247 ## `chain_split_single_child`
249 Split a chain with a single child if its length exceeds [`chain_width`](#chain_width).
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_width`](#chain_width).
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_indent` 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).
487 ## `error_on_line_overflow_comments`
489 Error if unable to get all comment lines within `comment_width`.
491 - **Default value**: `true`
492 - **Possible values**: `true`, `false`
494 See also [`comment_width`](#comment_width).
498 Argument density in functions
500 - **Default value**: `"Tall"`
501 - **Possible values**: `"Compressed"`, `"CompressedIfEmpty"`, `"Tall"`, `"Vertical"`
503 #### `"Tall"` (default):
507 fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet);
509 fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet) {
518 consectetur: Consectetur,
519 adipiscing: Adipiscing,
528 consectetur: Consectetur,
529 adipiscing: Adipiscing,
541 fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet);
543 fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet) {
548 ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, consectetur: Consectetur,
549 adipiscing: Adipiscing, elit: Elit,
553 ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, consectetur: Consectetur,
554 adipiscing: Adipiscing, elit: Elit,
561 #### `"CompressedIfEmpty"`:
565 fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet);
567 fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet) {
572 ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, consectetur: Consectetur,
573 adipiscing: Adipiscing, elit: Elit,
581 consectetur: Consectetur,
582 adipiscing: Adipiscing,
594 fn lorem(ipsum: Ipsum,
599 fn lorem(ipsum: Ipsum,
606 fn lorem(ipsum: Ipsum,
610 consectetur: Consectetur,
611 adipiscing: Adipiscing,
614 fn lorem(ipsum: Ipsum,
618 consectetur: Consectetur,
619 adipiscing: Adipiscing,
628 Layout of function arguments and tuple structs
630 - **Default value**: `"Block"`
631 - **Possible values**: `"Block"`, `"Visual"`
633 #### `"Block"` (default):
638 fn lorem(ipsum: usize) {}
658 fn lorem(ipsum: usize) {}
660 fn lorem(ipsum: usize,
671 ## `fn_args_paren_newline`
673 If function argument parenthesis goes on a newline
675 - **Default value**: `false`
676 - **Possible values**: `true`, `false`
678 #### `false` (default):
686 ) -> DolorSitAmetConsecteturAdipiscingElitLoremIpsumDolorSitAmetConsecteturAdipiscingElit {
700 ) -> DolorSitAmetConsecteturAdipiscingElitLoremIpsumDolorSitAmetConsecteturAdipiscingElit {
707 Brace style for functions
709 - **Default value**: `"SameLineWhere"`
710 - **Possible values**: `"AlwaysNextLine"`, `"PreferSameLine"`, `"SameLineWhere"`
712 #### `"SameLineWhere"` (default):
719 fn lorem(ipsum: usize) {
723 fn lorem<T>(ipsum: T)
725 T: Add + Sub + Mul + Div,
731 #### `"AlwaysNextLine"`:
739 fn lorem(ipsum: usize)
744 fn lorem<T>(ipsum: T)
746 T: Add + Sub + Mul + Div,
752 #### `"PreferSameLine"`:
759 fn lorem(ipsum: usize) {
763 fn lorem<T>(ipsum: T)
765 T: Add + Sub + Mul + Div, {
772 Indentation for function calls, etc.
774 - **Default value**: `"Block"`
775 - **Possible values**: `"Block"`, `"Visual"`
777 #### `"Block"` (default):
807 Maximum width of the args of a function call before falling back to vertical formatting
809 - **Default value**: `60`
810 - **Possible values**: any positive integer
812 **Note:** A value of `0` results in vertical formatting being applied regardless of a line's width.
814 #### Function call shorter than `fn_call_width`:
816 lorem("lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit");
819 #### Function call longer than `fn_call_width`:
821 See [`fn_call_indent`](#fn_call_indent).
823 ## `fn_empty_single_line`
825 Put empty-body functions on a single line
827 - **Default value**: `true`
828 - **Possible values**: `true`, `false`
830 #### `true` (default):
843 See also [`control_brace_style`](#control_brace_style).
845 ## `fn_return_indent`
847 Location of return type in function declaration
849 - **Default value**: `"WithArgs"`
850 - **Possible values**: `"WithArgs"`, `"WithWhereClause"`
852 #### `"WithArgs"` (default):
855 fn lorem(ipsum: Ipsum,
859 consectetur: Consectetur,
860 adipiscing: Adipiscing)
869 #### `"WithWhereClause"`:
872 fn lorem(ipsum: Ipsum,
876 consectetur: Consectetur,
877 adipiscing: Adipiscing)
886 **Note**: This option only takes effect when `fn_call_indent` is set to `"Visual"`.
890 Put single-expression functions on a single line
892 - **Default value**: `false`
893 - **Possible values**: `true`, `false`
895 #### `false` (default):
898 fn lorem() -> usize {
902 fn lorem() -> usize {
911 fn lorem() -> usize { 42 }
913 fn lorem() -> usize {
919 See also [`control_brace_style`](#control_brace_style).
921 ## `force_explicit_abi`
923 Always print the abi for extern items
925 - **Default value**: `true`
926 - **Possible values**: `true`, `false`
928 **Note:** Non-"C" ABIs are always printed. If `false` then "C" is removed.
930 #### `true` (default):
934 pub static lorem: c_int;
942 pub static lorem: c_int;
946 ## `force_format_strings`
948 Always format string literals
950 - **Default value**: `false`
951 - **Possible values**: `true`, `false`
953 See [`format_strings`](#format_strings).
955 See also [`max_width`](#max_width).
959 Format string literals where necessary
961 - **Default value**: `false`
962 - **Possible values**: `true`, `false`
964 #### `false` (default):
967 let lorem = "ipsum dolor sit amet consectetur adipiscing elit lorem ipsum dolor sit";
974 "ipsum dolor sit amet consectetur \
975 adipiscing elit lorem ipsum dolor sit";
978 See also [`force_format_strings`](#force_format_strings), [`max_width`](#max_width).
982 Indentation of generics
984 - **Default value**: `"Block"`
985 - **Possible values**: `"Block"`, `"Visual"`
987 #### `"Block"` (default):
995 Adipiscing: Eq = usize,
996 Consectetur: Eq = usize,
1003 adipiscing: Adipiscing,
1004 consectetur: Consectetur,
1014 fn lorem<Ipsum: Eq = usize,
1018 Adipiscing: Eq = usize,
1019 Consectetur: Eq = usize,
1025 adipiscing: Adipiscing,
1026 consectetur: Consectetur,
1035 Use tab characters for indentation, spaces for alignment
1037 - **Default value**: `false`
1038 - **Possible values**: `true`, `false`
1040 #### `false` (default):
1043 fn lorem() -> usize {
1044 42 // spaces before 42
1051 fn lorem() -> usize {
1052 42 // tabs before 42
1056 See also: [`tab_spaces`](#tab_spaces).
1058 ## `impl_empty_single_line`
1060 Put empty-body implementations on a single line
1062 - **Default value**: `true`
1063 - **Possible values**: `true`, `false`
1065 #### `true` (default):
1078 See also [`item_brace_style`](#item_brace_style).
1080 ## `indent_match_arms`
1082 Indent match arms instead of keeping them at the same indentation level as the match keyword
1084 - **Default value**: `true`
1085 - **Possible values**: `true`, `false`
1087 #### `true` (default):
1109 See also: [`match_block_trailing_comma`](#match_block_trailing_comma), [`wrap_match_arms`](#wrap_match_arms).
1113 Indent style of imports
1115 - **Default Value**: `"Visual"`
1116 - **Possible values**: `"Block"`, `"Visual"`
1118 #### `"Visual"` (default):
1136 See also: [`imports_layout`](#imports_layout).
1140 Item layout inside a imports block
1142 - **Default value**: "Mixed"
1143 - **Possible values**: "Horizontal", "HorizontalVertical", "Mixed", "Vertical"
1145 #### `"Mixed"` (default):
1148 use foo::{xxx, yyy, zzz};
1150 use foo::{aaa, bbb, ccc,
1154 #### `"Horizontal"`:
1156 **Note**: This option forces to put everything on one line and may exceeds `max_width`.
1159 use foo::{xxx, yyy, zzz};
1161 use foo::{aaa, bbb, ccc, ddd, eee, fff};
1164 #### `"HorizontalVertical"`:
1167 use foo::{xxx, yyy, zzz};
1192 ## `item_brace_style`
1194 Brace style for structs and enums
1196 - **Default value**: `"SameLineWhere"`
1197 - **Possible values**: `"AlwaysNextLine"`, `"PreferSameLine"`, `"SameLineWhere"`
1199 #### `"SameLineWhere"` (default):
1213 #### `"AlwaysNextLine"`:
1228 #### `"PreferSameLine"`:
1241 ## `match_arm_forces_newline`
1243 Consistently put match arms (block based or not) in a newline.
1245 - **Default value**: `false`
1246 - **Possible values**: `true`, `false`
1248 #### `false` (default):
1252 // a non-empty block
1259 X2 => println!("ok"),
1267 // a non-empty block
1281 See also: [`wrap_match_arms`](#wrap_match_arms).
1283 ## `match_block_trailing_comma`
1285 Put a trailing comma after a block based match arm (non-block arms are not affected)
1287 - **Default value**: `false`
1288 - **Possible values**: `true`, `false`
1290 #### `false` (default):
1297 Lorem::Dolor => println!("dolor"),
1308 Lorem::Dolor => println!("dolor"),
1312 See also: [`indent_match_arms`](#indent_match_arms), [`trailing_comma`](#trailing_comma), [`wrap_match_arms`](#wrap_match_arms).
1314 ## `match_pattern_separator_break_point`
1316 Put a match sub-patterns' separator (`|`) in front or back.
1318 - **Default value**: `"Back"`
1319 - **Possible values**: `"Back"`, `"Front"`
1321 #### `"Back"` (default):
1343 | Variant::Tag6 => {}
1349 Maximum width of each line
1351 - **Default value**: `100`
1352 - **Possible values**: any positive integer
1354 See also [`error_on_line_overflow`](#error_on_line_overflow).
1358 Merge multiple derives into a single one.
1360 - **Default value**: `true`
1361 - **Possible values**: `true`, `false`
1363 #### `true` (default):
1366 #[derive(Eq, PartialEq, Debug, Copy, Clone)]
1373 #[derive(Eq, PartialEq)]
1375 #[derive(Copy, Clone)]
1379 ## `multiline_closure_forces_block`
1381 Force multiline closure bodies to be wrapped in a block
1383 - **Default value**: `false`
1384 - **Possible values**: `false`, `true`
1386 #### `false` (default):
1389 result.and_then(|maybe_value| match maybe_value {
1399 result.and_then(|maybe_value| {
1407 ## `multiline_match_arm_forces_block`
1409 Force multiline match arm bodies to be wrapped in a block
1411 - **Default value**: `false`
1412 - **Possible values**: `false`, `true`
1414 #### `false` (default):
1419 println!("Hello World");
1431 println!("Hello World");
1440 Unix or Windows line endings
1442 - **Default value**: `"Unix"`
1443 - **Possible values**: `"Native"`, `"Unix"`, `"Windows"`
1445 ## `normalize_comments`
1447 Convert /* */ comments to // comments where possible
1449 - **Default value**: `false`
1450 - **Possible values**: `true`, `false`
1452 #### `false` (default):
1456 fn dolor() -> usize {}
1459 fn adipiscing() -> usize {}
1466 fn dolor() -> usize {}
1469 fn adipiscing() -> usize {}
1472 ## `reorder_imported_names`
1474 Reorder lists of names in import statements alphabetically
1476 - **Default value**: `false`
1477 - **Possible values**: `true`, `false`
1479 #### `false` (default):
1482 use super::{lorem, ipsum, dolor, sit};
1488 use super::{dolor, ipsum, lorem, sit};
1491 See also [`reorder_imports`](#reorder_imports).
1493 ## `reorder_imports`
1495 Reorder import statements alphabetically
1497 - **Default value**: `false`
1498 - **Possible values**: `true`, `false`
1500 #### `false` (default):
1518 See also [`reorder_imported_names`](#reorder_imported_names), [`reorder_imports_in_group`](#reorder_imports_in_group).
1520 ## `reorder_imports_in_group`
1522 Reorder import statements in group
1524 - **Default value**: `false`
1525 - **Possible values**: `true`, `false`
1527 **Note:** This option takes effect only when [`reorder_imports`](#reorder_imports) is set to `true`.
1529 #### `false` (default):
1553 See also [`reorder_imports`](#reorder_imports).
1555 ## `single_line_if_else_max_width`
1557 Maximum line length for single line if-else expressions.
1559 - **Default value**: `50`
1560 - **Possible values**: any positive integer
1562 **Note:** A value of `0` results in if-else expressions being broken regardless of their line's width.
1564 #### Lines shorter than `single_line_if_else_max_width`:
1566 let lorem = if ipsum { dolor } else { sit };
1569 #### Lines longer than `single_line_if_else_max_width`:
1571 let lorem = if ipsum {
1578 See also: [`control_brace_style`](#control_brace_style).
1582 Don't reformat out of line modules
1584 - **Default value**: `false`
1585 - **Possible values**: `true`, `false`
1587 ## `space_after_bound_colon`
1589 Leave a space after the colon in a trait or lifetime bound
1591 - **Default value**: `true`
1592 - **Possible values**: `true`, `false`
1594 #### `true` (default):
1597 fn lorem<T: Eq>(t: T) {
1605 fn lorem<T:Eq>(t: T) {
1610 See also: [`space_before_bound`](#space_before_bound).
1612 ## `struct_field_align_threshold`
1614 The maximum diff of width between struct fields to be aligned with each other.
1616 - **Default value** : 0
1617 - **Possible values**: any positive integer
1639 ## `space_after_struct_lit_field_colon`
1641 Leave a space after the colon in a struct literal field
1643 - **Default value**: `true`
1644 - **Possible values**: `true`, `false`
1646 #### `true` (default):
1664 See also: [`space_before_struct_lit_field_colon`](#space_before_struct_lit_field_colon).
1666 ## `space_after_type_annotation_colon`
1668 Leave a space after the colon in a type annotation
1670 - **Default value**: `true`
1671 - **Possible values**: `true`, `false`
1673 #### `true` (default):
1676 fn lorem<T: Eq>(t: T) {
1677 let ipsum: Dolor = sit;
1684 fn lorem<T: Eq>(t:T) {
1685 let ipsum:Dolor = sit;
1689 See also: [`space_before_type_annotation`](#space_before_type_annotation).
1691 ## `space_before_bound`
1693 Leave a space before the colon in a trait or lifetime bound
1695 - **Default value**: `false`
1696 - **Possible values**: `true`, `false`
1698 #### `false` (default):
1701 fn lorem<T: Eq>(t: T) {
1702 let ipsum: Dolor = sit;
1709 fn lorem<T : Eq>(t: T) {
1710 let ipsum: Dolor = sit;
1714 See also: [`space_after_bound_colon`](#space_after_bound_colon).
1716 ## `space_before_struct_lit_field_colon`
1718 Leave a space before the colon in a struct literal field
1720 - **Default value**: `false`
1721 - **Possible values**: `true`, `false`
1723 #### `false` (default):
1741 See also: [`space_after_struct_lit_field_colon`](#space_after_struct_lit_field_colon).
1743 ## `space_before_type_annotation`
1745 Leave a space before the colon in a type annotation
1747 - **Default value**: `false`
1748 - **Possible values**: `true`, `false`
1750 #### `false` (default):
1753 fn lorem<T: Eq>(t: T) {
1754 let ipsum: Dolor = sit;
1761 fn lorem<T: Eq>(t : T) {
1762 let ipsum : Dolor = sit;
1766 See also: [`space_after_type_annotation_colon`](#space_after_type_annotation_colon).
1768 ## `spaces_around_ranges`
1770 Put spaces around the .. and ... range operators
1772 - **Default value**: `false`
1773 - **Possible values**: `true`, `false`
1775 #### `false` (default):
1784 let lorem = 0 .. 10;
1787 ## `spaces_within_angle_brackets`
1789 Put spaces within non-empty generic arguments
1791 - **Default value**: `false`
1792 - **Possible values**: `true`, `false`
1794 #### `false` (default):
1797 fn lorem<T: Eq>(t: T) {
1805 fn lorem< T: Eq >(t: T) {
1810 See also: [`spaces_within_parens`](#spaces_within_parens), [`spaces_within_square_brackets`](#spaces_within_square_brackets).
1812 ## `spaces_within_parens`
1814 Put spaces within non-empty parentheses
1816 - **Default value**: `false`
1817 - **Possible values**: `true`, `false`
1819 #### `false` (default):
1822 fn lorem<T: Eq>(t: T) {
1823 let lorem = (ipsum, dolor);
1830 fn lorem<T: Eq>( t: T ) {
1831 let lorem = ( ipsum, dolor );
1835 See also: [`spaces_within_angle_brackets`](#spaces_within_angle_brackets), [`spaces_within_square_brackets`](#spaces_within_square_brackets).
1837 ## `spaces_within_square_brackets`
1839 Put spaces within non-empty square brackets
1841 - **Default value**: `false`
1842 - **Possible values**: `true`, `false`
1844 #### `false` (default):
1847 let lorem: [usize; 2] = [ipsum, dolor];
1853 let lorem: [ usize; 2 ] = [ ipsum, dolor ];
1856 See also: [`spaces_within_parens`](#spaces_within_parens), [`spaces_within_angle_brackets`](#spaces_within_angle_brackets).
1858 ## `struct_lit_multiline_style`
1860 Multiline style on literal structs
1862 - **Default value**: `"PreferSingle"`
1863 - **Possible values**: `"ForceMulti"`, `"PreferSingle"`
1865 #### `"PreferSingle"` (default):
1868 let lorem = Lorem { ipsum: dolor, sit: amet };
1871 #### `"ForceMulti"`:
1880 See also: [`struct_lit_indent`](#struct_lit_indent), [`struct_lit_width`](#struct_lit_width).
1882 ## `struct_lit_indent`
1884 Style of struct definition
1886 - **Default value**: `"Block"`
1887 - **Possible values**: `"Block"`, `"Visual"`
1889 #### `"Block"` (default):
1901 let lorem = Lorem { ipsum: dolor,
1905 See also: [`struct_lit_multiline_style`](#struct_lit_multiline_style), [`struct_lit_indent`](#struct_lit_indent).
1907 ## `struct_lit_width`
1909 Maximum width in the body of a struct lit before falling back to vertical formatting
1911 - **Default value**: `18`
1912 - **Possible values**: any positive integer
1914 **Note:** A value of `0` results in vertical formatting being applied regardless of a line's width.
1916 #### Lines shorter than `struct_lit_width`:
1918 let lorem = Lorem { ipsum: dolor, sit: amet };
1921 #### Lines longer than `struct_lit_width`:
1922 See [`struct_lit_indent`](#struct_lit_indent).
1924 See also: [`struct_lit_multiline_style`](#struct_lit_multiline_style), [`struct_lit_indent`](#struct_lit_indent).
1926 ## `struct_variant_width`
1928 Maximum width in the body of a struct variant before falling back to vertical formatting
1930 - **Default value**: `35`
1931 - **Possible values**: any positive integer
1933 **Note:** A value of `0` results in vertical formatting being applied regardless of a line's width.
1935 #### Struct variants shorter than `struct_variant_width`:
1940 Sit { amet: Consectetur, adipiscing: Elit },
1944 #### Struct variants longer than `struct_variant_width`:
1958 Number of spaces per tab
1960 - **Default value**: `4`
1961 - **Possible values**: any positive integer
1967 let ipsum = dolor();
1969 "amet consectetur adipiscing elit."
1978 let ipsum = dolor();
1980 "amet consectetur adipiscing elit."
1985 See also: [`hard_tabs`](#hard_tabs).
1987 ## `take_source_hints`
1989 Retain some formatting characteristics from the source code
1991 - **Default value**: `false`
1992 - **Possible values**: `true`, `false`
1994 #### `false` (default):
1999 .dolor(|| { sit.amet().consectetur().adipiscing().elit(); });
2015 Note: This only applies if the call chain within the inner closure had already been formatted on separate lines before running rustfmt.
2019 How to handle trailing commas for lists
2021 - **Default value**: `"Vertical"`
2022 - **Possible values**: `"Always"`, `"Never"`, `"Vertical"`
2024 #### `"Vertical"` (default):
2027 let Lorem { ipsum, dolor, sit } = amet;
2041 let Lorem { ipsum, dolor, sit, } = amet;
2055 let Lorem { ipsum, dolor, sit } = amet;
2066 See also: [`match_block_trailing_comma`](#match_block_trailing_comma).
2068 ## `trailing_semicolon`
2070 Add trailing semicolon after break, continue and return
2072 - **Default value**: `true`
2073 - **Possible values**: `true`, `false`
2075 #### `true` (default):
2089 ## `type_punctuation_density`
2091 Determines if `+` or `=` are wrapped in spaces in the punctuation of types
2093 - **Default value**: `"Wide"`
2094 - **Possible values**: `"Compressed"`, `"Wide"`
2096 #### `"Wide"` (default):
2099 fn lorem<Ipsum: Dolor + Sit = Amet>() {
2104 #### `"Compressed"`:
2107 fn lorem<Ipsum: Dolor+Sit=Amet>() {
2112 ## `use_try_shorthand`
2114 Replace uses of the try! macro by the ? shorthand
2116 - **Default value**: `false`
2117 - **Possible values**: `true`, `false`
2119 #### `false` (default):
2122 let lorem = try!(ipsum.map(|dolor|dolor.sit()));
2128 let lorem = ipsum.map(|dolor| dolor.sit())?;
2133 Density of a where clause.
2135 - **Default value**: `"Vertical"`
2136 - **Possible values**: `"Compressed"`, `"CompressedIfEmpty"`, `"Tall"`, `"Vertical"`
2138 #### `"Vertical"` (default):
2142 fn ipsum<Dolor>(dolor: Dolor) -> Sit
2145 fn ipsum<Dolor>(dolor: Dolor) -> Sit
2153 **Note:** `where_density = "Vertical"` currently produces the same output as `where_density = "Tall"`.
2155 #### `"CompressedIfEmpty"`:
2159 fn ipsum<Dolor>(dolor: Dolor) -> Sit
2162 fn ipsum<Dolor>(dolor: Dolor) -> Sit
2171 #### `"Compressed"`:
2175 fn ipsum<Dolor>(dolor: Dolor) -> Sit
2178 fn ipsum<Dolor>(dolor: Dolor) -> Sit
2189 fn ipsum<Dolor>(dolor: Dolor) -> Sit
2193 fn ipsum<Dolor>(dolor: Dolor) -> Sit
2202 **Note:** `where_density = "Tall"` currently produces the same output as `where_density = "Vertical"`.
2204 See also: [`where_layout`](#where_layout), [`where_pred_indent`](#where_pred_indent), [`where_style`](#where_style).
2208 Element layout inside a where clause
2210 - **Default value**: `"Vertical"`
2211 - **Possible values**: `"Horizontal"`, `"HorizontalVertical"`, `"Mixed"`, `"Vertical"`
2213 #### `"Vertical"` (default):
2216 fn lorem<Ipsum, Dolor>(ipsum: Ipsum, dolor: Dolor)
2217 where Ipsum: IpsumDolorSitAmet,
2218 Dolor: DolorSitAmetConsectetur
2223 fn lorem<Ipsum, Dolor, Sit, Amet>(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet)
2224 where Ipsum: IpsumDolorSitAmet,
2225 Dolor: DolorSitAmetConsectetur,
2226 Sit: SitAmetConsecteturAdipiscing,
2227 Amet: AmetConsecteturAdipiscingElit
2233 #### `"Horizontal"`:
2236 fn lorem<Ipsum, Dolor>(ipsum: Ipsum, dolor: Dolor)
2237 where Ipsum: IpsumDolorSitAmet, Dolor: DolorSitAmetConsectetur
2242 fn lorem<Ipsum, Dolor, Sit, Amet>(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet)
2243 where Ipsum: IpsumDolorSitAmet, Dolor: DolorSitAmetConsectetur, Sit: SitAmetConsecteturAdipiscing, Amet: AmetConsecteturAdipiscingElit
2249 #### `"HorizontalVertical"`:
2252 fn lorem<Ipsum, Dolor>(ipsum: Ipsum, dolor: Dolor)
2253 where Ipsum: IpsumDolorSitAmet, Dolor: DolorSitAmetConsectetur
2258 fn lorem<Ipsum, Dolor, Sit, Amet>(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet)
2259 where Ipsum: IpsumDolorSitAmet,
2260 Dolor: DolorSitAmetConsectetur,
2261 Sit: SitAmetConsecteturAdipiscing,
2262 Amet: AmetConsecteturAdipiscingElit
2271 fn lorem<Ipsum, Dolor>(ipsum: Ipsum, dolor: Dolor)
2272 where Ipsum: IpsumDolorSitAmet, Dolor: DolorSitAmetConsectetur
2277 fn lorem<Ipsum, Dolor, Sit, Amet>(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet)
2278 where Ipsum: IpsumDolorSitAmet, Dolor: DolorSitAmetConsectetur,
2279 Sit: SitAmetConsecteturAdipiscing, Amet: AmetConsecteturAdipiscingElit
2285 **Note**: This option only takes effect when `where_style` is set to `"Legacy"`.
2287 See also: [`where_density`](#where_density), [`where_pred_indent`](#where_pred_indent), [`where_style`](#where_style).
2289 ## `where_pred_indent`
2291 Indentation style of a where predicate
2293 - **Default value**: `"Visual"`
2294 - **Possible values**: `"Block"`, `"Visual"`
2296 #### `"Visual"` (default):
2299 fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
2312 fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
2322 **Note**: This option only takes effect when `where_style` is set to `"Legacy"`.
2324 See also: [`where_density`](#where_density), [`where_layout`](#where_layout), [`where_style`](#where_style).
2328 Overall strategy for where clauses
2330 - **Default value**: `"Rfc"`
2331 - **Possible values**: `"Rfc"`, `"Legacy"`
2333 #### `"Rfc"` (default):
2336 fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
2350 fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
2360 See also: [`where_density`](#where_density), [`where_layout`](#where_layout), [`where_pred_indent`](#where_pred_indent).
2364 Break comments to fit on the line
2366 - **Default value**: `false`
2367 - **Possible values**: `true`, `false`
2369 #### `false` (default):
2372 // 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.
2378 // Lorem ipsum dolor sit amet, consectetur adipiscing elit,
2379 // sed do eiusmod tempor incididunt ut labore et dolore
2380 // magna aliqua. Ut enim ad minim veniam, quis nostrud
2381 // exercitation ullamco laboris nisi ut aliquip ex ea
2382 // commodo consequat.
2385 ## `wrap_match_arms`
2387 Wrap the body of arms in blocks when it does not fit on the same line with the pattern of arms
2389 - **Default value**: `true`
2390 - **Possible values**: `true`, `false`
2392 #### `true` (default):
2397 foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(x)
2399 false => println!("{}", sit),
2408 foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(x),
2409 false => println!("{}", sit),
2413 See also: [`indent_match_arms`](#indent_match_arms), [`match_block_trailing_comma`](#match_block_trailing_comma).
2417 What Write Mode to use when none is supplied: Replace, Overwrite, Display, Diff, Coverage
2419 - **Default value**: `"Overwrite"`
2420 - **Possible values**: `"Checkstyle"`, `"Coverage"`, `"Diff"`, `"Display"`, `"Overwrite"`, `"Plain"`, `"Replace"`