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