]> git.lizzy.rs Git - rust.git/blob - Configurations.md
Merge pull request #2213 from topecongiro/issue-2212
[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"`, `"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 #### `"Vertical"`:
700
701 ```rust
702 trait Lorem {
703     fn lorem(ipsum: Ipsum,
704              dolor: Dolor,
705              sit: Sit,
706              amet: Amet);
707
708     fn lorem(ipsum: Ipsum,
709              dolor: Dolor,
710              sit: Sit,
711              amet: Amet) {
712         // body
713     }
714
715     fn lorem(ipsum: Ipsum,
716              dolor: Dolor,
717              sit: Sit,
718              amet: Amet,
719              consectetur: Consectetur,
720              adipiscing: Adipiscing,
721              elit: Elit);
722
723     fn lorem(ipsum: Ipsum,
724              dolor: Dolor,
725              sit: Sit,
726              amet: Amet,
727              consectetur: Consectetur,
728              adipiscing: Adipiscing,
729              elit: Elit) {
730         // body
731     }
732 }
733 ```
734
735
736 ## `brace_style`
737
738 Brace style for items
739
740 - **Default value**: `"SameLineWhere"`
741 - **Possible values**: `"AlwaysNextLine"`, `"PreferSameLine"`, `"SameLineWhere"`
742
743 ### Functions
744
745 #### `"SameLineWhere"` (default):
746
747 ```rust
748 fn lorem() {
749     // body
750 }
751
752 fn lorem(ipsum: usize) {
753     // body
754 }
755
756 fn lorem<T>(ipsum: T)
757 where
758     T: Add + Sub + Mul + Div,
759 {
760     // body
761 }
762 ```
763
764 #### `"AlwaysNextLine"`:
765
766 ```rust
767 fn lorem()
768 {
769     // body
770 }
771
772 fn lorem(ipsum: usize)
773 {
774     // body
775 }
776
777 fn lorem<T>(ipsum: T)
778 where
779     T: Add + Sub + Mul + Div,
780 {
781     // body
782 }
783 ```
784
785 #### `"PreferSameLine"`:
786
787 ```rust
788 fn lorem() {
789     // body
790 }
791
792 fn lorem(ipsum: usize) {
793     // body
794 }
795
796 fn lorem<T>(ipsum: T)
797 where
798     T: Add + Sub + Mul + Div, {
799     // body
800 }
801 ```
802
803 ### Structs and enums
804
805 #### `"SameLineWhere"` (default):
806
807 ```rust
808 struct Lorem {
809     ipsum: bool,
810 }
811
812 struct Dolor<T>
813     where T: Eq
814 {
815     sit: T,
816 }
817 ```
818
819 #### `"AlwaysNextLine"`:
820
821 ```rust
822 struct Lorem
823 {
824     ipsum: bool,
825 }
826
827 struct Dolor<T>
828     where T: Eq
829 {
830     sit: T,
831 }
832 ```
833
834 #### `"PreferSameLine"`:
835
836 ```rust
837 struct Lorem {
838     ipsum: bool,
839 }
840
841 struct Dolor<T>
842     where T: Eq {
843     sit: T,
844 }
845 ```
846
847
848 ## `empty_item_single_line`
849
850 Put empty-body functions and impls on a single line
851
852 - **Default value**: `true`
853 - **Possible values**: `true`, `false`
854
855 #### `true` (default):
856
857 ```rust
858 fn lorem() {}
859
860 impl Lorem {}
861 ```
862
863 #### `false`:
864
865 ```rust
866 fn lorem() {
867 }
868
869 impl Lorem {
870 }
871 ```
872
873 See also [`brace_style`](#brace_style), [`control_brace_style`](#control_brace_style).
874
875
876 ## `fn_single_line`
877
878 Put single-expression functions on a single line
879
880 - **Default value**: `false`
881 - **Possible values**: `true`, `false`
882
883 #### `false` (default):
884
885 ```rust
886 fn lorem() -> usize {
887     42
888 }
889
890 fn lorem() -> usize {
891     let ipsum = 42;
892     ipsum
893 }
894 ```
895
896 #### `true`:
897
898 ```rust
899 fn lorem() -> usize { 42 }
900
901 fn lorem() -> usize {
902     let ipsum = 42;
903     ipsum
904 }
905 ```
906
907 See also [`control_brace_style`](#control_brace_style).
908
909 ## `force_explicit_abi`
910
911 Always print the abi for extern items
912
913 - **Default value**: `true`
914 - **Possible values**: `true`, `false`
915
916 **Note:** Non-"C" ABIs are always printed. If `false` then "C" is removed.
917
918 #### `true` (default):
919
920 ```rust
921 extern "C" {
922     pub static lorem: c_int;
923 }
924 ```
925
926 #### `false`:
927
928 ```rust
929 extern {
930     pub static lorem: c_int;
931 }
932 ```
933
934 ## `format_strings`
935
936 Format string literals where necessary
937
938 - **Default value**: `false`
939 - **Possible values**: `true`, `false`
940
941 #### `false` (default):
942
943 ```rust
944 let lorem = "ipsum dolor sit amet consectetur adipiscing elit lorem ipsum dolor sit";
945 ```
946
947 #### `true`:
948
949 ```rust
950 let lorem =
951     "ipsum dolor sit amet consectetur \
952      adipiscing elit lorem ipsum dolor sit";
953 ```
954
955 See also [`max_width`](#max_width).
956
957 ## `hard_tabs`
958
959 Use tab characters for indentation, spaces for alignment
960
961 - **Default value**: `false`
962 - **Possible values**: `true`, `false`
963
964 #### `false` (default):
965
966 ```rust
967 fn lorem() -> usize {
968     42 // spaces before 42
969 }
970 ```
971
972 #### `true`:
973
974 ```rust
975 fn lorem() -> usize {
976         42 // tabs before 42
977 }
978 ```
979
980 See also: [`tab_spaces`](#tab_spaces).
981
982
983 ## `imports_indent`
984
985 Indent style of imports
986
987 - **Default Value**: `"Visual"`
988 - **Possible values**: `"Block"`, `"Visual"`
989
990 #### `"Visual"` (default):
991
992 ```rust
993 use foo::{xxx,
994           yyy,
995           zzz};
996 ```
997
998 #### `"Block"`:
999
1000 ```rust
1001 use foo::{
1002     xxx,
1003     yyy,
1004     zzz,
1005 };
1006 ```
1007
1008 See also: [`imports_layout`](#imports_layout).
1009
1010 ## `imports_layout`
1011
1012 Item layout inside a imports block
1013
1014 - **Default value**: "Mixed"
1015 - **Possible values**: "Horizontal", "HorizontalVertical", "Mixed", "Vertical"
1016
1017 #### `"Mixed"` (default):
1018
1019 ```rust
1020 use foo::{xxx, yyy, zzz};
1021
1022 use foo::{aaa, bbb, ccc,
1023           ddd, eee, fff};
1024 ```
1025
1026 #### `"Horizontal"`:
1027
1028 **Note**: This option forces to put everything on one line and may exceeds `max_width`.
1029
1030 ```rust
1031 use foo::{xxx, yyy, zzz};
1032
1033 use foo::{aaa, bbb, ccc, ddd, eee, fff};
1034 ```
1035
1036 #### `"HorizontalVertical"`:
1037
1038 ```rust
1039 use foo::{xxx, yyy, zzz};
1040
1041 use foo::{aaa,
1042           bbb,
1043           ccc,
1044           ddd,
1045           eee,
1046           fff};
1047 ```
1048
1049 #### `"Vertical"`:
1050
1051 ```rust
1052 use foo::{xxx,
1053           yyy,
1054           zzz};
1055
1056 use foo::{aaa,
1057           bbb,
1058           ccc,
1059           ddd,
1060           eee,
1061           fff};
1062 ```
1063
1064
1065 ## `match_block_trailing_comma`
1066
1067 Put a trailing comma after a block based match arm (non-block arms are not affected)
1068
1069 - **Default value**: `false`
1070 - **Possible values**: `true`, `false`
1071
1072 #### `false` (default):
1073
1074 ```rust
1075 match lorem {
1076     Lorem::Ipsum => {
1077         println!("ipsum");
1078     }
1079     Lorem::Dolor => println!("dolor"),
1080 }
1081 ```
1082
1083 #### `true`:
1084
1085 ```rust
1086 match lorem {
1087     Lorem::Ipsum => {
1088         println!("ipsum");
1089     },
1090     Lorem::Dolor => println!("dolor"),
1091 }
1092 ```
1093
1094 See also: [`trailing_comma`](#trailing_comma), [`match_arm_blocks`](#match_arm_blocks).
1095
1096 ## `max_width`
1097
1098 Maximum width of each line
1099
1100 - **Default value**: `100`
1101 - **Possible values**: any positive integer
1102
1103 See also [`error_on_line_overflow`](#error_on_line_overflow).
1104
1105 ## `merge_derives`
1106
1107 Merge multiple derives into a single one.
1108
1109 - **Default value**: `true`
1110 - **Possible values**: `true`, `false`
1111
1112 #### `true` (default):
1113
1114 ```rust
1115 #[derive(Eq, PartialEq, Debug, Copy, Clone)]
1116 pub enum Foo {}
1117 ```
1118
1119 #### `false`:
1120
1121 ```rust
1122 #[derive(Eq, PartialEq)]
1123 #[derive(Debug)]
1124 #[derive(Copy, Clone)]
1125 pub enum Foo {}
1126 ```
1127
1128 ## `force_multiline_blocks`
1129
1130 Force multiline closure and match arm bodies to be wrapped in a block
1131
1132 - **Default value**: `false`
1133 - **Possible values**: `false`, `true`
1134
1135 #### `false` (default):
1136
1137 ```rust
1138 result.and_then(|maybe_value| match maybe_value {
1139     None => ...,
1140     Some(value) => ...,
1141 })
1142
1143 match lorem {
1144     None => if ipsum {
1145         println!("Hello World");
1146     },
1147     Some(dolor) => ...,
1148 }
1149 ```
1150
1151 #### `true`:
1152
1153 ```rust
1154
1155 result.and_then(|maybe_value| {
1156     match maybe_value {
1157         None => ...,
1158         Some(value) => ...,
1159     }
1160 })
1161
1162 match lorem {
1163     None => {
1164         if ipsum {
1165             println!("Hello World");
1166         }
1167     }
1168     Some(dolor) => ...,
1169 }
1170 ```
1171
1172
1173 ## `newline_style`
1174
1175 Unix or Windows line endings
1176
1177 - **Default value**: `"Unix"`
1178 - **Possible values**: `"Native"`, `"Unix"`, `"Windows"`
1179
1180 ## `normalize_comments`
1181
1182 Convert /* */ comments to // comments where possible
1183
1184 - **Default value**: `false`
1185 - **Possible values**: `true`, `false`
1186
1187 #### `false` (default):
1188
1189 ```rust
1190 // Lorem ipsum:
1191 fn dolor() -> usize {}
1192
1193 /* sit amet: */
1194 fn adipiscing() -> usize {}
1195 ```
1196
1197 #### `true`:
1198
1199 ```rust
1200 // Lorem ipsum:
1201 fn dolor() -> usize {}
1202
1203 // sit amet:
1204 fn adipiscing() -> usize {}
1205 ```
1206
1207 ## `reorder_imported_names`
1208
1209 Reorder lists of names in import statements alphabetically
1210
1211 - **Default value**: `false`
1212 - **Possible values**: `true`, `false`
1213
1214 #### `false` (default):
1215
1216 ```rust
1217 use super::{lorem, ipsum, dolor, sit};
1218 ```
1219
1220 #### `true`:
1221
1222 ```rust
1223 use super::{dolor, ipsum, lorem, sit};
1224 ```
1225
1226 See also [`reorder_imports`](#reorder_imports).
1227
1228 ## `reorder_imports`
1229
1230 Reorder import statements alphabetically
1231
1232 - **Default value**: `false`
1233 - **Possible values**: `true`, `false`
1234
1235 #### `false` (default):
1236
1237 ```rust
1238 use lorem;
1239 use ipsum;
1240 use dolor;
1241 use sit;
1242 ```
1243
1244 #### `true`:
1245
1246 ```rust
1247 use dolor;
1248 use ipsum;
1249 use lorem;
1250 use sit;
1251 ```
1252
1253 See also [`reorder_imported_names`](#reorder_imported_names), [`reorder_imports_in_group`](#reorder_imports_in_group).
1254
1255 ## `reorder_imports_in_group`
1256
1257 Reorder import statements in group
1258
1259 - **Default value**: `false`
1260 - **Possible values**: `true`, `false`
1261
1262 **Note:** This option takes effect only when [`reorder_imports`](#reorder_imports) is set to `true`.
1263
1264 #### `false` (default):
1265
1266 ```rust
1267 use std::mem;
1268 use std::io;
1269
1270 use lorem;
1271 use ipsum;
1272 use dolor;
1273 use sit;
1274 ```
1275
1276 #### `true`:
1277
1278 ```rust
1279 use std::io;
1280 use std::mem;
1281
1282 use dolor;
1283 use ipsum;
1284 use lorem;
1285 use sit;
1286 ```
1287
1288 See also [`reorder_imports`](#reorder_imports).
1289
1290 ## `reorder_extern_crates`
1291
1292 Reorder `extern crate` statements alphabetically
1293
1294 - **Default value**: `true`
1295 - **Possible values**: `true`, `false`
1296
1297 #### `true` (default):
1298
1299 ```rust
1300 extern crate dolor;
1301 extern crate ipsum;
1302 extern crate lorem;
1303 extern crate sit;
1304 ```
1305
1306 #### `false`:
1307
1308 ```rust
1309 extern crate lorem;
1310 extern crate ipsum;
1311 extern crate dolor;
1312 extern crate sit;
1313 ```
1314
1315 See also [`reorder_extern_crates_in_group`](#reorder_extern_crates_in_group).
1316
1317 ## `reorder_extern_crates_in_group`
1318
1319 Reorder `extern crate` statements in group
1320
1321 - **Default value**: `true`
1322 - **Possible values**: `true`, `false`
1323
1324 **Note:** This option takes effect only when [`reorder_imports`](#reorder_imports) is set to `true`.
1325
1326 #### `true` (default):
1327
1328 ```rust
1329 extern crate a;
1330 extern crate b;
1331
1332 extern crate dolor;
1333 extern crate ipsum;
1334 extern crate lorem;
1335 extern crate sit;
1336 ```
1337
1338 #### `false`:
1339
1340 ```rust
1341 extern crate b;
1342 extern crate a;
1343
1344 extern crate lorem;
1345 extern crate ipsum;
1346 extern crate dolor;
1347 extern crate sit;
1348 ```
1349
1350 See also [`reorder_extern_crates`](#reorder_extern_crates).
1351
1352 ## `report_todo`
1353
1354 Report `TODO` items in comments.
1355
1356 - **Default value**: `"Never"`
1357 - **Possible values**: `"Always"`, `"Unnumbered"`, `"Never"`
1358
1359 Warns about any comments containing `TODO` in them when set to `"Always"`. If
1360 it contains a `#X` (with `X` being a number) in parentheses following the
1361 `TODO`, `"Unnumbered"` will ignore it.
1362
1363 See also [`report_fixme`](#report_fixme).
1364
1365 ## `report_fixme`
1366
1367 Report `FIXME` items in comments.
1368
1369 - **Default value**: `"Never"`
1370 - **Possible values**: `"Always"`, `"Unnumbered"`, `"Never"`
1371
1372 Warns about any comments containing `FIXME` in them when set to `"Always"`. If
1373 it contains a `#X` (with `X` being a number) in parentheses following the
1374 `FIXME`, `"Unnumbered"` will ignore it.
1375
1376 See also [`report_todo`](#report_todo).
1377
1378
1379 ## `skip_children`
1380
1381 Don't reformat out of line modules
1382
1383 - **Default value**: `false`
1384 - **Possible values**: `true`, `false`
1385
1386 ## `space_after_colon`
1387
1388 Leave a space after the colon.
1389
1390 - **Default value**: `true`
1391 - **Possible values**: `true`, `false`
1392
1393 #### `true` (default):
1394
1395 ```rust
1396 fn lorem<T: Eq>(t: T) {
1397     let lorem: Dolor = Lorem {
1398         ipsum: dolor,
1399         sit: amet,
1400     };
1401 }
1402 ```
1403
1404 #### `false`:
1405
1406 ```rust
1407 fn lorem<T:Eq>(t:T) {
1408     let lorem:Dolor = Lorem {
1409         ipsum:dolor,
1410         sit:amet,
1411     };
1412 }
1413 ```
1414
1415 See also: [`space_before_colon`](#space_before_colon).
1416
1417 ## `space_before_colon`
1418
1419 Leave a space before the colon.
1420
1421 - **Default value**: `false`
1422 - **Possible values**: `true`, `false`
1423
1424 #### `false` (default):
1425
1426 ```rust
1427 fn lorem<T: Eq>(t: T) {
1428     let lorem: Dolor = Lorem {
1429         ipsum: dolor,
1430         sit: amet,
1431     };
1432 }
1433 ```
1434
1435 #### `true`:
1436
1437 ```rust
1438 fn lorem<T : Eq>(t : T) {
1439     let lorem : Dolor = Lorem {
1440         ipsum : dolor,
1441         sit : amet,
1442     };
1443 }
1444 ```
1445
1446 See also: [`space_after_colon`](#space_after_colon).
1447
1448 ## `struct_field_align_threshold`
1449
1450 The maximum diff of width between struct fields to be aligned with each other.
1451
1452 - **Default value** : 0
1453 - **Possible values**: any positive integer
1454
1455 #### `0` (default):
1456
1457 ```rust
1458 struct Foo {
1459     x: u32,
1460     yy: u32,
1461     zzz: u32,
1462 }
1463 ```
1464
1465 #### `20`:
1466
1467 ```rust
1468 struct Foo {
1469     x:   u32,
1470     yy:  u32,
1471     zzz: u32,
1472 }
1473 ```
1474
1475 ```
1476
1477 ## `spaces_around_ranges`
1478
1479 Put spaces around the .. and ... range operators
1480
1481 - **Default value**: `false`
1482 - **Possible values**: `true`, `false`
1483
1484 #### `false` (default):
1485
1486 ```rust
1487 let lorem = 0..10;
1488 ```
1489
1490 #### `true`:
1491
1492 ```rust
1493 let lorem = 0 .. 10;
1494 ```
1495
1496 ## `spaces_within_parens_and_brackets`
1497
1498 Put spaces within non-empty generic arguments
1499
1500 - **Default value**: `false`
1501 - **Possible values**: `true`, `false`
1502
1503 #### `false` (default):
1504
1505 ```rust
1506 fn lorem<T: Eq>(t: T) {
1507     // body
1508 }
1509 ```
1510
1511 #### `true`:
1512
1513 ```rust
1514 fn lorem< T: Eq >(t: T) {
1515     // body
1516 }
1517 ```
1518
1519 See also: [`spaces_within_parens_and_brackets`](#spaces_within_parens_and_brackets), [`spaces_within_parens_and_brackets`](#spaces_within_parens_and_brackets).
1520
1521 ## `spaces_within_parens_and_brackets`
1522
1523 Put spaces within non-empty parentheses
1524
1525 - **Default value**: `false`
1526 - **Possible values**: `true`, `false`
1527
1528 #### `false` (default):
1529
1530 ```rust
1531 fn lorem<T: Eq>(t: T) {
1532     let lorem = (ipsum, dolor);
1533 }
1534 ```
1535
1536 #### `true`:
1537
1538 ```rust
1539 fn lorem<T: Eq>( t: T ) {
1540     let lorem = ( ipsum, dolor );
1541 }
1542 ```
1543
1544 See also: [`spaces_within_parens_and_brackets`](#spaces_within_parens_and_brackets), [`spaces_within_parens_and_brackets`](#spaces_within_parens_and_brackets).
1545
1546 ## `spaces_within_parens_and_brackets`
1547
1548 Put spaces within non-empty square brackets
1549
1550 - **Default value**: `false`
1551 - **Possible values**: `true`, `false`
1552
1553 #### `false` (default):
1554
1555 ```rust
1556 let lorem: [usize; 2] = [ipsum, dolor];
1557 ```
1558
1559 #### `true`:
1560
1561 ```rust
1562 let lorem: [ usize; 2 ] = [ ipsum, dolor ];
1563 ```
1564
1565 See also: [`spaces_within_parens_and_brackets`](#spaces_within_parens_and_brackets), [`spaces_within_parens_and_brackets`](#spaces_within_parens_and_brackets).
1566
1567 ## `struct_lit_single_line`
1568
1569 Put small struct literals on a single line
1570
1571 - **Default value**: `true`
1572 - **Possible values**: `true`, `false`
1573
1574 #### `true` (default):
1575
1576 ```rust
1577 let lorem = Lorem { ipsum: dolor, sit: amet };
1578 ```
1579
1580 #### `false`:
1581
1582 ```rust
1583 let lorem = Lorem {
1584     ipsum: dolor,
1585     sit: amet,
1586 };
1587 ```
1588
1589 See also: [`indent_style`](#indent_style).
1590
1591
1592 ## `tab_spaces`
1593
1594 Number of spaces per tab
1595
1596 - **Default value**: `4`
1597 - **Possible values**: any positive integer
1598
1599 #### `4` (default):
1600
1601 ```rust
1602 fn lorem() {
1603     let ipsum = dolor();
1604     let sit = vec![
1605         "amet consectetur adipiscing elit."
1606     ];
1607 }
1608 ```
1609
1610 #### `2`:
1611
1612 ```rust
1613 fn lorem() {
1614   let ipsum = dolor();
1615   let sit = vec![
1616     "amet consectetur adipiscing elit."
1617   ];
1618 }
1619 ```
1620
1621 See also: [`hard_tabs`](#hard_tabs).
1622
1623
1624 ## `trailing_comma`
1625
1626 How to handle trailing commas for lists
1627
1628 - **Default value**: `"Vertical"`
1629 - **Possible values**: `"Always"`, `"Never"`, `"Vertical"`
1630
1631 #### `"Vertical"` (default):
1632
1633 ```rust
1634 let Lorem { ipsum, dolor, sit } = amet;
1635 let Lorem {
1636     ipsum,
1637     dolor,
1638     sit,
1639     amet,
1640     consectetur,
1641     adipiscing,
1642 } = elit;
1643 ```
1644
1645 #### `"Always"`:
1646
1647 ```rust
1648 let Lorem { ipsum, dolor, sit, } = amet;
1649 let Lorem {
1650     ipsum,
1651     dolor,
1652     sit,
1653     amet,
1654     consectetur,
1655     adipiscing,
1656 } = elit;
1657 ```
1658
1659 #### `"Never"`:
1660
1661 ```rust
1662 let Lorem { ipsum, dolor, sit } = amet;
1663 let Lorem {
1664     ipsum,
1665     dolor,
1666     sit,
1667     amet,
1668     consectetur,
1669     adipiscing
1670 } = elit;
1671 ```
1672
1673 See also: [`match_block_trailing_comma`](#match_block_trailing_comma).
1674
1675 ## `trailing_semicolon`
1676
1677 Add trailing semicolon after break, continue and return
1678
1679 - **Default value**: `true`
1680 - **Possible values**: `true`, `false`
1681
1682 #### `true` (default):
1683 ```rust
1684 fn foo() -> usize {
1685     return 0;
1686 }
1687 ```
1688
1689 #### `false`:
1690 ```rust
1691 fn foo() -> usize {
1692     return 0
1693 }
1694 ```
1695
1696 ## `type_punctuation_density`
1697
1698 Determines if `+` or `=` are wrapped in spaces in the punctuation of types
1699
1700 - **Default value**: `"Wide"`
1701 - **Possible values**: `"Compressed"`, `"Wide"`
1702
1703 #### `"Wide"` (default):
1704
1705 ```rust
1706 fn lorem<Ipsum: Dolor + Sit = Amet>() {
1707         // body
1708 }
1709 ```
1710
1711 #### `"Compressed"`:
1712
1713 ```rust
1714 fn lorem<Ipsum: Dolor+Sit=Amet>() {
1715         // body
1716 }
1717 ```
1718
1719 ## `use_try_shorthand`
1720
1721 Replace uses of the try! macro by the ? shorthand
1722
1723 - **Default value**: `false`
1724 - **Possible values**: `true`, `false`
1725
1726 #### `false` (default):
1727
1728 ```rust
1729 let lorem = try!(ipsum.map(|dolor|dolor.sit()));
1730 ```
1731
1732 #### `true`:
1733
1734 ```rust
1735 let lorem = ipsum.map(|dolor| dolor.sit())?;
1736 ```
1737
1738
1739 ## `wrap_comments`
1740
1741 Break comments to fit on the line
1742
1743 - **Default value**: `false`
1744 - **Possible values**: `true`, `false`
1745
1746 #### `false` (default):
1747
1748 ```rust
1749 // 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.
1750 ```
1751
1752 #### `true`:
1753
1754 ```rust
1755 // Lorem ipsum dolor sit amet, consectetur adipiscing elit,
1756 // sed do eiusmod tempor incididunt ut labore et dolore
1757 // magna aliqua. Ut enim ad minim veniam, quis nostrud
1758 // exercitation ullamco laboris nisi ut aliquip ex ea
1759 // commodo consequat.
1760 ```
1761
1762 ## `match_arm_blocks`
1763
1764 Wrap the body of arms in blocks when it does not fit on the same line with the pattern of arms
1765
1766 - **Default value**: `true`
1767 - **Possible values**: `true`, `false`
1768
1769 #### `true` (default):
1770
1771 ```rust
1772 match lorem {
1773     true => {
1774         foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(x)
1775     }
1776     false => println!("{}", sit),
1777 }
1778 ```
1779
1780 #### `false`:
1781
1782 ```rust
1783 match lorem {
1784     true =>
1785         foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(x),
1786     false => println!("{}", sit),
1787 }
1788 ```
1789
1790 See also: [`match_block_trailing_comma`](#match_block_trailing_comma).
1791
1792 ## `write_mode`
1793
1794 What Write Mode to use when none is supplied: Replace, Overwrite, Display, Diff, Coverage
1795
1796 - **Default value**: `"Overwrite"`
1797 - **Possible values**: `"Checkstyle"`, `"Coverage"`, `"Diff"`, `"Display"`, `"Overwrite"`, `"Plain"`, `"Replace"`