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