]> git.lizzy.rs Git - rust.git/blob - Configurations.md
Merge pull request #2395 from davidalber/fix-configuration-snippets2
[rust.git] / Configurations.md
1 # Configuring Rustfmt
2
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.
4
5 A possible content of `rustfmt.toml` or `.rustfmt.toml` might look like this:
6
7 ```toml
8 indent_style = "Block"
9 reorder_imported_names = true
10 ```
11
12 Each configuration option is either stable or unstable.
13 Stable options can be used directly, while unstable options are opt-in.
14 To enable unstable options, set `unstable_features = true` in `rustfmt.toml` or pass `--unstable-options` to rustfmt.
15
16 # Configuration Options
17
18 Below you find a detailed visual guide on all the supported configuration options of rustfmt:
19
20
21 ## `indent_style`
22
23 Indent on expressions or items.
24
25 - **Default value**: `"Block"`
26 - **Possible values**: `"Block"`, `"Visual"`
27 - **Stable**: No
28
29 ### Array
30
31 #### `"Block"` (default):
32
33 ```rust
34 fn main() {
35     let lorem = vec![
36         "ipsum",
37         "dolor",
38         "sit",
39         "amet",
40         "consectetur",
41         "adipiscing",
42         "elit",
43     ];
44 }
45 ```
46
47 #### `"Visual"`:
48
49 ```rust
50 fn main() {
51     let lorem = vec!["ipsum",
52                      "dolor",
53                      "sit",
54                      "amet",
55                      "consectetur",
56                      "adipiscing",
57                      "elit"];
58 }
59 ```
60
61 ### Control flow
62
63 #### `"Block"` (default):
64
65 ```rust
66 if lorem_ipsum &&
67     dolor_sit &&
68     amet_consectetur
69 {
70     // ...
71 }
72 ```
73
74 #### `"Visual"`:
75
76 ```rust
77 if lorem_ipsum &&
78    dolor_sit &&
79    amet_consectetur {
80     // ...
81 }
82 ```
83
84 See also: [`control_brace_style`](#control_brace_style).
85
86 ### Function arguments
87
88 #### `"Block"` (default):
89
90 ```rust
91 fn lorem() {}
92
93 fn lorem(ipsum: usize) {}
94
95 fn lorem(
96     ipsum: usize,
97     dolor: usize,
98     sit: usize,
99     amet: usize,
100     consectetur: usize,
101     adipiscing: usize,
102     elit: usize,
103 ) {
104     // body
105 }
106 ```
107
108 #### `"Visual"`:
109
110 ```rust
111 fn lorem() {}
112
113 fn lorem(ipsum: usize) {}
114
115 fn lorem(ipsum: usize,
116          dolor: usize,
117          sit: usize,
118          amet: usize,
119          consectetur: usize,
120          adipiscing: usize,
121          elit: usize) {
122     // body
123 }
124 ```
125
126 ### Function calls
127
128 #### `"Block"` (default):
129
130 ```rust
131 fn main() {
132     lorem(
133         "lorem",
134         "ipsum",
135         "dolor",
136         "sit",
137         "amet",
138         "consectetur",
139         "adipiscing",
140         "elit",
141     );
142 }
143 ```
144
145 #### `"Visual"`:
146
147 ```rust
148 fn main() {
149     lorem("lorem",
150           "ipsum",
151           "dolor",
152           "sit",
153           "amet",
154           "consectetur",
155           "adipiscing",
156           "elit");
157 }
158 ```
159
160 ### Generics
161
162 #### `"Block"` (default):
163
164 ```rust
165 fn lorem<
166     Ipsum: Eq = usize,
167     Dolor: Eq = usize,
168     Sit: Eq = usize,
169     Amet: Eq = usize,
170     Adipiscing: Eq = usize,
171     Consectetur: Eq = usize,
172     Elit: Eq = usize,
173 >(
174     ipsum: Ipsum,
175     dolor: Dolor,
176     sit: Sit,
177     amet: Amet,
178     adipiscing: Adipiscing,
179     consectetur: Consectetur,
180     elit: Elit,
181 ) -> T {
182     // body
183 }
184 ```
185
186 #### `"Visual"`:
187
188 ```rust
189 fn lorem<Ipsum: Eq = usize,
190          Dolor: Eq = usize,
191          Sit: Eq = usize,
192          Amet: Eq = usize,
193          Adipiscing: Eq = usize,
194          Consectetur: Eq = usize,
195          Elit: Eq = usize>(
196     ipsum: Ipsum,
197     dolor: Dolor,
198     sit: Sit,
199     amet: Amet,
200     adipiscing: Adipiscing,
201     consectetur: Consectetur,
202     elit: Elit)
203     -> T {
204     // body
205 }
206 ```
207
208 #### Struct
209
210 #### `"Block"` (default):
211
212 ```rust
213 fn main() {
214     let lorem = Lorem {
215         ipsum: dolor,
216         sit: amet,
217     };
218 }
219 ```
220
221 #### `"Visual"`:
222
223 ```rust
224 fn main() {
225     let lorem = Lorem { ipsum: dolor,
226                         sit: amet, };
227 }
228 ```
229
230 See also: [`struct_lit_single_line`](#struct_lit_single_line), [`indent_style`](#indent_style).
231
232 ### Where predicates
233
234 #### `"Block"` (default):
235
236 ```rust
237 fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
238 where
239     Ipsum: Eq,
240     Dolor: Eq,
241     Sit: Eq,
242     Amet: Eq,
243 {
244     // body
245 }
246 ```
247
248 #### `"Visual"`:
249
250 ```rust
251 fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
252     where Ipsum: Eq,
253           Dolor: Eq,
254           Sit: Eq,
255           Amet: Eq
256 {
257     // body
258 }
259 ```
260
261 ## `use_small_heuristics`
262
263 Whether to use different formatting for items and expressions if they satisfy a heuristic notion of 'small'.
264
265 - **Default value**: `true`
266 - **Possible values**: `true`, `false`
267 - **Stable**: No
268
269 #### `true` (default):
270
271 ```rust
272 enum Lorem {
273     Ipsum,
274     Dolor(bool),
275     Sit { amet: Consectetur, adipiscing: Elit },
276 }
277
278 fn main() {
279     lorem(
280         "lorem",
281         "ipsum",
282         "dolor",
283         "sit",
284         "amet",
285         "consectetur",
286         "adipiscing",
287     );
288
289     let lorem = Lorem {
290         ipsum: dolor,
291         sit: amet,
292     };
293     let lorem = Lorem { ipsum: dolor };
294
295     let lorem = if ipsum { dolor } else { sit };
296 }
297 ```
298
299 #### `false`:
300
301 ```rust
302 enum Lorem {
303     Ipsum,
304     Dolor(bool),
305     Sit {
306         amet: Consectetur,
307         adipiscing: Elit,
308     },
309 }
310
311 fn main() {
312     lorem("lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing");
313
314     let lorem = Lorem {
315         ipsum: dolor,
316         sit: amet,
317     };
318
319     let lorem = if ipsum {
320         dolor
321     } else {
322         sit
323     };
324 }
325 ```
326
327 ## `binop_separator`
328
329 Where to put a binary operator when a binary expression goes multiline.
330
331 - **Default value**: `"Front"`
332 - **Possible values**: `"Front"`, `"Back"`
333 - **Stable**: No
334
335 #### `"Front"` (default):
336
337 ```rust
338 fn main() {
339     let or = foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo
340         || barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbar;
341
342     let sum = 123456789012345678901234567890 + 123456789012345678901234567890
343         + 123456789012345678901234567890;
344
345     let range = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
346         ..bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;
347 }
348 ```
349
350 #### `"Back"`:
351
352 ```rust
353 fn main() {
354     let or = foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo ||
355         barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbar;
356
357     let sum = 123456789012345678901234567890 + 123456789012345678901234567890 +
358         123456789012345678901234567890;
359
360     let range = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..
361         bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;
362 }
363 ```
364
365 ## `combine_control_expr`
366
367 Combine control expressions with function calls.
368
369 - **Default value**: `true`
370 - **Possible values**: `true`, `false`
371 - **Stable**: No
372
373 #### `true` (default):
374
375 ```rust
376 fn example() {
377     // If
378     foo!(if x {
379         foo();
380     } else {
381         bar();
382     });
383
384     // IfLet
385     foo!(if let Some(..) = x {
386         foo();
387     } else {
388         bar();
389     });
390
391     // While
392     foo!(while x {
393         foo();
394         bar();
395     });
396
397     // WhileLet
398     foo!(while let Some(..) = x {
399         foo();
400         bar();
401     });
402
403     // ForLoop
404     foo!(for x in y {
405         foo();
406         bar();
407     });
408
409     // Loop
410     foo!(loop {
411         foo();
412         bar();
413     });
414 }
415 ```
416
417 #### `false`:
418
419 ```rust
420 fn example() {
421     // If
422     foo!(
423         if x {
424             foo();
425         } else {
426             bar();
427         }
428     );
429
430     // IfLet
431     foo!(
432         if let Some(..) = x {
433             foo();
434         } else {
435             bar();
436         }
437     );
438
439     // While
440     foo!(
441         while x {
442             foo();
443             bar();
444         }
445     );
446
447     // WhileLet
448     foo!(
449         while let Some(..) = x {
450             foo();
451             bar();
452         }
453     );
454
455     // ForLoop
456     foo!(
457         for x in y {
458             foo();
459             bar();
460         }
461     );
462
463     // Loop
464     foo!(
465         loop {
466             foo();
467             bar();
468         }
469     );
470 }
471 ```
472
473 ## `comment_width`
474
475 Maximum length of comments. No effect unless`wrap_comments = true`.
476
477 - **Default value**: `80`
478 - **Possible values**: any positive integer
479 - **Stable**: No
480
481 **Note:** A value of `0` results in [`wrap_comments`](#wrap_comments) being applied regardless of a line's width.
482
483 #### `80` (default; comments shorter than `comment_width`):
484 ```rust
485 // Lorem ipsum dolor sit amet, consectetur adipiscing elit.
486 ```
487
488 #### `60` (comments longer than `comment_width`):
489 ```rust
490 // Lorem ipsum dolor sit amet,
491 // consectetur adipiscing elit.
492 ```
493
494 See also [`wrap_comments`](#wrap_comments).
495
496 ## `condense_wildcard_suffixes`
497
498 Replace strings of _ wildcards by a single .. in tuple patterns
499
500 - **Default value**: `false`
501 - **Possible values**: `true`, `false`
502 - **Stable**: No
503
504 #### `false` (default):
505
506 ```rust
507 fn main() {
508     let (lorem, ipsum, _, _) = (1, 2, 3, 4);
509     let (lorem, ipsum, ..) = (1, 2, 3, 4);
510 }
511 ```
512
513 #### `true`:
514
515 ```rust
516 fn main() {
517     let (lorem, ipsum, ..) = (1, 2, 3, 4);
518 }
519 ```
520
521 ## `control_brace_style`
522
523 Brace style for control flow constructs
524
525 - **Default value**: `"AlwaysSameLine"`
526 - **Possible values**: `"AlwaysNextLine"`, `"AlwaysSameLine"`, `"ClosingNextLine"`
527 - **Stable**: No
528
529 #### `"AlwaysSameLine"` (default):
530
531 ```rust
532 fn main() {
533     if lorem {
534         println!("ipsum!");
535     } else {
536         println!("dolor!");
537     }
538 }
539 ```
540
541 #### `"AlwaysNextLine"`:
542
543 ```rust
544 fn main() {
545     if lorem
546     {
547         println!("ipsum!");
548     }
549     else
550     {
551         println!("dolor!");
552     }
553 }
554 ```
555
556 #### `"ClosingNextLine"`:
557
558 ```rust
559 fn main() {
560     if lorem {
561         println!("ipsum!");
562     }
563     else {
564         println!("dolor!");
565     }
566 }
567 ```
568
569 ## `disable_all_formatting`
570
571 Don't reformat anything
572
573 - **Default value**: `false`
574 - **Possible values**: `true`, `false`
575 - **Stable**: No
576
577 ## `error_on_line_overflow`
578
579 Error if unable to get all lines within `max_width`
580
581 - **Default value**: `true`
582 - **Possible values**: `true`, `false`
583 - **Stable**: No
584
585 See also [`max_width`](#max_width).
586
587 ## `error_on_line_overflow_comments`
588
589 Error if unable to get all comment lines within `comment_width`.
590
591 - **Default value**: `true`
592 - **Possible values**: `true`, `false`
593 - **Stable**: No
594
595 See also [`comment_width`](#comment_width).
596
597 ## `fn_args_density`
598
599 Argument density in functions
600
601 - **Default value**: `"Tall"`
602 - **Possible values**: `"Compressed"`, `"Tall"`, `"Vertical"`
603 - **Stable**: No
604
605 #### `"Tall"` (default):
606
607 ```rust
608 trait Lorem {
609     fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet);
610
611     fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet) {
612         // body
613     }
614
615     fn lorem(
616         ipsum: Ipsum,
617         dolor: Dolor,
618         sit: Sit,
619         amet: Amet,
620         consectetur: Consectetur,
621         adipiscing: Adipiscing,
622         elit: Elit,
623     );
624
625     fn lorem(
626         ipsum: Ipsum,
627         dolor: Dolor,
628         sit: Sit,
629         amet: Amet,
630         consectetur: Consectetur,
631         adipiscing: Adipiscing,
632         elit: Elit,
633     ) {
634         // body
635     }
636 }
637 ```
638
639 #### `"Compressed"`:
640
641 ```rust
642 trait Lorem {
643     fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet);
644
645     fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet) {
646         // body
647     }
648
649     fn lorem(
650         ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, consectetur: Consectetur,
651         adipiscing: Adipiscing, elit: Elit,
652     );
653
654     fn lorem(
655         ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, consectetur: Consectetur,
656         adipiscing: Adipiscing, elit: Elit,
657     ) {
658         // body
659     }
660 }
661 ```
662
663 #### `"Vertical"`:
664
665 ```rust
666 trait Lorem {
667     fn lorem(
668         ipsum: Ipsum,
669         dolor: Dolor,
670         sit: Sit,
671         amet: Amet,
672     );
673
674     fn lorem(
675         ipsum: Ipsum,
676         dolor: Dolor,
677         sit: Sit,
678         amet: Amet,
679     ) {
680         // body
681     }
682
683     fn lorem(
684         ipsum: Ipsum,
685         dolor: Dolor,
686         sit: Sit,
687         amet: Amet,
688         consectetur: Consectetur,
689         adipiscing: Adipiscing,
690         elit: Elit,
691     );
692
693     fn lorem(
694         ipsum: Ipsum,
695         dolor: Dolor,
696         sit: Sit,
697         amet: Amet,
698         consectetur: Consectetur,
699         adipiscing: Adipiscing,
700         elit: Elit,
701     ) {
702         // body
703     }
704 }
705 ```
706
707
708 ## `brace_style`
709
710 Brace style for items
711
712 - **Default value**: `"SameLineWhere"`
713 - **Possible values**: `"AlwaysNextLine"`, `"PreferSameLine"`, `"SameLineWhere"`
714 - **Stable**: No
715
716 ### Functions
717
718 #### `"SameLineWhere"` (default):
719
720 ```rust
721 fn lorem() {
722     // body
723 }
724
725 fn lorem(ipsum: usize) {
726     // body
727 }
728
729 fn lorem<T>(ipsum: T)
730 where
731     T: Add + Sub + Mul + Div,
732 {
733     // body
734 }
735 ```
736
737 #### `"AlwaysNextLine"`:
738
739 ```rust
740 fn lorem()
741 {
742     // body
743 }
744
745 fn lorem(ipsum: usize)
746 {
747     // body
748 }
749
750 fn lorem<T>(ipsum: T)
751 where
752     T: Add + Sub + Mul + Div,
753 {
754     // body
755 }
756 ```
757
758 #### `"PreferSameLine"`:
759
760 ```rust
761 fn lorem() {
762     // body
763 }
764
765 fn lorem(ipsum: usize) {
766     // body
767 }
768
769 fn lorem<T>(ipsum: T)
770 where
771     T: Add + Sub + Mul + Div, {
772     // body
773 }
774 ```
775
776 ### Structs and enums
777
778 #### `"SameLineWhere"` (default):
779
780 ```rust
781 struct Lorem {
782     ipsum: bool,
783 }
784
785 struct Dolor<T>
786 where
787     T: Eq,
788 {
789     sit: T,
790 }
791 ```
792
793 #### `"AlwaysNextLine"`:
794
795 ```rust
796 struct Lorem
797 {
798     ipsum: bool,
799 }
800
801 struct Dolor<T>
802 where
803     T: Eq,
804 {
805     sit: T,
806 }
807 ```
808
809 #### `"PreferSameLine"`:
810
811 ```rust
812 struct Lorem {
813     ipsum: bool,
814 }
815
816 struct Dolor<T>
817 where
818     T: Eq, {
819     sit: T,
820 }
821 ```
822
823
824 ## `empty_item_single_line`
825
826 Put empty-body functions and impls on a single line
827
828 - **Default value**: `true`
829 - **Possible values**: `true`, `false`
830 - **Stable**: No
831
832 #### `true` (default):
833
834 ```rust
835 fn lorem() {}
836
837 impl Lorem {}
838 ```
839
840 #### `false`:
841
842 ```rust
843 fn lorem() {
844 }
845
846 impl Lorem {
847 }
848 ```
849
850 See also [`brace_style`](#brace_style), [`control_brace_style`](#control_brace_style).
851
852
853 ## `fn_single_line`
854
855 Put single-expression functions on a single line
856
857 - **Default value**: `false`
858 - **Possible values**: `true`, `false`
859 - **Stable**: No
860
861 #### `false` (default):
862
863 ```rust
864 fn lorem() -> usize {
865     42
866 }
867
868 fn lorem() -> usize {
869     let ipsum = 42;
870     ipsum
871 }
872 ```
873
874 #### `true`:
875
876 ```rust
877 fn lorem() -> usize { 42 }
878
879 fn lorem() -> usize {
880     let ipsum = 42;
881     ipsum
882 }
883 ```
884
885 See also [`control_brace_style`](#control_brace_style).
886
887
888 ## `where_single_line`
889
890 To force single line where layout
891
892 - **Default value**: `false`
893 - **Possible values**: `true`, `false`
894 - **Stable**: No
895
896 #### `false` (default):
897
898 ```rust
899 impl<T> Lorem for T
900 where
901     Option<T>: Ipsum,
902 {
903     // body
904 }
905 ```
906
907 #### `true`:
908
909 ```rust
910 impl<T> Lorem for T
911 where Option<T>: Ipsum
912 {
913     // body
914 }
915 ```
916
917 See also [`brace_style`](#brace_style), [`control_brace_style`](#control_brace_style).
918
919
920 ## `force_explicit_abi`
921
922 Always print the abi for extern items
923
924 - **Default value**: `true`
925 - **Possible values**: `true`, `false`
926 - **Stable**: Yes
927
928 **Note:** Non-"C" ABIs are always printed. If `false` then "C" is removed.
929
930 #### `true` (default):
931
932 ```rust
933 extern "C" {
934     pub static lorem: c_int;
935 }
936 ```
937
938 #### `false`:
939
940 ```rust
941 extern {
942     pub static lorem: c_int;
943 }
944 ```
945
946 ## `format_strings`
947
948 Format string literals where necessary
949
950 - **Default value**: `false`
951 - **Possible values**: `true`, `false`
952 - **Stable**: No
953
954 #### `false` (default):
955
956 ```rust
957 fn main() {
958     let lorem =
959         "ipsum dolor sit amet consectetur adipiscing elit lorem ipsum dolor sit amet consectetur adipiscing";
960 }
961 ```
962
963 #### `true`:
964
965 ```rust
966 fn main() {
967     let lorem = "ipsum dolor sit amet consectetur adipiscing elit lorem ipsum dolor sit amet \
968                  consectetur adipiscing";
969 }
970 ```
971
972 See also [`max_width`](#max_width).
973
974 ## `hard_tabs`
975
976 Use tab characters for indentation, spaces for alignment
977
978 - **Default value**: `false`
979 - **Possible values**: `true`, `false`
980 - **Stable**: Yes
981
982 #### `false` (default):
983
984 ```rust
985 fn lorem() -> usize {
986     42 // spaces before 42
987 }
988 ```
989
990 #### `true`:
991
992 ```rust
993 fn lorem() -> usize {
994         42 // tabs before 42
995 }
996 ```
997
998 See also: [`tab_spaces`](#tab_spaces).
999
1000
1001 ## `imports_indent`
1002
1003 Indent style of imports
1004
1005 - **Default Value**: `"Visual"`
1006 - **Possible values**: `"Block"`, `"Visual"`
1007 - **Stable**: No
1008
1009 #### `"Visual"` (default):
1010
1011 ```rust
1012 use foo::{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy,
1013           zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz};
1014 ```
1015
1016 #### `"Block"`:
1017
1018 ```rust
1019 use foo::{
1020     xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy,
1021     zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz,
1022 };
1023 ```
1024
1025 See also: [`imports_layout`](#imports_layout).
1026
1027 ## `imports_layout`
1028
1029 Item layout inside a imports block
1030
1031 - **Default value**: "Mixed"
1032 - **Possible values**: "Horizontal", "HorizontalVertical", "Mixed", "Vertical"
1033 - **Stable**: No
1034
1035 #### `"Mixed"` (default):
1036
1037 ```rust
1038 use foo::{xxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyy, zzzzzzzzzzzzzzzzzz};
1039
1040 use foo::{aaaaaaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbb, cccccccccccccccccc, dddddddddddddddddd,
1041           eeeeeeeeeeeeeeeeee, ffffffffffffffffff};
1042 ```
1043
1044 #### `"Horizontal"`:
1045
1046 **Note**: This option forces all imports onto one line and may exceed `max_width`.
1047
1048 ```rust
1049 use foo::{xxx, yyy, zzz};
1050
1051 use foo::{aaa, bbb, ccc, ddd, eee, fff};
1052 ```
1053
1054 #### `"HorizontalVertical"`:
1055
1056 ```rust
1057 use foo::{xxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyy, zzzzzzzzzzzzzzzzzz};
1058
1059 use foo::{aaaaaaaaaaaaaaaaaa,
1060           bbbbbbbbbbbbbbbbbb,
1061           cccccccccccccccccc,
1062           dddddddddddddddddd,
1063           eeeeeeeeeeeeeeeeee,
1064           ffffffffffffffffff};
1065 ```
1066
1067 #### `"Vertical"`:
1068
1069 ```rust
1070 use foo::{xxx,
1071           yyy,
1072           zzz};
1073
1074 use foo::{aaa,
1075           bbb,
1076           ccc,
1077           ddd,
1078           eee,
1079           fff};
1080 ```
1081
1082
1083 ## `match_block_trailing_comma`
1084
1085 Put a trailing comma after a block based match arm (non-block arms are not affected)
1086
1087 - **Default value**: `false`
1088 - **Possible values**: `true`, `false`
1089 - **Stable**: No
1090
1091 #### `false` (default):
1092
1093 ```rust
1094 fn main() {
1095     match lorem {
1096         Lorem::Ipsum => {
1097             println!("ipsum");
1098         }
1099         Lorem::Dolor => println!("dolor"),
1100     }
1101 }
1102 ```
1103
1104 #### `true`:
1105
1106 ```rust
1107 fn main() {
1108     match lorem {
1109         Lorem::Ipsum => {
1110             println!("ipsum");
1111         },
1112         Lorem::Dolor => println!("dolor"),
1113     }
1114 }
1115 ```
1116
1117 See also: [`trailing_comma`](#trailing_comma), [`match_arm_blocks`](#match_arm_blocks).
1118
1119 ## `max_width`
1120
1121 Maximum width of each line
1122
1123 - **Default value**: `100`
1124 - **Possible values**: any positive integer
1125 - **Stable**: Yes
1126
1127 See also [`error_on_line_overflow`](#error_on_line_overflow).
1128
1129 ## `merge_derives`
1130
1131 Merge multiple derives into a single one.
1132
1133 - **Default value**: `true`
1134 - **Possible values**: `true`, `false`
1135 - **Stable**: Yes
1136
1137 #### `true` (default):
1138
1139 ```rust
1140 #[derive(Eq, PartialEq, Debug, Copy, Clone)]
1141 pub enum Foo {}
1142 ```
1143
1144 #### `false`:
1145
1146 ```rust
1147 #[derive(Eq, PartialEq)]
1148 #[derive(Debug)]
1149 #[derive(Copy, Clone)]
1150 pub enum Foo {}
1151 ```
1152
1153 ## `force_multiline_blocks`
1154
1155 Force multiline closure and match arm bodies to be wrapped in a block
1156
1157 - **Default value**: `false`
1158 - **Possible values**: `false`, `true`
1159 - **Stable**: No
1160
1161 #### `false` (default):
1162
1163 ```rust
1164 fn main() {
1165     result.and_then(|maybe_value| match maybe_value {
1166         None => foo(),
1167         Some(value) => bar(),
1168     });
1169
1170     match lorem {
1171         None => if ipsum {
1172             println!("Hello World");
1173         },
1174         Some(dolor) => foo(),
1175     }
1176 }
1177 ```
1178
1179 #### `true`:
1180
1181 ```rust
1182 fn main() {
1183     result.and_then(|maybe_value| {
1184         match maybe_value {
1185             None => foo(),
1186             Some(value) => bar(),
1187         }
1188     });
1189
1190     match lorem {
1191         None => {
1192             if ipsum {
1193                 println!("Hello World");
1194             }
1195         }
1196         Some(dolor) => foo(),
1197     }
1198 }
1199 ```
1200
1201
1202 ## `newline_style`
1203
1204 Unix or Windows line endings
1205
1206 - **Default value**: `"Unix"`
1207 - **Possible values**: `"Native"`, `"Unix"`, `"Windows"`
1208 - **Stable**: Yes
1209
1210 ## `normalize_comments`
1211
1212 Convert /* */ comments to // comments where possible
1213
1214 - **Default value**: `false`
1215 - **Possible values**: `true`, `false`
1216 - **Stable**: Yes
1217
1218 #### `false` (default):
1219
1220 ```rust
1221 // Lorem ipsum:
1222 fn dolor() -> usize {}
1223
1224 /* sit amet: */
1225 fn adipiscing() -> usize {}
1226 ```
1227
1228 #### `true`:
1229
1230 ```rust
1231 // Lorem ipsum:
1232 fn dolor() -> usize {}
1233
1234 // sit amet:
1235 fn adipiscing() -> usize {}
1236 ```
1237
1238 ## `reorder_imported_names`
1239
1240 Reorder lists of names in import statements alphabetically
1241
1242 - **Default value**: `false`
1243 - **Possible values**: `true`, `false`
1244 - **Stable**: No
1245
1246 #### `false` (default):
1247
1248 ```rust
1249 use super::{lorem, ipsum, dolor, sit};
1250 ```
1251
1252 #### `true`:
1253
1254 ```rust
1255 use super::{dolor, ipsum, lorem, sit};
1256 ```
1257
1258 See also [`reorder_imports`](#reorder_imports).
1259
1260 ## `reorder_imports`
1261
1262 Reorder import statements alphabetically
1263
1264 - **Default value**: `false`
1265 - **Possible values**: `true`, `false`
1266 - **Stable**: No
1267
1268 #### `false` (default):
1269
1270 ```rust
1271 use lorem;
1272 use ipsum;
1273 use dolor;
1274 use sit;
1275 ```
1276
1277 #### `true`:
1278
1279 ```rust
1280 use dolor;
1281 use ipsum;
1282 use lorem;
1283 use sit;
1284 ```
1285
1286 See also [`reorder_imported_names`](#reorder_imported_names), [`reorder_imports_in_group`](#reorder_imports_in_group).
1287
1288 ## `reorder_imports_in_group`
1289
1290 Reorder import statements in group
1291
1292 - **Default value**: `false`
1293 - **Possible values**: `true`, `false`
1294 - **Stable**: No
1295
1296 **Note:** This option takes effect only when [`reorder_imports`](#reorder_imports) is set to `true`.
1297
1298 #### `false` (default):
1299
1300 ```rust
1301 use std::mem;
1302 use std::io;
1303
1304 use lorem;
1305 use ipsum;
1306 use dolor;
1307 use sit;
1308 ```
1309
1310 #### `true`:
1311
1312 ```rust
1313 use std::io;
1314 use std::mem;
1315
1316 use dolor;
1317 use ipsum;
1318 use lorem;
1319 use sit;
1320 ```
1321
1322 See also [`reorder_imports`](#reorder_imports).
1323
1324 ## `reorder_extern_crates`
1325
1326 Reorder `extern crate` statements alphabetically
1327
1328 - **Default value**: `true`
1329 - **Possible values**: `true`, `false`
1330 - **Stable**: No
1331
1332 #### `true` (default):
1333
1334 ```rust
1335 extern crate dolor;
1336 extern crate ipsum;
1337 extern crate lorem;
1338 extern crate sit;
1339 ```
1340
1341 #### `false`:
1342
1343 ```rust
1344 extern crate lorem;
1345 extern crate ipsum;
1346 extern crate dolor;
1347 extern crate sit;
1348 ```
1349
1350 See also [`reorder_extern_crates_in_group`](#reorder_extern_crates_in_group).
1351
1352 ## `reorder_extern_crates_in_group`
1353
1354 Reorder `extern crate` statements in group
1355
1356 - **Default value**: `true`
1357 - **Possible values**: `true`, `false`
1358 - **Stable**: No
1359
1360 **Note:** This option takes effect only when [`reorder_imports`](#reorder_imports) is set to `true`.
1361
1362 #### `true` (default):
1363
1364 ```rust
1365 extern crate a;
1366 extern crate b;
1367
1368 extern crate dolor;
1369 extern crate ipsum;
1370 extern crate lorem;
1371 extern crate sit;
1372 ```
1373
1374 #### `false`:
1375
1376 ```rust
1377 extern crate b;
1378 extern crate a;
1379
1380 extern crate lorem;
1381 extern crate ipsum;
1382 extern crate dolor;
1383 extern crate sit;
1384 ```
1385
1386 See also [`reorder_extern_crates`](#reorder_extern_crates).
1387
1388 ## `report_todo`
1389
1390 Report `TODO` items in comments.
1391
1392 - **Default value**: `"Never"`
1393 - **Possible values**: `"Always"`, `"Unnumbered"`, `"Never"`
1394 - **Stable**: No
1395
1396 Warns about any comments containing `TODO` in them when set to `"Always"`. If
1397 it contains a `#X` (with `X` being a number) in parentheses following the
1398 `TODO`, `"Unnumbered"` will ignore it.
1399
1400 See also [`report_fixme`](#report_fixme).
1401
1402 ## `report_fixme`
1403
1404 Report `FIXME` items in comments.
1405
1406 - **Default value**: `"Never"`
1407 - **Possible values**: `"Always"`, `"Unnumbered"`, `"Never"`
1408 - **Stable**: No
1409
1410 Warns about any comments containing `FIXME` in them when set to `"Always"`. If
1411 it contains a `#X` (with `X` being a number) in parentheses following the
1412 `FIXME`, `"Unnumbered"` will ignore it.
1413
1414 See also [`report_todo`](#report_todo).
1415
1416
1417 ## `skip_children`
1418
1419 Don't reformat out of line modules
1420
1421 - **Default value**: `false`
1422 - **Possible values**: `true`, `false`
1423 - **Stable**: No
1424
1425 ## `space_after_colon`
1426
1427 Leave a space after the colon.
1428
1429 - **Default value**: `true`
1430 - **Possible values**: `true`, `false`
1431 - **Stable**: No
1432
1433 #### `true` (default):
1434
1435 ```rust
1436 fn lorem<T: Eq>(t: T) {
1437     let lorem: Dolor = Lorem {
1438         ipsum: dolor,
1439         sit: amet,
1440     };
1441 }
1442 ```
1443
1444 #### `false`:
1445
1446 ```rust
1447 fn lorem<T:Eq>(t:T) {
1448     let lorem:Dolor = Lorem {
1449         ipsum:dolor,
1450         sit:amet,
1451     };
1452 }
1453 ```
1454
1455 See also: [`space_before_colon`](#space_before_colon).
1456
1457 ## `space_before_colon`
1458
1459 Leave a space before the colon.
1460
1461 - **Default value**: `false`
1462 - **Possible values**: `true`, `false`
1463 - **Stable**: No
1464
1465 #### `false` (default):
1466
1467 ```rust
1468 fn lorem<T: Eq>(t: T) {
1469     let lorem: Dolor = Lorem {
1470         ipsum: dolor,
1471         sit: amet,
1472     };
1473 }
1474 ```
1475
1476 #### `true`:
1477
1478 ```rust
1479 fn lorem<T : Eq>(t : T) {
1480     let lorem : Dolor = Lorem {
1481         ipsum : dolor,
1482         sit : amet,
1483     };
1484 }
1485 ```
1486
1487 See also: [`space_after_colon`](#space_after_colon).
1488
1489 ## `struct_field_align_threshold`
1490
1491 The maximum diff of width between struct fields to be aligned with each other.
1492
1493 - **Default value** : 0
1494 - **Possible values**: any positive integer
1495 - **Stable**: No
1496
1497 #### `0` (default):
1498
1499 ```rust
1500 struct Foo {
1501     x: u32,
1502     yy: u32,
1503     zzz: u32,
1504 }
1505 ```
1506
1507 #### `20`:
1508
1509 ```rust
1510 struct Foo {
1511     x:   u32,
1512     yy:  u32,
1513     zzz: u32,
1514 }
1515 ```
1516
1517 ## `spaces_around_ranges`
1518
1519 Put spaces around the .., ..=, and ... range operators
1520
1521 - **Default value**: `false`
1522 - **Possible values**: `true`, `false`
1523 - **Stable**: No
1524
1525 #### `false` (default):
1526
1527 ```rust
1528 fn main() {
1529     let lorem = 0..10;
1530     let ipsum = 0..=10;
1531
1532     match lorem {
1533         1..5 => foo(),
1534         _ => bar,
1535     }
1536
1537     match lorem {
1538         1..=5 => foo(),
1539         _ => bar,
1540     }
1541
1542     match lorem {
1543         1...5 => foo(),
1544         _ => bar,
1545     }
1546 }
1547 ```
1548
1549 #### `true`:
1550
1551 ```rust
1552 fn main() {
1553     let lorem = 0 .. 10;
1554     let ipsum = 0 ..= 10;
1555
1556     match lorem {
1557         1 .. 5 => foo(),
1558         _ => bar,
1559     }
1560
1561     match lorem {
1562         1 ..= 5 => foo(),
1563         _ => bar,
1564     }
1565
1566     match lorem {
1567         1 ... 5 => foo(),
1568         _ => bar,
1569     }
1570 }
1571 ```
1572
1573 ## `spaces_within_parens_and_brackets`
1574
1575 Put spaces within non-empty generic arguments, parentheses, and square brackets
1576
1577 - **Default value**: `false`
1578 - **Possible values**: `true`, `false`
1579 - **Stable**: No
1580
1581 #### `false` (default):
1582
1583 ```rust
1584 // generic arguments
1585 fn lorem<T: Eq>(t: T) {
1586     // body
1587 }
1588
1589 // non-empty parentheses
1590 fn lorem<T: Eq>(t: T) {
1591     let lorem = (ipsum, dolor);
1592 }
1593
1594 // non-empty square brackets
1595 fn lorem<T: Eq>(t: T) {
1596     let lorem: [usize; 2] = [ipsum, dolor];
1597 }
1598 ```
1599
1600 #### `true`:
1601
1602 ```rust
1603 // generic arguments
1604 fn lorem< T: Eq >( t: T ) {
1605     // body
1606 }
1607
1608 // non-empty parentheses
1609 fn lorem< T: Eq >( t: T ) {
1610     let lorem = ( ipsum, dolor );
1611 }
1612
1613 // non-empty square brackets
1614 fn lorem< T: Eq >( t: T ) {
1615     let lorem: [ usize; 2 ] = [ ipsum, dolor ];
1616 }
1617 ```
1618
1619 ## `struct_lit_single_line`
1620
1621 Put small struct literals on a single line
1622
1623 - **Default value**: `true`
1624 - **Possible values**: `true`, `false`
1625 - **Stable**: No
1626
1627 #### `true` (default):
1628
1629 ```rust
1630 let lorem = Lorem { ipsum: dolor, sit: amet };
1631 ```
1632
1633 #### `false`:
1634
1635 ```rust
1636 fn main() {
1637     let lorem = Lorem {
1638         ipsum: dolor,
1639         sit: amet,
1640     };
1641 }
1642 ```
1643
1644 See also: [`indent_style`](#indent_style).
1645
1646
1647 ## `tab_spaces`
1648
1649 Number of spaces per tab
1650
1651 - **Default value**: `4`
1652 - **Possible values**: any positive integer
1653 - **Stable**: Yes
1654
1655 #### `4` (default):
1656
1657 ```rust
1658 fn lorem() {
1659     let ipsum = dolor();
1660     let sit = vec![
1661         "amet consectetur adipiscing elit amet consectetur adipiscing elit amet consectetur.",
1662     ];
1663 }
1664 ```
1665
1666 #### `2`:
1667
1668 ```rust
1669 fn lorem() {
1670   let ipsum = dolor();
1671   let sit = vec![
1672     "amet consectetur adipiscing elit amet consectetur adipiscing elit amet consectetur.",
1673   ];
1674 }
1675 ```
1676
1677 See also: [`hard_tabs`](#hard_tabs).
1678
1679
1680 ## `trailing_comma`
1681
1682 How to handle trailing commas for lists
1683
1684 - **Default value**: `"Vertical"`
1685 - **Possible values**: `"Always"`, `"Never"`, `"Vertical"`
1686 - **Stable**: No
1687
1688 #### `"Vertical"` (default):
1689
1690 ```rust
1691 fn main() {
1692     let Lorem { ipsum, dolor, sit } = amet;
1693     let Lorem {
1694         ipsum,
1695         dolor,
1696         sit,
1697         amet,
1698         consectetur,
1699         adipiscing,
1700     } = elit;
1701 }
1702 ```
1703
1704 #### `"Always"`:
1705
1706 ```rust
1707 fn main() {
1708     let Lorem { ipsum, dolor, sit, } = amet;
1709     let Lorem {
1710         ipsum,
1711         dolor,
1712         sit,
1713         amet,
1714         consectetur,
1715         adipiscing,
1716     } = elit;
1717 }
1718 ```
1719
1720 #### `"Never"`:
1721
1722 ```rust
1723 fn main() {
1724     let Lorem { ipsum, dolor, sit } = amet;
1725     let Lorem {
1726         ipsum,
1727         dolor,
1728         sit,
1729         amet,
1730         consectetur,
1731         adipiscing
1732     } = elit;
1733 }
1734 ```
1735
1736 See also: [`match_block_trailing_comma`](#match_block_trailing_comma).
1737
1738 ## `trailing_semicolon`
1739
1740 Add trailing semicolon after break, continue and return
1741
1742 - **Default value**: `true`
1743 - **Possible values**: `true`, `false`
1744 - **Stable**: No
1745
1746 #### `true` (default):
1747 ```rust
1748 fn foo() -> usize {
1749     return 0;
1750 }
1751 ```
1752
1753 #### `false`:
1754 ```rust
1755 fn foo() -> usize {
1756     return 0
1757 }
1758 ```
1759
1760 ## `type_punctuation_density`
1761
1762 Determines if `+` or `=` are wrapped in spaces in the punctuation of types
1763
1764 - **Default value**: `"Wide"`
1765 - **Possible values**: `"Compressed"`, `"Wide"`
1766 - **Stable**: No
1767
1768 #### `"Wide"` (default):
1769
1770 ```rust
1771 fn lorem<Ipsum: Dolor + Sit = Amet>() {
1772     // body
1773 }
1774 ```
1775
1776 #### `"Compressed"`:
1777
1778 ```rust
1779 fn lorem<Ipsum: Dolor+Sit=Amet>() {
1780     // body
1781 }
1782 ```
1783
1784 ## `use_try_shorthand`
1785
1786 Replace uses of the try! macro by the ? shorthand
1787
1788 - **Default value**: `false`
1789 - **Possible values**: `true`, `false`
1790 - **Stable**: No
1791
1792 #### `false` (default):
1793
1794 ```rust
1795 fn main() {
1796     let lorem = try!(ipsum.map(|dolor| dolor.sit()));
1797 }
1798 ```
1799
1800 #### `true`:
1801
1802 ```rust
1803 fn main() {
1804     let lorem = ipsum.map(|dolor| dolor.sit())?;
1805 }
1806 ```
1807
1808
1809 ## `wrap_comments`
1810
1811 Break comments to fit on the line
1812
1813 - **Default value**: `false`
1814 - **Possible values**: `true`, `false`
1815 - **Stable**: Yes
1816
1817 #### `false` (default):
1818
1819 ```rust
1820 // 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.
1821 ```
1822
1823 #### `true`:
1824
1825 ```rust
1826 // Lorem ipsum dolor sit amet, consectetur adipiscing elit,
1827 // sed do eiusmod tempor incididunt ut labore et dolore
1828 // magna aliqua. Ut enim ad minim veniam, quis nostrud
1829 // exercitation ullamco laboris nisi ut aliquip ex ea
1830 // commodo consequat.
1831 ```
1832
1833 ## `match_arm_blocks`
1834
1835 Wrap the body of arms in blocks when it does not fit on the same line with the pattern of arms
1836
1837 - **Default value**: `true`
1838 - **Possible values**: `true`, `false`
1839 - **Stable**: No
1840
1841 #### `true` (default):
1842
1843 ```rust
1844 fn main() {
1845     match lorem {
1846         true => {
1847             foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(x)
1848         }
1849         false => println!("{}", sit),
1850     }
1851 }
1852 ```
1853
1854 #### `false`:
1855
1856 ```rust
1857 fn main() {
1858     match lorem {
1859         true =>
1860             foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(x),
1861         false => println!("{}", sit),
1862     }
1863 }
1864 ```
1865
1866 See also: [`match_block_trailing_comma`](#match_block_trailing_comma).
1867
1868 ## `write_mode`
1869
1870 What Write Mode to use when none is supplied: Replace, Overwrite, Display, Diff, Coverage
1871
1872 - **Default value**: `"Overwrite"`
1873 - **Possible values**: `"Checkstyle"`, `"Coverage"`, `"Diff"`, `"Display"`, `"Overwrite"`, `"Plain"`, `"Replace"`
1874 - **Stable**: No
1875
1876 ## `blank_lines_upper_bound`
1877
1878 Maximum number of blank lines which can be put between items. If more than this number of consecutive empty
1879 lines are found, they are trimmed down to match this integer.
1880
1881 - **Default value**: `1`
1882 - **Possible values**: *unsigned integer*
1883 - **Stable**: No
1884
1885 ### Example
1886 Original Code:
1887
1888 ```rust
1889 fn foo() {
1890     println!("a");
1891 }
1892
1893
1894
1895 fn bar() {
1896     println!("b");
1897
1898
1899     println!("c");
1900 }
1901 ```
1902
1903 #### `1` (default):
1904 ```rust
1905 fn foo() {
1906     println!("a");
1907 }
1908
1909 fn bar() {
1910     println!("b");
1911
1912     println!("c");
1913 }
1914 ```
1915
1916 #### `2` (default):
1917 ```rust
1918 fn foo() {
1919     println!("a");
1920 }
1921
1922
1923 fn bar() {
1924     println!("b");
1925
1926
1927     println!("c");
1928 }
1929 ```
1930
1931 See also: [`blank_lines_lower_bound`](#blank_lines_lower_bound)
1932
1933 ## `blank_lines_lower_bound`
1934
1935 Minimum number of blank lines which must be put between items. If two items have fewer blank lines between
1936 them, additional blank lines are inserted.
1937
1938 - **Default value**: `0`
1939 - **Possible values**: *unsigned integer*
1940 - **Stable**: No
1941
1942 ### Example
1943 Original Code (rustfmt will not change it with the default value of `0`):
1944
1945 ```rust
1946 fn foo() {
1947     println!("a");
1948 }
1949 fn bar() {
1950     println!("b");
1951     println!("c");
1952 }
1953 ```
1954
1955 #### `1`
1956 ```rust
1957 fn foo() {
1958
1959     println!("a");
1960 }
1961
1962 fn bar() {
1963
1964     println!("b");
1965
1966     println!("c");
1967 }
1968 ```