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