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