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