]> git.lizzy.rs Git - rust.git/blob - Configurations.md
Fixing `brace_style="SameLineWhere"` structs and enums snippet
[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 T: Eq
787 {
788     sit: T,
789 }
790 ```
791
792 #### `"AlwaysNextLine"`:
793
794 ```rust
795 struct Lorem
796 {
797     ipsum: bool,
798 }
799
800 struct Dolor<T>
801 where
802     T: Eq,
803 {
804     sit: T,
805 }
806 ```
807
808 #### `"PreferSameLine"`:
809
810 ```rust
811 struct Lorem {
812     ipsum: bool,
813 }
814
815 struct Dolor<T>
816     where T: Eq {
817     sit: T,
818 }
819 ```
820
821
822 ## `empty_item_single_line`
823
824 Put empty-body functions and impls on a single line
825
826 - **Default value**: `true`
827 - **Possible values**: `true`, `false`
828 - **Stable**: No
829
830 #### `true` (default):
831
832 ```rust
833 fn lorem() {}
834
835 impl Lorem {}
836 ```
837
838 #### `false`:
839
840 ```rust
841 fn lorem() {
842 }
843
844 impl Lorem {
845 }
846 ```
847
848 See also [`brace_style`](#brace_style), [`control_brace_style`](#control_brace_style).
849
850
851 ## `fn_single_line`
852
853 Put single-expression functions on a single line
854
855 - **Default value**: `false`
856 - **Possible values**: `true`, `false`
857 - **Stable**: No
858
859 #### `false` (default):
860
861 ```rust
862 fn lorem() -> usize {
863     42
864 }
865
866 fn lorem() -> usize {
867     let ipsum = 42;
868     ipsum
869 }
870 ```
871
872 #### `true`:
873
874 ```rust
875 fn lorem() -> usize { 42 }
876
877 fn lorem() -> usize {
878     let ipsum = 42;
879     ipsum
880 }
881 ```
882
883 See also [`control_brace_style`](#control_brace_style).
884
885
886 ## `where_single_line`
887
888 To force single line where layout
889
890 - **Default value**: `false`
891 - **Possible values**: `true`, `false`
892 - **Stable**: No
893
894 #### `false` (default):
895
896 ```rust
897 impl<T> Lorem for T
898 where
899     Option<T>: Ipsum,
900 {
901     ...
902 }
903 ```
904
905 #### `true`:
906
907 ```rust
908 impl<T> Lorem for T
909 where Option<T>: Ipsum {
910     ...
911 }
912 ```
913
914 See also [`brace_style`](#brace_style), [`control_brace_style`](#control_brace_style).
915
916
917 ## `force_explicit_abi`
918
919 Always print the abi for extern items
920
921 - **Default value**: `true`
922 - **Possible values**: `true`, `false`
923 - **Stable**: Yes
924
925 **Note:** Non-"C" ABIs are always printed. If `false` then "C" is removed.
926
927 #### `true` (default):
928
929 ```rust
930 extern "C" {
931     pub static lorem: c_int;
932 }
933 ```
934
935 #### `false`:
936
937 ```rust
938 extern {
939     pub static lorem: c_int;
940 }
941 ```
942
943 ## `format_strings`
944
945 Format string literals where necessary
946
947 - **Default value**: `false`
948 - **Possible values**: `true`, `false`
949 - **Stable**: No
950
951 #### `false` (default):
952
953 ```rust
954 let lorem = "ipsum dolor sit amet consectetur adipiscing elit lorem ipsum dolor sit";
955 ```
956
957 #### `true`:
958
959 ```rust
960 let lorem =
961     "ipsum dolor sit amet consectetur \
962      adipiscing elit lorem ipsum dolor sit";
963 ```
964
965 See also [`max_width`](#max_width).
966
967 ## `hard_tabs`
968
969 Use tab characters for indentation, spaces for alignment
970
971 - **Default value**: `false`
972 - **Possible values**: `true`, `false`
973 - **Stable**: Yes
974
975 #### `false` (default):
976
977 ```rust
978 fn lorem() -> usize {
979     42 // spaces before 42
980 }
981 ```
982
983 #### `true`:
984
985 ```rust
986 fn lorem() -> usize {
987         42 // tabs before 42
988 }
989 ```
990
991 See also: [`tab_spaces`](#tab_spaces).
992
993
994 ## `imports_indent`
995
996 Indent style of imports
997
998 - **Default Value**: `"Visual"`
999 - **Possible values**: `"Block"`, `"Visual"`
1000 - **Stable**: No
1001
1002 #### `"Visual"` (default):
1003
1004 ```rust
1005 use foo::{xxx,
1006           yyy,
1007           zzz};
1008 ```
1009
1010 #### `"Block"`:
1011
1012 ```rust
1013 use foo::{
1014     xxx,
1015     yyy,
1016     zzz,
1017 };
1018 ```
1019
1020 See also: [`imports_layout`](#imports_layout).
1021
1022 ## `imports_layout`
1023
1024 Item layout inside a imports block
1025
1026 - **Default value**: "Mixed"
1027 - **Possible values**: "Horizontal", "HorizontalVertical", "Mixed", "Vertical"
1028 - **Stable**: No
1029
1030 #### `"Mixed"` (default):
1031
1032 ```rust
1033 use foo::{xxx, yyy, zzz};
1034
1035 use foo::{aaa, bbb, ccc,
1036           ddd, eee, fff};
1037 ```
1038
1039 #### `"Horizontal"`:
1040
1041 **Note**: This option forces all imports onto one line and may exceed `max_width`.
1042
1043 ```rust
1044 use foo::{xxx, yyy, zzz};
1045
1046 use foo::{aaa, bbb, ccc, ddd, eee, fff};
1047 ```
1048
1049 #### `"HorizontalVertical"`:
1050
1051 ```rust
1052 use foo::{xxx, yyy, zzz};
1053
1054 use foo::{aaa,
1055           bbb,
1056           ccc,
1057           ddd,
1058           eee,
1059           fff};
1060 ```
1061
1062 #### `"Vertical"`:
1063
1064 ```rust
1065 use foo::{xxx,
1066           yyy,
1067           zzz};
1068
1069 use foo::{aaa,
1070           bbb,
1071           ccc,
1072           ddd,
1073           eee,
1074           fff};
1075 ```
1076
1077
1078 ## `match_block_trailing_comma`
1079
1080 Put a trailing comma after a block based match arm (non-block arms are not affected)
1081
1082 - **Default value**: `false`
1083 - **Possible values**: `true`, `false`
1084 - **Stable**: No
1085
1086 #### `false` (default):
1087
1088 ```rust
1089 match lorem {
1090     Lorem::Ipsum => {
1091         println!("ipsum");
1092     }
1093     Lorem::Dolor => println!("dolor"),
1094 }
1095 ```
1096
1097 #### `true`:
1098
1099 ```rust
1100 match lorem {
1101     Lorem::Ipsum => {
1102         println!("ipsum");
1103     },
1104     Lorem::Dolor => println!("dolor"),
1105 }
1106 ```
1107
1108 See also: [`trailing_comma`](#trailing_comma), [`match_arm_blocks`](#match_arm_blocks).
1109
1110 ## `max_width`
1111
1112 Maximum width of each line
1113
1114 - **Default value**: `100`
1115 - **Possible values**: any positive integer
1116 - **Stable**: Yes
1117
1118 See also [`error_on_line_overflow`](#error_on_line_overflow).
1119
1120 ## `merge_derives`
1121
1122 Merge multiple derives into a single one.
1123
1124 - **Default value**: `true`
1125 - **Possible values**: `true`, `false`
1126 - **Stable**: Yes
1127
1128 #### `true` (default):
1129
1130 ```rust
1131 #[derive(Eq, PartialEq, Debug, Copy, Clone)]
1132 pub enum Foo {}
1133 ```
1134
1135 #### `false`:
1136
1137 ```rust
1138 #[derive(Eq, PartialEq)]
1139 #[derive(Debug)]
1140 #[derive(Copy, Clone)]
1141 pub enum Foo {}
1142 ```
1143
1144 ## `force_multiline_blocks`
1145
1146 Force multiline closure and match arm bodies to be wrapped in a block
1147
1148 - **Default value**: `false`
1149 - **Possible values**: `false`, `true`
1150 - **Stable**: No
1151
1152 #### `false` (default):
1153
1154 ```rust
1155 result.and_then(|maybe_value| match maybe_value {
1156     None => ...,
1157     Some(value) => ...,
1158 })
1159
1160 match lorem {
1161     None => if ipsum {
1162         println!("Hello World");
1163     },
1164     Some(dolor) => ...,
1165 }
1166 ```
1167
1168 #### `true`:
1169
1170 ```rust
1171
1172 result.and_then(|maybe_value| {
1173     match maybe_value {
1174         None => ...,
1175         Some(value) => ...,
1176     }
1177 })
1178
1179 match lorem {
1180     None => {
1181         if ipsum {
1182             println!("Hello World");
1183         }
1184     }
1185     Some(dolor) => ...,
1186 }
1187 ```
1188
1189
1190 ## `newline_style`
1191
1192 Unix or Windows line endings
1193
1194 - **Default value**: `"Unix"`
1195 - **Possible values**: `"Native"`, `"Unix"`, `"Windows"`
1196 - **Stable**: Yes
1197
1198 ## `normalize_comments`
1199
1200 Convert /* */ comments to // comments where possible
1201
1202 - **Default value**: `false`
1203 - **Possible values**: `true`, `false`
1204 - **Stable**: Yes
1205
1206 #### `false` (default):
1207
1208 ```rust
1209 // Lorem ipsum:
1210 fn dolor() -> usize {}
1211
1212 /* sit amet: */
1213 fn adipiscing() -> usize {}
1214 ```
1215
1216 #### `true`:
1217
1218 ```rust
1219 // Lorem ipsum:
1220 fn dolor() -> usize {}
1221
1222 // sit amet:
1223 fn adipiscing() -> usize {}
1224 ```
1225
1226 ## `reorder_imported_names`
1227
1228 Reorder lists of names in import statements alphabetically
1229
1230 - **Default value**: `false`
1231 - **Possible values**: `true`, `false`
1232 - **Stable**: No
1233
1234 #### `false` (default):
1235
1236 ```rust
1237 use super::{lorem, ipsum, dolor, sit};
1238 ```
1239
1240 #### `true`:
1241
1242 ```rust
1243 use super::{dolor, ipsum, lorem, sit};
1244 ```
1245
1246 See also [`reorder_imports`](#reorder_imports).
1247
1248 ## `reorder_imports`
1249
1250 Reorder import statements alphabetically
1251
1252 - **Default value**: `false`
1253 - **Possible values**: `true`, `false`
1254 - **Stable**: No
1255
1256 #### `false` (default):
1257
1258 ```rust
1259 use lorem;
1260 use ipsum;
1261 use dolor;
1262 use sit;
1263 ```
1264
1265 #### `true`:
1266
1267 ```rust
1268 use dolor;
1269 use ipsum;
1270 use lorem;
1271 use sit;
1272 ```
1273
1274 See also [`reorder_imported_names`](#reorder_imported_names), [`reorder_imports_in_group`](#reorder_imports_in_group).
1275
1276 ## `reorder_imports_in_group`
1277
1278 Reorder import statements in group
1279
1280 - **Default value**: `false`
1281 - **Possible values**: `true`, `false`
1282 - **Stable**: No
1283
1284 **Note:** This option takes effect only when [`reorder_imports`](#reorder_imports) is set to `true`.
1285
1286 #### `false` (default):
1287
1288 ```rust
1289 use std::mem;
1290 use std::io;
1291
1292 use lorem;
1293 use ipsum;
1294 use dolor;
1295 use sit;
1296 ```
1297
1298 #### `true`:
1299
1300 ```rust
1301 use std::io;
1302 use std::mem;
1303
1304 use dolor;
1305 use ipsum;
1306 use lorem;
1307 use sit;
1308 ```
1309
1310 See also [`reorder_imports`](#reorder_imports).
1311
1312 ## `reorder_extern_crates`
1313
1314 Reorder `extern crate` statements alphabetically
1315
1316 - **Default value**: `true`
1317 - **Possible values**: `true`, `false`
1318 - **Stable**: No
1319
1320 #### `true` (default):
1321
1322 ```rust
1323 extern crate dolor;
1324 extern crate ipsum;
1325 extern crate lorem;
1326 extern crate sit;
1327 ```
1328
1329 #### `false`:
1330
1331 ```rust
1332 extern crate lorem;
1333 extern crate ipsum;
1334 extern crate dolor;
1335 extern crate sit;
1336 ```
1337
1338 See also [`reorder_extern_crates_in_group`](#reorder_extern_crates_in_group).
1339
1340 ## `reorder_extern_crates_in_group`
1341
1342 Reorder `extern crate` statements in group
1343
1344 - **Default value**: `true`
1345 - **Possible values**: `true`, `false`
1346 - **Stable**: No
1347
1348 **Note:** This option takes effect only when [`reorder_imports`](#reorder_imports) is set to `true`.
1349
1350 #### `true` (default):
1351
1352 ```rust
1353 extern crate a;
1354 extern crate b;
1355
1356 extern crate dolor;
1357 extern crate ipsum;
1358 extern crate lorem;
1359 extern crate sit;
1360 ```
1361
1362 #### `false`:
1363
1364 ```rust
1365 extern crate b;
1366 extern crate a;
1367
1368 extern crate lorem;
1369 extern crate ipsum;
1370 extern crate dolor;
1371 extern crate sit;
1372 ```
1373
1374 See also [`reorder_extern_crates`](#reorder_extern_crates).
1375
1376 ## `report_todo`
1377
1378 Report `TODO` items in comments.
1379
1380 - **Default value**: `"Never"`
1381 - **Possible values**: `"Always"`, `"Unnumbered"`, `"Never"`
1382 - **Stable**: No
1383
1384 Warns about any comments containing `TODO` in them when set to `"Always"`. If
1385 it contains a `#X` (with `X` being a number) in parentheses following the
1386 `TODO`, `"Unnumbered"` will ignore it.
1387
1388 See also [`report_fixme`](#report_fixme).
1389
1390 ## `report_fixme`
1391
1392 Report `FIXME` items in comments.
1393
1394 - **Default value**: `"Never"`
1395 - **Possible values**: `"Always"`, `"Unnumbered"`, `"Never"`
1396 - **Stable**: No
1397
1398 Warns about any comments containing `FIXME` in them when set to `"Always"`. If
1399 it contains a `#X` (with `X` being a number) in parentheses following the
1400 `FIXME`, `"Unnumbered"` will ignore it.
1401
1402 See also [`report_todo`](#report_todo).
1403
1404
1405 ## `skip_children`
1406
1407 Don't reformat out of line modules
1408
1409 - **Default value**: `false`
1410 - **Possible values**: `true`, `false`
1411 - **Stable**: No
1412
1413 ## `space_after_colon`
1414
1415 Leave a space after the colon.
1416
1417 - **Default value**: `true`
1418 - **Possible values**: `true`, `false`
1419 - **Stable**: No
1420
1421 #### `true` (default):
1422
1423 ```rust
1424 fn lorem<T: Eq>(t: T) {
1425     let lorem: Dolor = Lorem {
1426         ipsum: dolor,
1427         sit: amet,
1428     };
1429 }
1430 ```
1431
1432 #### `false`:
1433
1434 ```rust
1435 fn lorem<T:Eq>(t:T) {
1436     let lorem:Dolor = Lorem {
1437         ipsum:dolor,
1438         sit:amet,
1439     };
1440 }
1441 ```
1442
1443 See also: [`space_before_colon`](#space_before_colon).
1444
1445 ## `space_before_colon`
1446
1447 Leave a space before the colon.
1448
1449 - **Default value**: `false`
1450 - **Possible values**: `true`, `false`
1451 - **Stable**: No
1452
1453 #### `false` (default):
1454
1455 ```rust
1456 fn lorem<T: Eq>(t: T) {
1457     let lorem: Dolor = Lorem {
1458         ipsum: dolor,
1459         sit: amet,
1460     };
1461 }
1462 ```
1463
1464 #### `true`:
1465
1466 ```rust
1467 fn lorem<T : Eq>(t : T) {
1468     let lorem : Dolor = Lorem {
1469         ipsum : dolor,
1470         sit : amet,
1471     };
1472 }
1473 ```
1474
1475 See also: [`space_after_colon`](#space_after_colon).
1476
1477 ## `struct_field_align_threshold`
1478
1479 The maximum diff of width between struct fields to be aligned with each other.
1480
1481 - **Default value** : 0
1482 - **Possible values**: any positive integer
1483 - **Stable**: No
1484
1485 #### `0` (default):
1486
1487 ```rust
1488 struct Foo {
1489     x: u32,
1490     yy: u32,
1491     zzz: u32,
1492 }
1493 ```
1494
1495 #### `20`:
1496
1497 ```rust
1498 struct Foo {
1499     x:   u32,
1500     yy:  u32,
1501     zzz: u32,
1502 }
1503 ```
1504
1505 ## `spaces_around_ranges`
1506
1507 Put spaces around the .. and ... range operators
1508
1509 - **Default value**: `false`
1510 - **Possible values**: `true`, `false`
1511 - **Stable**: No
1512
1513 #### `false` (default):
1514
1515 ```rust
1516 let lorem = 0..10;
1517 ```
1518
1519 #### `true`:
1520
1521 ```rust
1522 let lorem = 0 .. 10;
1523 ```
1524
1525 ## `spaces_within_parens_and_brackets`
1526
1527 Put spaces within non-empty generic arguments, parentheses, and square brackets
1528
1529 - **Default value**: `false`
1530 - **Possible values**: `true`, `false`
1531 - **Stable**: No
1532
1533 #### `false` (default):
1534
1535 ```rust
1536 // generic arguments
1537 fn lorem<T: Eq>(t: T) {
1538     // body
1539 }
1540
1541 // non-empty parentheses
1542 fn lorem<T: Eq>(t: T) {
1543     let lorem = (ipsum, dolor);
1544 }
1545
1546 // non-empty square brackets
1547 let lorem: [usize; 2] = [ipsum, dolor];
1548 ```
1549
1550 #### `true`:
1551
1552 ```rust
1553 // generic arguments
1554 fn lorem< T: Eq >(t: T) {
1555     // body
1556 }
1557
1558 // non-empty parentheses
1559 fn lorem<T: Eq>( t: T ) {
1560     let lorem = ( ipsum, dolor );
1561 }
1562
1563 // non-empty square brackets
1564 let lorem: [ usize; 2 ] = [ ipsum, dolor ];
1565 ```
1566
1567 ## `struct_lit_single_line`
1568
1569 Put small struct literals on a single line
1570
1571 - **Default value**: `true`
1572 - **Possible values**: `true`, `false`
1573 - **Stable**: No
1574
1575 #### `true` (default):
1576
1577 ```rust
1578 let lorem = Lorem { ipsum: dolor, sit: amet };
1579 ```
1580
1581 #### `false`:
1582
1583 ```rust
1584 let lorem = Lorem {
1585     ipsum: dolor,
1586     sit: amet,
1587 };
1588 ```
1589
1590 See also: [`indent_style`](#indent_style).
1591
1592
1593 ## `tab_spaces`
1594
1595 Number of spaces per tab
1596
1597 - **Default value**: `4`
1598 - **Possible values**: any positive integer
1599 - **Stable**: Yes
1600
1601 #### `4` (default):
1602
1603 ```rust
1604 fn lorem() {
1605     let ipsum = dolor();
1606     let sit = vec![
1607         "amet consectetur adipiscing elit."
1608     ];
1609 }
1610 ```
1611
1612 #### `2`:
1613
1614 ```rust
1615 fn lorem() {
1616   let ipsum = dolor();
1617   let sit = vec![
1618     "amet consectetur adipiscing elit."
1619   ];
1620 }
1621 ```
1622
1623 See also: [`hard_tabs`](#hard_tabs).
1624
1625
1626 ## `trailing_comma`
1627
1628 How to handle trailing commas for lists
1629
1630 - **Default value**: `"Vertical"`
1631 - **Possible values**: `"Always"`, `"Never"`, `"Vertical"`
1632 - **Stable**: No
1633
1634 #### `"Vertical"` (default):
1635
1636 ```rust
1637 let Lorem { ipsum, dolor, sit } = amet;
1638 let Lorem {
1639     ipsum,
1640     dolor,
1641     sit,
1642     amet,
1643     consectetur,
1644     adipiscing,
1645 } = elit;
1646 ```
1647
1648 #### `"Always"`:
1649
1650 ```rust
1651 let Lorem { ipsum, dolor, sit, } = amet;
1652 let Lorem {
1653     ipsum,
1654     dolor,
1655     sit,
1656     amet,
1657     consectetur,
1658     adipiscing,
1659 } = elit;
1660 ```
1661
1662 #### `"Never"`:
1663
1664 ```rust
1665 let Lorem { ipsum, dolor, sit } = amet;
1666 let Lorem {
1667     ipsum,
1668     dolor,
1669     sit,
1670     amet,
1671     consectetur,
1672     adipiscing
1673 } = elit;
1674 ```
1675
1676 See also: [`match_block_trailing_comma`](#match_block_trailing_comma).
1677
1678 ## `trailing_semicolon`
1679
1680 Add trailing semicolon after break, continue and return
1681
1682 - **Default value**: `true`
1683 - **Possible values**: `true`, `false`
1684 - **Stable**: No
1685
1686 #### `true` (default):
1687 ```rust
1688 fn foo() -> usize {
1689     return 0;
1690 }
1691 ```
1692
1693 #### `false`:
1694 ```rust
1695 fn foo() -> usize {
1696     return 0
1697 }
1698 ```
1699
1700 ## `type_punctuation_density`
1701
1702 Determines if `+` or `=` are wrapped in spaces in the punctuation of types
1703
1704 - **Default value**: `"Wide"`
1705 - **Possible values**: `"Compressed"`, `"Wide"`
1706 - **Stable**: No
1707
1708 #### `"Wide"` (default):
1709
1710 ```rust
1711 fn lorem<Ipsum: Dolor + Sit = Amet>() {
1712         // body
1713 }
1714 ```
1715
1716 #### `"Compressed"`:
1717
1718 ```rust
1719 fn lorem<Ipsum: Dolor+Sit=Amet>() {
1720         // body
1721 }
1722 ```
1723
1724 ## `use_try_shorthand`
1725
1726 Replace uses of the try! macro by the ? shorthand
1727
1728 - **Default value**: `false`
1729 - **Possible values**: `true`, `false`
1730 - **Stable**: No
1731
1732 #### `false` (default):
1733
1734 ```rust
1735 let lorem = try!(ipsum.map(|dolor|dolor.sit()));
1736 ```
1737
1738 #### `true`:
1739
1740 ```rust
1741 let lorem = ipsum.map(|dolor| dolor.sit())?;
1742 ```
1743
1744
1745 ## `wrap_comments`
1746
1747 Break comments to fit on the line
1748
1749 - **Default value**: `false`
1750 - **Possible values**: `true`, `false`
1751 - **Stable**: Yes
1752
1753 #### `false` (default):
1754
1755 ```rust
1756 // 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.
1757 ```
1758
1759 #### `true`:
1760
1761 ```rust
1762 // Lorem ipsum dolor sit amet, consectetur adipiscing elit,
1763 // sed do eiusmod tempor incididunt ut labore et dolore
1764 // magna aliqua. Ut enim ad minim veniam, quis nostrud
1765 // exercitation ullamco laboris nisi ut aliquip ex ea
1766 // commodo consequat.
1767 ```
1768
1769 ## `match_arm_blocks`
1770
1771 Wrap the body of arms in blocks when it does not fit on the same line with the pattern of arms
1772
1773 - **Default value**: `true`
1774 - **Possible values**: `true`, `false`
1775 - **Stable**: No
1776
1777 #### `true` (default):
1778
1779 ```rust
1780 match lorem {
1781     true => {
1782         foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(x)
1783     }
1784     false => println!("{}", sit),
1785 }
1786 ```
1787
1788 #### `false`:
1789
1790 ```rust
1791 match lorem {
1792     true =>
1793         foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(x),
1794     false => println!("{}", sit),
1795 }
1796 ```
1797
1798 See also: [`match_block_trailing_comma`](#match_block_trailing_comma).
1799
1800 ## `write_mode`
1801
1802 What Write Mode to use when none is supplied: Replace, Overwrite, Display, Diff, Coverage
1803
1804 - **Default value**: `"Overwrite"`
1805 - **Possible values**: `"Checkstyle"`, `"Coverage"`, `"Diff"`, `"Display"`, `"Overwrite"`, `"Plain"`, `"Replace"`
1806 - **Stable**: No
1807
1808 ## `blank_lines_upper_bound`
1809
1810 Maximum number of blank lines which can be put between items. If more than this number of consecutive empty
1811 lines are found, they are trimmed down to match this integer.
1812
1813 - **Default value**: `1`
1814 - **Possible values**: *unsigned integer*
1815 - **Stable**: No
1816
1817 ### Example
1818 Original Code:
1819
1820 ```rust
1821 fn foo() {
1822     println!("a");
1823 }
1824
1825
1826
1827 fn bar() {
1828     println!("b");
1829
1830
1831     println!("c");
1832 }
1833 ```
1834
1835 #### `1` (default):
1836 ```rust
1837 fn foo() {
1838     println!("a");
1839 }
1840
1841 fn bar() {
1842     println!("b");
1843
1844     println!("c");
1845 }
1846 ```
1847
1848 #### `2` (default):
1849 ```rust
1850 fn foo() {
1851     println!("a");
1852 }
1853
1854
1855 fn bar() {
1856     println!("b");
1857
1858
1859     println!("c");
1860 }
1861 ```
1862
1863 See also: [`blank_lines_lower_bound`](#blank_lines_lower_bound)
1864
1865 ## `blank_lines_lower_bound`
1866
1867 Minimum number of blank lines which must be put between items. If two items have fewer blank lines between
1868 them, additional blank lines are inserted.
1869
1870 - **Default value**: `0`
1871 - **Possible values**: *unsigned integer*
1872 - **Stable**: No
1873
1874 ### Example
1875 Original Code (rustfmt will not change it with the default value of `0`):
1876
1877 ```rust
1878 fn foo() {
1879     println!("a");
1880 }
1881 fn bar() {
1882     println!("b");
1883     println!("c");
1884 }
1885 ```
1886
1887 #### `1`
1888 ```rust
1889 fn foo() {
1890
1891     println!("a");
1892 }
1893
1894 fn bar() {
1895
1896     println!("b");
1897
1898     println!("c");
1899 }
1900 ```