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