]> git.lizzy.rs Git - rust.git/blob - Configurations.md
76589314e03c3d56a34af599688b8be63204b1b6
[rust.git] / Configurations.md
1 # Configuring Rustfmt
2
3 Rustfmt is designed to be very configurable. You can create a TOML file called `rustfmt.toml` or `.rustfmt.toml`, place it in the project or any other parent directory and it will apply the options in that file.
4
5 A possible content of `rustfmt.toml` or `.rustfmt.toml` might look like this:
6
7 ```toml
8 indent_style = "Block"
9 reorder_imported_names = true
10 ```
11
12 # Configuration Options
13
14 Below you find a detailed visual guide on all the supported configuration options of rustfmt:
15
16
17 ## `indent_style`
18
19 Indent on expressions or items.
20
21 - **Default value**: `"Block"`
22 - **Possible values**: `"Block"`, `"Visual"`
23
24 ### Array
25
26 #### `"Block"` (default):
27
28 ```rust
29 let lorem = vec![
30     "ipsum",
31     "dolor",
32     "sit",
33     "amet",
34     "consectetur",
35     "adipiscing",
36     "elit",
37 ];
38 ```
39
40 #### `"Visual"`:
41
42 ```rust
43 let lorem = vec!["ipsum",
44                  "dolor",
45                  "sit",
46                  "amet",
47                  "consectetur",
48                  "adipiscing",
49                  "elit"];
50 ```
51
52 ### Control flow
53
54 #### `"Block"` (default):
55
56 ```rust
57 if lorem_ipsum &&
58     dolor_sit &&
59     amet_consectetur
60 {
61     // ...
62 }
63 ```
64
65 #### `"Visual"`:
66
67 ```rust
68 if lorem_ipsum &&
69    dolor_sit &&
70    amet_consectetur {
71     // ...
72 }
73 ```
74
75 See also: [`control_brace_style`](#control_brace_style).
76
77 ### Function arguments
78
79 #### `"Block"` (default):
80
81 ```rust
82 fn lorem() {}
83
84 fn lorem(ipsum: usize) {}
85
86 fn lorem(
87     ipsum: usize,
88     dolor: usize,
89     sit: usize,
90     amet: usize,
91     consectetur: usize,
92     adipiscing: usize,
93     elit: usize,
94 ) {
95     // body
96 }
97 ```
98
99 #### `"Visual"`:
100
101 ```rust
102 fn lorem() {}
103
104 fn lorem(ipsum: usize) {}
105
106 fn lorem(ipsum: usize,
107          dolor: usize,
108          sit: usize,
109          amet: usize,
110          consectetur: usize,
111          adipiscing: usize,
112          elit: usize) {
113     // body
114 }
115 ```
116
117 ### Function calls
118
119 #### `"Block"` (default):
120
121 ```rust
122 lorem(
123     "lorem",
124     "ipsum",
125     "dolor",
126     "sit",
127     "amet",
128     "consectetur",
129     "adipiscing",
130     "elit",
131 );
132 ```
133
134 #### `"Visual"`:
135
136 ```rust
137 lorem("lorem",
138       "ipsum",
139       "dolor",
140       "sit",
141       "amet",
142       "consectetur",
143       "adipiscing",
144       "elit");
145 ```
146
147 ### Generics
148
149 #### `"Block"` (default):
150
151 ```rust
152 fn lorem<
153     Ipsum: Eq = usize,
154     Dolor: Eq = usize,
155     Sit: Eq = usize,
156     Amet: Eq = usize,
157     Adipiscing: Eq = usize,
158     Consectetur: Eq = usize,
159     Elit: Eq = usize
160 >(
161     ipsum: Ipsum,
162     dolor: Dolor,
163     sit: Sit,
164     amet: Amet,
165     adipiscing: Adipiscing,
166     consectetur: Consectetur,
167     elit: Elit,
168 ) -> T {
169     // body
170 }
171 ```
172
173 #### `"Visual"`:
174
175 ```rust
176 fn lorem<Ipsum: Eq = usize,
177          Dolor: Eq = usize,
178          Sit: Eq = usize,
179          Amet: Eq = usize,
180          Adipiscing: Eq = usize,
181          Consectetur: Eq = usize,
182          Elit: Eq = usize>
183     (ipsum: Ipsum,
184      dolor: Dolor,
185      sit: Sit,
186      amet: Amet,
187      adipiscing: Adipiscing,
188      consectetur: Consectetur,
189      elit: Elit)
190      -> T {
191     // body
192 }
193 ```
194
195 #### Struct
196
197 #### `"Block"` (default):
198
199 ```rust
200 let lorem = Lorem {
201     ipsum: dolor,
202     sit: amet,
203 };
204 ```
205
206 #### `"Visual"`:
207
208 ```rust
209 let lorem = Lorem { ipsum: dolor,
210                     sit: amet, };
211 ```
212
213 See also: [`struct_lit_single_line`](#struct_lit_single_line), [`indent_style`](#indent_style).
214
215 ### Where predicates
216
217 #### `"Block"` (default):
218
219 ```rust
220 fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
221 where 
222     Ipsum: Eq,
223     Dolor: Eq,
224     Sit: Eq,
225     Amet: Eq
226 {
227     // body
228 }
229 ```
230
231 #### `"Visual"`:
232
233 ```rust
234 fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
235     where Ipsum: Eq,
236           Dolor: Eq,
237           Sit: Eq,
238           Amet: Eq
239 {
240     // body
241 }
242 ```
243
244
245 ## `same_line_attributes`
246
247 Try to put attributes on the same line as fields and variants
248
249 - **Default value**: `true`
250 - **Possible values**: `true`, `false`
251
252 #### `true` (default):
253
254 ```rust
255 struct Lorem {
256     #[serde(rename = "Ipsum")] ipsum: usize,
257     #[serde(rename = "Dolor")] dolor: usize,
258     #[serde(rename = "Amet")] amet: usize,
259 }
260
261 enum Lorem {
262     #[serde(skip_serializing)] Ipsum,
263     #[serde(skip_serializing)] Dolor,
264     #[serde(skip_serializing)] Amet,
265 }
266 ```
267
268 #### `false`:
269
270 ```rust
271 struct Lorem {
272     #[serde(rename = "Ipsum")]
273     ipsum: usize,
274     #[serde(rename = "Dolor")]
275     dolor: usize,
276     #[serde(rename = "Amet")]
277     amet: usize,
278 }
279
280 enum Lorem {
281     #[serde(skip_serializing)]
282     Ipsum,
283     #[serde(skip_serializing)]
284     Dolor,
285     #[serde(skip_serializing)]
286     Amet,
287 }
288 ```
289
290 ## `use_small_heuristics`
291
292 Whether to use different formatting for items and expressions if they satisfy a heuristic notion of 'small'.
293
294 - **Default value**: `true`
295 - **Possible values**: `true`, `false`
296
297 #### `true` (default):
298
299 ```rust
300 enum Lorem {
301     Ipsum,
302     Dolor(bool),
303     Sit { amet: Consectetur, adipiscing: Elit },
304 }
305
306 fn main() {
307     lorem(
308         "lorem",
309         "ipsum",
310         "dolor",
311         "sit",
312         "amet",
313         "consectetur",
314         "adipiscing",
315     );
316
317     let lorem = Lorem { ipsum: dolor, sit: amet };
318
319     let lorem = if ipsum { dolor } else { sit };
320 }
321 ```
322
323 #### `false`:
324
325 ```rust
326 enum Lorem {
327     Ipsum,
328     Dolor(bool),
329     Sit {
330         amet: Consectetur,
331         adipiscing: Elit,
332     },
333 }
334
335 fn main() {
336     lorem("lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing");
337
338     let lorem = Lorem {
339         ipsum: dolor,
340         sit: amet,
341     };
342
343     let lorem = if ipsum {
344         dolor
345     } else {
346         sit
347     };
348 }
349 ```
350
351 ## `binop_separator`
352
353 Where to put a binary operator when a binary expression goes multiline.
354
355 - **Default value**: `"Front"`
356 - **Possible values**: `"Front"`, `"Back"`
357
358 #### `"Front"` (default):
359
360 ```rust
361 let or = foo
362     || bar
363     || foobar;
364
365 let sum = 1234
366     + 5678
367     + 910;
368
369 let range = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
370     ..bbbbbbbbbbbbbbbbbbbbbbbbbbbbb;
371 ```
372
373 #### `"Back"`:
374
375 ```rust
376 let or = foo ||
377     bar ||
378     foobar;
379
380 let sum = 1234 +
381     5678 +
382     910;
383
384 let range = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..
385     bbbbbbbbbbbbbbbbbbbbbbbbbbbbb;
386 ```
387
388 ## `chain_indent`
389
390 Indentation of chain
391
392 - **Default value**: `"Block"`
393 - **Possible values**: `"Block"`, `"Visual"`
394
395 #### `"Block"` (default):
396
397 ```rust
398 let lorem = ipsum
399     .dolor()
400     .sit()
401     .amet()
402     .consectetur()
403     .adipiscing()
404     .elit();
405 ```
406
407 #### `"Visual"`:
408
409 ```rust
410 let lorem = ipsum.dolor()
411                  .sit()
412                  .amet()
413                  .consectetur()
414                  .adipiscing()
415                  .elit();
416 ```
417
418
419
420 ## `combine_control_expr`
421
422 Combine control expressions with function calls.
423
424 - **Default value**: `true`
425 - **Possible values**: `true`, `false`
426
427 #### `true` (default):
428
429 ```rust
430 fn example() {
431     // If
432     foo!(if x {
433         foo();
434     } else {
435         bar();
436     });
437
438     // IfLet
439     foo!(if let Some(..) = x {
440         foo();
441     } else {
442         bar();
443     });
444
445     // While
446     foo!(while x {
447         foo();
448         bar();
449     });
450
451     // WhileLet
452     foo!(while let Some(..) = x {
453         foo();
454         bar();
455     });
456
457     // ForLoop
458     foo!(for x in y {
459         foo();
460         bar();
461     });
462
463     // Loop
464     foo!(loop {
465         foo();
466         bar();
467     });
468 }
469 ```
470
471 #### `false`:
472
473 ```rust
474 fn example() {
475     // If
476     foo!(
477         if x {
478             foo();
479         } else {
480             bar();
481         }
482     );
483
484     // IfLet
485     foo!(
486         if let Some(..) = x {
487             foo();
488         } else {
489             bar();
490         }
491     );
492
493     // While
494     foo!(
495         while x {
496             foo();
497             bar();
498         }
499     );
500
501     // WhileLet
502     foo!(
503         while let Some(..) = x {
504             foo();
505             bar();
506         }
507     );
508
509     // ForLoop
510     foo!(
511         for x in y {
512             foo();
513             bar();
514         }
515     );
516
517     // Loop
518     foo!(
519         loop {
520             foo();
521             bar();
522         }
523     );
524 }
525 ```
526
527 ## `comment_width`
528
529 Maximum length of comments. No effect unless`wrap_comments = true`.
530
531 - **Default value**: `80`
532 - **Possible values**: any positive integer
533
534 **Note:** A value of `0` results in [`wrap_comments`](#wrap_comments) being applied regardless of a line's width.
535
536 #### Comments shorter than `comment_width`:
537 ```rust
538 // Lorem ipsum dolor sit amet, consectetur adipiscing elit.
539 ```
540
541 #### Comments longer than `comment_width`:
542 ```rust
543 // Lorem ipsum dolor sit amet,
544 // consectetur adipiscing elit.
545 ```
546
547 See also [`wrap_comments`](#wrap_comments).
548
549 ## `condense_wildcard_suffixes`
550
551 Replace strings of _ wildcards by a single .. in tuple patterns
552
553 - **Default value**: `false`
554 - **Possible values**: `true`, `false`
555
556 #### `false` (default):
557
558 ```rust
559 let (lorem, ipsum, _, _) = (1, 2, 3, 4);
560 ```
561
562 #### `true`:
563
564 ```rust
565 let (lorem, ipsum, ..) = (1, 2, 3, 4);
566 ```
567
568 ## `control_brace_style`
569
570 Brace style for control flow constructs
571
572 - **Default value**: `"AlwaysSameLine"`
573 - **Possible values**: `"AlwaysNextLine"`, `"AlwaysSameLine"`, `"ClosingNextLine"`
574
575 #### `"AlwaysSameLine"` (default):
576
577 ```rust
578 if lorem {
579     println!("ipsum!");
580 } else {
581     println!("dolor!");
582 }
583 ```
584
585 #### `"AlwaysNextLine"`:
586
587 ```rust
588 if lorem
589 {
590     println!("ipsum!");
591 }
592 else
593 {
594     println!("dolor!");
595 }
596 ```
597
598 #### `"ClosingNextLine"`:
599
600 ```rust
601 if lorem {
602     println!("ipsum!");
603 }
604 else {
605     println!("dolor!");
606 }
607 ```
608
609 ## `disable_all_formatting`
610
611 Don't reformat anything
612
613 - **Default value**: `false`
614 - **Possible values**: `true`, `false`
615
616 ## `error_on_line_overflow`
617
618 Error if unable to get all lines within `max_width`
619
620 - **Default value**: `true`
621 - **Possible values**: `true`, `false`
622
623 See also [`max_width`](#max_width).
624
625 ## `error_on_line_overflow_comments`
626
627 Error if unable to get all comment lines within `comment_width`.
628
629 - **Default value**: `true`
630 - **Possible values**: `true`, `false`
631
632 See also [`comment_width`](#comment_width).
633
634 ## `fn_args_density`
635
636 Argument density in functions
637
638 - **Default value**: `"Tall"`
639 - **Possible values**: `"Compressed"`, `"CompressedIfEmpty"`, `"Tall"`, `"Vertical"`
640
641 #### `"Tall"` (default):
642
643 ```rust
644 trait Lorem {
645     fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet);
646
647     fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet) {
648         // body
649     }
650
651     fn lorem(
652         ipsum: Ipsum,
653         dolor: Dolor,
654         sit: Sit,
655         amet: Amet,
656         consectetur: Consectetur,
657         adipiscing: Adipiscing,
658         elit: Elit,
659     );
660
661     fn lorem(
662         ipsum: Ipsum,
663         dolor: Dolor,
664         sit: Sit,
665         amet: Amet,
666         consectetur: Consectetur,
667         adipiscing: Adipiscing,
668         elit: Elit,
669     ) {
670         // body
671     }
672 }
673 ```
674
675 #### `"Compressed"`:
676
677 ```rust
678 trait Lorem {
679     fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet);
680
681     fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet) {
682         // body
683     }
684
685     fn lorem(
686         ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, consectetur: Consectetur,
687         adipiscing: Adipiscing, elit: Elit,
688     );
689
690     fn lorem(
691         ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, consectetur: Consectetur,
692         adipiscing: Adipiscing, elit: Elit,
693     ) {
694         // body
695     }
696 }
697 ```
698
699 #### `"CompressedIfEmpty"`:
700
701 ```rust
702 trait Lorem {
703     fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet);
704
705     fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet) {
706         // body
707     }
708
709     fn lorem(
710         ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, consectetur: Consectetur,
711         adipiscing: Adipiscing, elit: Elit,
712     );
713
714     fn lorem(
715         ipsum: Ipsum,
716         dolor: Dolor,
717         sit: Sit,
718         amet: Amet,
719         consectetur: Consectetur,
720         adipiscing: Adipiscing,
721         elit: Elit,
722     ) {
723         // body
724     }
725 }
726 ```
727
728 #### `"Vertical"`:
729
730 ```rust
731 trait Lorem {
732     fn lorem(ipsum: Ipsum,
733              dolor: Dolor,
734              sit: Sit,
735              amet: Amet);
736
737     fn lorem(ipsum: Ipsum,
738              dolor: Dolor,
739              sit: Sit,
740              amet: Amet) {
741         // body
742     }
743
744     fn lorem(ipsum: Ipsum,
745              dolor: Dolor,
746              sit: Sit,
747              amet: Amet,
748              consectetur: Consectetur,
749              adipiscing: Adipiscing,
750              elit: Elit);
751
752     fn lorem(ipsum: Ipsum,
753              dolor: Dolor,
754              sit: Sit,
755              amet: Amet,
756              consectetur: Consectetur,
757              adipiscing: Adipiscing,
758              elit: Elit) {
759         // body
760     }
761 }
762 ```
763
764
765 ## `brace_style`
766
767 Brace style for items
768
769 - **Default value**: `"SameLineWhere"`
770 - **Possible values**: `"AlwaysNextLine"`, `"PreferSameLine"`, `"SameLineWhere"`
771
772 ### Functions
773
774 #### `"SameLineWhere"` (default):
775
776 ```rust
777 fn lorem() {
778     // body
779 }
780
781 fn lorem(ipsum: usize) {
782     // body
783 }
784
785 fn lorem<T>(ipsum: T)
786 where
787     T: Add + Sub + Mul + Div,
788 {
789     // body
790 }
791 ```
792
793 #### `"AlwaysNextLine"`:
794
795 ```rust
796 fn lorem()
797 {
798     // body
799 }
800
801 fn lorem(ipsum: usize)
802 {
803     // body
804 }
805
806 fn lorem<T>(ipsum: T)
807 where
808     T: Add + Sub + Mul + Div,
809 {
810     // body
811 }
812 ```
813
814 #### `"PreferSameLine"`:
815
816 ```rust
817 fn lorem() {
818     // body
819 }
820
821 fn lorem(ipsum: usize) {
822     // body
823 }
824
825 fn lorem<T>(ipsum: T)
826 where
827     T: Add + Sub + Mul + Div, {
828     // body
829 }
830 ```
831
832 ### Structs and enums
833
834 #### `"SameLineWhere"` (default):
835
836 ```rust
837 struct Lorem {
838     ipsum: bool,
839 }
840
841 struct Dolor<T>
842     where T: Eq
843 {
844     sit: T,
845 }
846 ```
847
848 #### `"AlwaysNextLine"`:
849
850 ```rust
851 struct Lorem
852 {
853     ipsum: bool,
854 }
855
856 struct Dolor<T>
857     where T: Eq
858 {
859     sit: T,
860 }
861 ```
862
863 #### `"PreferSameLine"`:
864
865 ```rust
866 struct Lorem {
867     ipsum: bool,
868 }
869
870 struct Dolor<T>
871     where T: Eq {
872     sit: T,
873 }
874 ```
875
876
877
878 ## `fn_empty_single_line`
879
880 Put empty-body functions on a single line
881
882 - **Default value**: `true`
883 - **Possible values**: `true`, `false`
884
885 #### `true` (default):
886
887 ```rust
888 fn lorem() {}
889 ```
890
891 #### `false`:
892
893 ```rust
894 fn lorem() {
895 }
896 ```
897
898 See also [`control_brace_style`](#control_brace_style).
899
900
901 ## `fn_single_line`
902
903 Put single-expression functions on a single line
904
905 - **Default value**: `false`
906 - **Possible values**: `true`, `false`
907
908 #### `false` (default):
909
910 ```rust
911 fn lorem() -> usize {
912     42
913 }
914
915 fn lorem() -> usize {
916     let ipsum = 42;
917     ipsum
918 }
919 ```
920
921 #### `true`:
922
923 ```rust
924 fn lorem() -> usize { 42 }
925
926 fn lorem() -> usize {
927     let ipsum = 42;
928     ipsum
929 }
930 ```
931
932 See also [`control_brace_style`](#control_brace_style).
933
934 ## `force_explicit_abi`
935
936 Always print the abi for extern items
937
938 - **Default value**: `true`
939 - **Possible values**: `true`, `false`
940
941 **Note:** Non-"C" ABIs are always printed. If `false` then "C" is removed.
942
943 #### `true` (default):
944
945 ```rust
946 extern "C" {
947     pub static lorem: c_int;
948 }
949 ```
950
951 #### `false`:
952
953 ```rust
954 extern {
955     pub static lorem: c_int;
956 }
957 ```
958
959 ## `format_strings`
960
961 Format string literals where necessary
962
963 - **Default value**: `false`
964 - **Possible values**: `true`, `false`
965
966 #### `false` (default):
967
968 ```rust
969 let lorem = "ipsum dolor sit amet consectetur adipiscing elit lorem ipsum dolor sit";
970 ```
971
972 #### `true`:
973
974 ```rust
975 let lorem =
976     "ipsum dolor sit amet consectetur \
977      adipiscing elit lorem ipsum dolor sit";
978 ```
979
980 See also [`max_width`](#max_width).
981
982 ## `hard_tabs`
983
984 Use tab characters for indentation, spaces for alignment
985
986 - **Default value**: `false`
987 - **Possible values**: `true`, `false`
988
989 #### `false` (default):
990
991 ```rust
992 fn lorem() -> usize {
993     42 // spaces before 42
994 }
995 ```
996
997 #### `true`:
998
999 ```rust
1000 fn lorem() -> usize {
1001         42 // tabs before 42
1002 }
1003 ```
1004
1005 See also: [`tab_spaces`](#tab_spaces).
1006
1007 ## `impl_empty_single_line`
1008
1009 Put empty-body implementations on a single line
1010
1011 - **Default value**: `true`
1012 - **Possible values**: `true`, `false`
1013
1014 #### `true` (default):
1015
1016 ```rust
1017 impl Lorem {}
1018 ```
1019
1020 #### `false`:
1021
1022 ```rust
1023 impl Lorem {
1024 }
1025 ```
1026
1027 See also [`brace_style`](#brace_style).
1028
1029
1030 ## `imports_indent`
1031
1032 Indent style of imports
1033
1034 - **Default Value**: `"Visual"`
1035 - **Possible values**: `"Block"`, `"Visual"`
1036
1037 #### `"Visual"` (default):
1038
1039 ```rust
1040 use foo::{xxx,
1041           yyy,
1042           zzz};
1043 ```
1044
1045 #### `"Block"`:
1046
1047 ```rust
1048 use foo::{
1049     xxx,
1050     yyy,
1051     zzz,
1052 };
1053 ```
1054
1055 See also: [`imports_layout`](#imports_layout).
1056
1057 ## `imports_layout`
1058
1059 Item layout inside a imports block
1060
1061 - **Default value**: "Mixed"
1062 - **Possible values**: "Horizontal", "HorizontalVertical", "Mixed", "Vertical"
1063
1064 #### `"Mixed"` (default):
1065
1066 ```rust
1067 use foo::{xxx, yyy, zzz};
1068
1069 use foo::{aaa, bbb, ccc,
1070           ddd, eee, fff};
1071 ```
1072
1073 #### `"Horizontal"`:
1074
1075 **Note**: This option forces to put everything on one line and may exceeds `max_width`.
1076
1077 ```rust
1078 use foo::{xxx, yyy, zzz};
1079
1080 use foo::{aaa, bbb, ccc, ddd, eee, fff};
1081 ```
1082
1083 #### `"HorizontalVertical"`:
1084
1085 ```rust
1086 use foo::{xxx, yyy, zzz};
1087
1088 use foo::{aaa,
1089           bbb,
1090           ccc,
1091           ddd,
1092           eee,
1093           fff};
1094 ```
1095
1096 #### `"Vertical"`:
1097
1098 ```rust
1099 use foo::{xxx,
1100           yyy,
1101           zzz};
1102
1103 use foo::{aaa,
1104           bbb,
1105           ccc,
1106           ddd,
1107           eee,
1108           fff};
1109 ```
1110
1111
1112 ## `match_block_trailing_comma`
1113
1114 Put a trailing comma after a block based match arm (non-block arms are not affected)
1115
1116 - **Default value**: `false`
1117 - **Possible values**: `true`, `false`
1118
1119 #### `false` (default):
1120
1121 ```rust
1122 match lorem {
1123     Lorem::Ipsum => {
1124         println!("ipsum");
1125     }
1126     Lorem::Dolor => println!("dolor"),
1127 }
1128 ```
1129
1130 #### `true`:
1131
1132 ```rust
1133 match lorem {
1134     Lorem::Ipsum => {
1135         println!("ipsum");
1136     },
1137     Lorem::Dolor => println!("dolor"),
1138 }
1139 ```
1140
1141 See also: [`trailing_comma`](#trailing_comma), [`wrap_match_arms`](#wrap_match_arms).
1142
1143 ## `max_width`
1144
1145 Maximum width of each line
1146
1147 - **Default value**: `100`
1148 - **Possible values**: any positive integer
1149
1150 See also [`error_on_line_overflow`](#error_on_line_overflow).
1151
1152 ## `merge_derives`
1153
1154 Merge multiple derives into a single one.
1155
1156 - **Default value**: `true`
1157 - **Possible values**: `true`, `false`
1158
1159 #### `true` (default):
1160
1161 ```rust
1162 #[derive(Eq, PartialEq, Debug, Copy, Clone)]
1163 pub enum Foo {}
1164 ```
1165
1166 #### `false`:
1167
1168 ```rust
1169 #[derive(Eq, PartialEq)]
1170 #[derive(Debug)]
1171 #[derive(Copy, Clone)]
1172 pub enum Foo {}
1173 ```
1174
1175 ## `force_multiline_blocks`
1176
1177 Force multiline closure and match arm bodies to be wrapped in a block
1178
1179 - **Default value**: `false`
1180 - **Possible values**: `false`, `true`
1181
1182 #### `false` (default):
1183
1184 ```rust
1185 result.and_then(|maybe_value| match maybe_value {
1186     None => ...,
1187     Some(value) => ...,
1188 })
1189
1190 match lorem {
1191     None => if ipsum {
1192         println!("Hello World");
1193     },
1194     Some(dolor) => ...,
1195 }
1196 ```
1197
1198 #### `true`:
1199
1200 ```rust
1201
1202 result.and_then(|maybe_value| {
1203     match maybe_value {
1204         None => ...,
1205         Some(value) => ...,
1206     }
1207 })
1208
1209 match lorem {
1210     None => {
1211         if ipsum {
1212             println!("Hello World");
1213         }
1214     }
1215     Some(dolor) => ...,
1216 }
1217 ```
1218
1219
1220 ## `newline_style`
1221
1222 Unix or Windows line endings
1223
1224 - **Default value**: `"Unix"`
1225 - **Possible values**: `"Native"`, `"Unix"`, `"Windows"`
1226
1227 ## `normalize_comments`
1228
1229 Convert /* */ comments to // comments where possible
1230
1231 - **Default value**: `false`
1232 - **Possible values**: `true`, `false`
1233
1234 #### `false` (default):
1235
1236 ```rust
1237 // Lorem ipsum:
1238 fn dolor() -> usize {}
1239
1240 /* sit amet: */
1241 fn adipiscing() -> usize {}
1242 ```
1243
1244 #### `true`:
1245
1246 ```rust
1247 // Lorem ipsum:
1248 fn dolor() -> usize {}
1249
1250 // sit amet:
1251 fn adipiscing() -> usize {}
1252 ```
1253
1254 ## `reorder_imported_names`
1255
1256 Reorder lists of names in import statements alphabetically
1257
1258 - **Default value**: `false`
1259 - **Possible values**: `true`, `false`
1260
1261 #### `false` (default):
1262
1263 ```rust
1264 use super::{lorem, ipsum, dolor, sit};
1265 ```
1266
1267 #### `true`:
1268
1269 ```rust
1270 use super::{dolor, ipsum, lorem, sit};
1271 ```
1272
1273 See also [`reorder_imports`](#reorder_imports).
1274
1275 ## `reorder_imports`
1276
1277 Reorder import statements alphabetically
1278
1279 - **Default value**: `false`
1280 - **Possible values**: `true`, `false`
1281
1282 #### `false` (default):
1283
1284 ```rust
1285 use lorem;
1286 use ipsum;
1287 use dolor;
1288 use sit;
1289 ```
1290
1291 #### `true`:
1292
1293 ```rust
1294 use dolor;
1295 use ipsum;
1296 use lorem;
1297 use sit;
1298 ```
1299
1300 See also [`reorder_imported_names`](#reorder_imported_names), [`reorder_imports_in_group`](#reorder_imports_in_group).
1301
1302 ## `reorder_imports_in_group`
1303
1304 Reorder import statements in group
1305
1306 - **Default value**: `false`
1307 - **Possible values**: `true`, `false`
1308
1309 **Note:** This option takes effect only when [`reorder_imports`](#reorder_imports) is set to `true`.
1310
1311 #### `false` (default):
1312
1313 ```rust
1314 use std::mem;
1315 use std::io;
1316
1317 use lorem;
1318 use ipsum;
1319 use dolor;
1320 use sit;
1321 ```
1322
1323 #### `true`:
1324
1325 ```rust
1326 use std::io;
1327 use std::mem;
1328
1329 use dolor;
1330 use ipsum;
1331 use lorem;
1332 use sit;
1333 ```
1334
1335 See also [`reorder_imports`](#reorder_imports).
1336
1337 ## `reorder_extern_crates`
1338
1339 Reorder `extern crate` statements alphabetically
1340
1341 - **Default value**: `true`
1342 - **Possible values**: `true`, `false`
1343
1344 #### `true` (default):
1345
1346 ```rust
1347 extern crate dolor;
1348 extern crate ipsum;
1349 extern crate lorem;
1350 extern crate sit;
1351 ```
1352
1353 #### `false`:
1354
1355 ```rust
1356 extern crate lorem;
1357 extern crate ipsum;
1358 extern crate dolor;
1359 extern crate sit;
1360 ```
1361
1362 See also [`reorder_extern_crates_in_group`](#reorder_extern_crates_in_group).
1363
1364 ## `reorder_extern_crates_in_group`
1365
1366 Reorder `extern crate` statements in group
1367
1368 - **Default value**: `true`
1369 - **Possible values**: `true`, `false`
1370
1371 **Note:** This option takes effect only when [`reorder_imports`](#reorder_imports) is set to `true`.
1372
1373 #### `true` (default):
1374
1375 ```rust
1376 extern crate a;
1377 extern crate b;
1378
1379 extern crate dolor;
1380 extern crate ipsum;
1381 extern crate lorem;
1382 extern crate sit;
1383 ```
1384
1385 #### `false`:
1386
1387 ```rust
1388 extern crate b;
1389 extern crate a;
1390
1391 extern crate lorem;
1392 extern crate ipsum;
1393 extern crate dolor;
1394 extern crate sit;
1395 ```
1396
1397 See also [`reorder_extern_crates`](#reorder_extern_crates).
1398
1399 ## `report_todo`
1400
1401 Report `TODO` items in comments.
1402
1403 - **Default value**: `"Never"`
1404 - **Possible values**: `"Always"`, `"Unnumbered"`, `"Never"`
1405
1406 Warns about any comments containing `TODO` in them when set to `"Always"`. If
1407 it contains a `#X` (with `X` being a number) in parentheses following the
1408 `TODO`, `"Unnumbered"` will ignore it.
1409
1410 See also [`report_fixme`](#report_fixme).
1411
1412 ## `report_fixme`
1413
1414 Report `FIXME` items in comments.
1415
1416 - **Default value**: `"Never"`
1417 - **Possible values**: `"Always"`, `"Unnumbered"`, `"Never"`
1418
1419 Warns about any comments containing `FIXME` in them when set to `"Always"`. If
1420 it contains a `#X` (with `X` being a number) in parentheses following the
1421 `FIXME`, `"Unnumbered"` will ignore it.
1422
1423 See also [`report_todo`](#report_todo).
1424
1425
1426 ## `skip_children`
1427
1428 Don't reformat out of line modules
1429
1430 - **Default value**: `false`
1431 - **Possible values**: `true`, `false`
1432
1433 ## `space_after_colon`
1434
1435 Leave a space after the colon.
1436
1437 - **Default value**: `true`
1438 - **Possible values**: `true`, `false`
1439
1440 #### `true` (default):
1441
1442 ```rust
1443 fn lorem<T: Eq>(t: T) {
1444     let lorem: Dolor = Lorem {
1445         ipsum: dolor,
1446         sit: amet,
1447     };
1448 }
1449 ```
1450
1451 #### `false`:
1452
1453 ```rust
1454 fn lorem<T:Eq>(t:T) {
1455     let lorem:Dolor = Lorem {
1456         ipsum:dolor,
1457         sit:amet,
1458     };
1459 }
1460 ```
1461
1462 See also: [`space_before_colon`](#space_before_colon).
1463
1464 ## `space_before_colon`
1465
1466 Leave a space before the colon.
1467
1468 - **Default value**: `false`
1469 - **Possible values**: `true`, `false`
1470
1471 #### `false` (default):
1472
1473 ```rust
1474 fn lorem<T: Eq>(t: T) {
1475     let lorem: Dolor = Lorem {
1476         ipsum: dolor,
1477         sit: amet,
1478     };
1479 }
1480 ```
1481
1482 #### `true`:
1483
1484 ```rust
1485 fn lorem<T : Eq>(t : T) {
1486     let lorem : Dolor = Lorem {
1487         ipsum : dolor,
1488         sit : amet,
1489     };
1490 }
1491 ```
1492
1493 See also: [`space_after_colon`](#space_after_colon).
1494
1495 ## `struct_field_align_threshold`
1496
1497 The maximum diff of width between struct fields to be aligned with each other.
1498
1499 - **Default value** : 0
1500 - **Possible values**: any positive integer
1501
1502 #### `0` (default):
1503
1504 ```rust
1505 struct Foo {
1506     x: u32,
1507     yy: u32,
1508     zzz: u32,
1509 }
1510 ```
1511
1512 #### `20`:
1513
1514 ```rust
1515 struct Foo {
1516     x:   u32,
1517     yy:  u32,
1518     zzz: u32,
1519 }
1520 ```
1521
1522 ```
1523
1524 ## `spaces_around_ranges`
1525
1526 Put spaces around the .. and ... range operators
1527
1528 - **Default value**: `false`
1529 - **Possible values**: `true`, `false`
1530
1531 #### `false` (default):
1532
1533 ```rust
1534 let lorem = 0..10;
1535 ```
1536
1537 #### `true`:
1538
1539 ```rust
1540 let lorem = 0 .. 10;
1541 ```
1542
1543 ## `spaces_within_parens_and_brackets`
1544
1545 Put spaces within non-empty generic arguments
1546
1547 - **Default value**: `false`
1548 - **Possible values**: `true`, `false`
1549
1550 #### `false` (default):
1551
1552 ```rust
1553 fn lorem<T: Eq>(t: T) {
1554     // body
1555 }
1556 ```
1557
1558 #### `true`:
1559
1560 ```rust
1561 fn lorem< T: Eq >(t: T) {
1562     // body
1563 }
1564 ```
1565
1566 See also: [`spaces_within_parens_and_brackets`](#spaces_within_parens_and_brackets), [`spaces_within_parens_and_brackets`](#spaces_within_parens_and_brackets).
1567
1568 ## `spaces_within_parens_and_brackets`
1569
1570 Put spaces within non-empty parentheses
1571
1572 - **Default value**: `false`
1573 - **Possible values**: `true`, `false`
1574
1575 #### `false` (default):
1576
1577 ```rust
1578 fn lorem<T: Eq>(t: T) {
1579     let lorem = (ipsum, dolor);
1580 }
1581 ```
1582
1583 #### `true`:
1584
1585 ```rust
1586 fn lorem<T: Eq>( t: T ) {
1587     let lorem = ( ipsum, dolor );
1588 }
1589 ```
1590
1591 See also: [`spaces_within_parens_and_brackets`](#spaces_within_parens_and_brackets), [`spaces_within_parens_and_brackets`](#spaces_within_parens_and_brackets).
1592
1593 ## `spaces_within_parens_and_brackets`
1594
1595 Put spaces within non-empty square brackets
1596
1597 - **Default value**: `false`
1598 - **Possible values**: `true`, `false`
1599
1600 #### `false` (default):
1601
1602 ```rust
1603 let lorem: [usize; 2] = [ipsum, dolor];
1604 ```
1605
1606 #### `true`:
1607
1608 ```rust
1609 let lorem: [ usize; 2 ] = [ ipsum, dolor ];
1610 ```
1611
1612 See also: [`spaces_within_parens_and_brackets`](#spaces_within_parens_and_brackets), [`spaces_within_parens_and_brackets`](#spaces_within_parens_and_brackets).
1613
1614 ## `struct_lit_single_line`
1615
1616 Put small struct literals on a single line
1617
1618 - **Default value**: `true`
1619 - **Possible values**: `true`, `false`
1620
1621 #### `true` (default):
1622
1623 ```rust
1624 let lorem = Lorem { ipsum: dolor, sit: amet };
1625 ```
1626
1627 #### `false`:
1628
1629 ```rust
1630 let lorem = Lorem {
1631     ipsum: dolor,
1632     sit: amet,
1633 };
1634 ```
1635
1636 See also: [`indent_style`](#indent_style).
1637
1638
1639 ## `tab_spaces`
1640
1641 Number of spaces per tab
1642
1643 - **Default value**: `4`
1644 - **Possible values**: any positive integer
1645
1646 #### `4` (default):
1647
1648 ```rust
1649 fn lorem() {
1650     let ipsum = dolor();
1651     let sit = vec![
1652         "amet consectetur adipiscing elit."
1653     ];
1654 }
1655 ```
1656
1657 #### `2`:
1658
1659 ```rust
1660 fn lorem() {
1661   let ipsum = dolor();
1662   let sit = vec![
1663     "amet consectetur adipiscing elit."
1664   ];
1665 }
1666 ```
1667
1668 See also: [`hard_tabs`](#hard_tabs).
1669
1670
1671 ## `trailing_comma`
1672
1673 How to handle trailing commas for lists
1674
1675 - **Default value**: `"Vertical"`
1676 - **Possible values**: `"Always"`, `"Never"`, `"Vertical"`
1677
1678 #### `"Vertical"` (default):
1679
1680 ```rust
1681 let Lorem { ipsum, dolor, sit } = amet;
1682 let Lorem {
1683     ipsum,
1684     dolor,
1685     sit,
1686     amet,
1687     consectetur,
1688     adipiscing,
1689 } = elit;
1690 ```
1691
1692 #### `"Always"`:
1693
1694 ```rust
1695 let Lorem { ipsum, dolor, sit, } = amet;
1696 let Lorem {
1697     ipsum,
1698     dolor,
1699     sit,
1700     amet,
1701     consectetur,
1702     adipiscing,
1703 } = elit;
1704 ```
1705
1706 #### `"Never"`:
1707
1708 ```rust
1709 let Lorem { ipsum, dolor, sit } = amet;
1710 let Lorem {
1711     ipsum,
1712     dolor,
1713     sit,
1714     amet,
1715     consectetur,
1716     adipiscing
1717 } = elit;
1718 ```
1719
1720 See also: [`match_block_trailing_comma`](#match_block_trailing_comma).
1721
1722 ## `trailing_semicolon`
1723
1724 Add trailing semicolon after break, continue and return
1725
1726 - **Default value**: `true`
1727 - **Possible values**: `true`, `false`
1728
1729 #### `true` (default):
1730 ```rust
1731 fn foo() -> usize {
1732     return 0;
1733 }
1734 ```
1735
1736 #### `false`:
1737 ```rust
1738 fn foo() -> usize {
1739     return 0
1740 }
1741 ```
1742
1743 ## `type_punctuation_density`
1744
1745 Determines if `+` or `=` are wrapped in spaces in the punctuation of types
1746
1747 - **Default value**: `"Wide"`
1748 - **Possible values**: `"Compressed"`, `"Wide"`
1749
1750 #### `"Wide"` (default):
1751
1752 ```rust
1753 fn lorem<Ipsum: Dolor + Sit = Amet>() {
1754         // body
1755 }
1756 ```
1757
1758 #### `"Compressed"`:
1759
1760 ```rust
1761 fn lorem<Ipsum: Dolor+Sit=Amet>() {
1762         // body
1763 }
1764 ```
1765
1766 ## `use_try_shorthand`
1767
1768 Replace uses of the try! macro by the ? shorthand
1769
1770 - **Default value**: `false`
1771 - **Possible values**: `true`, `false`
1772
1773 #### `false` (default):
1774
1775 ```rust
1776 let lorem = try!(ipsum.map(|dolor|dolor.sit()));
1777 ```
1778
1779 #### `true`:
1780
1781 ```rust
1782 let lorem = ipsum.map(|dolor| dolor.sit())?;
1783 ```
1784
1785
1786 ## `wrap_comments`
1787
1788 Break comments to fit on the line
1789
1790 - **Default value**: `false`
1791 - **Possible values**: `true`, `false`
1792
1793 #### `false` (default):
1794
1795 ```rust
1796 // 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.
1797 ```
1798
1799 #### `true`:
1800
1801 ```rust
1802 // Lorem ipsum dolor sit amet, consectetur adipiscing elit,
1803 // sed do eiusmod tempor incididunt ut labore et dolore
1804 // magna aliqua. Ut enim ad minim veniam, quis nostrud
1805 // exercitation ullamco laboris nisi ut aliquip ex ea
1806 // commodo consequat.
1807 ```
1808
1809 ## `wrap_match_arms`
1810
1811 Wrap the body of arms in blocks when it does not fit on the same line with the pattern of arms
1812
1813 - **Default value**: `true`
1814 - **Possible values**: `true`, `false`
1815
1816 #### `true` (default):
1817
1818 ```rust
1819 match lorem {
1820     true => {
1821         foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(x)
1822     }
1823     false => println!("{}", sit),
1824 }
1825 ```
1826
1827 #### `false`:
1828
1829 ```rust
1830 match lorem {
1831     true =>
1832         foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(x),
1833     false => println!("{}", sit),
1834 }
1835 ```
1836
1837 See also: [`match_block_trailing_comma`](#match_block_trailing_comma).
1838
1839 ## `write_mode`
1840
1841 What Write Mode to use when none is supplied: Replace, Overwrite, Display, Diff, Coverage
1842
1843 - **Default value**: `"Overwrite"`
1844 - **Possible values**: `"Checkstyle"`, `"Coverage"`, `"Diff"`, `"Display"`, `"Overwrite"`, `"Plain"`, `"Replace"`