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