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