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.
A possible content of rustfmt.toml or .rustfmt.toml might look like this:
indent_style = "Block" reorder_imported_names = true
Each configuration option is either stable or unstable. Stable options can be used directly, while unstable options are opt-in. To enable unstable options, set unstable_features = true in rustfmt.toml or pass --unstable-features to rustfmt.
Below you find a detailed visual guide on all the supported configuration options of rustfmt:
indent_styleIndent on expressions or items.
"Block""Block", "Visual""Block" (default):fn main() { let lorem = vec![ "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit", ]; }
"Visual":fn main() { let lorem = vec!["ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit"]; }
"Block" (default):fn main() { if lorem_ipsum && dolor_sit && amet_consectetur && lorem_sit && dolor_consectetur && amet_ipsum && lorem_consectetur { // ... } }
"Visual":fn main() { if lorem_ipsum && dolor_sit && amet_consectetur && lorem_sit && dolor_consectetur && amet_ipsum && lorem_consectetur { // ... } }
See also: control_brace_style.
"Block" (default):fn lorem() {} fn lorem(ipsum: usize) {} fn lorem( ipsum: usize, dolor: usize, sit: usize, amet: usize, consectetur: usize, adipiscing: usize, elit: usize, ) { // body }
"Visual":fn lorem() {} fn lorem(ipsum: usize) {} fn lorem(ipsum: usize, dolor: usize, sit: usize, amet: usize, consectetur: usize, adipiscing: usize, elit: usize) { // body }
"Block" (default):fn main() { lorem( "lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit", ); }
"Visual":fn main() { lorem("lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit"); }
"Block" (default):fn lorem< Ipsum: Eq = usize, Dolor: Eq = usize, Sit: Eq = usize, Amet: Eq = usize, Adipiscing: Eq = usize, Consectetur: Eq = usize, Elit: Eq = usize, >( ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, adipiscing: Adipiscing, consectetur: Consectetur, elit: Elit, ) -> T { // body }
"Visual":fn lorem<Ipsum: Eq = usize, Dolor: Eq = usize, Sit: Eq = usize, Amet: Eq = usize, Adipiscing: Eq = usize, Consectetur: Eq = usize, Elit: Eq = usize>( ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, adipiscing: Adipiscing, consectetur: Consectetur, elit: Elit) -> T { // body }
"Block" (default):fn main() { let lorem = Lorem { ipsum: dolor, sit: amet, }; }
"Visual":fn main() { let lorem = Lorem { ipsum: dolor, sit: amet, }; }
See also: struct_lit_single_line, indent_style.
"Block" (default):fn lorem<Ipsum, Dolor, Sit, Amet>() -> T where Ipsum: Eq, Dolor: Eq, Sit: Eq, Amet: Eq, { // body }
"Visual":fn lorem<Ipsum, Dolor, Sit, Amet>() -> T where Ipsum: Eq, Dolor: Eq, Sit: Eq, Amet: Eq { // body }
use_small_heuristicsWhether to use different formatting for items and expressions if they satisfy a heuristic notion of ‘small’.
truetrue, falsetrue (default):enum Lorem { Ipsum, Dolor(bool), Sit { amet: Consectetur, adipiscing: Elit }, } fn main() { lorem( "lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", ); let lorem = Lorem { ipsum: dolor, sit: amet, }; let lorem = Lorem { ipsum: dolor }; let lorem = if ipsum { dolor } else { sit }; }
false:enum Lorem { Ipsum, Dolor(bool), Sit { amet: Consectetur, adipiscing: Elit, }, } fn main() { lorem("lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing"); let lorem = Lorem { ipsum: dolor, sit: amet, }; let lorem = if ipsum { dolor } else { sit }; }
binop_separatorWhere to put a binary operator when a binary expression goes multiline.
"Front""Front", "Back""Front" (default):fn main() { let or = foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo || barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbar; let sum = 123456789012345678901234567890 + 123456789012345678901234567890 + 123456789012345678901234567890; let range = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb; }
"Back":fn main() { let or = foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo || barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbar; let sum = 123456789012345678901234567890 + 123456789012345678901234567890 + 123456789012345678901234567890; let range = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.. bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb; }
combine_control_exprCombine control expressions with function calls.
truetrue, falsetrue (default):fn example() { // If foo!(if x { foo(); } else { bar(); }); // IfLet foo!(if let Some(..) = x { foo(); } else { bar(); }); // While foo!(while x { foo(); bar(); }); // WhileLet foo!(while let Some(..) = x { foo(); bar(); }); // ForLoop foo!(for x in y { foo(); bar(); }); // Loop foo!(loop { foo(); bar(); }); }
false:fn example() { // If foo!( if x { foo(); } else { bar(); } ); // IfLet foo!( if let Some(..) = x { foo(); } else { bar(); } ); // While foo!( while x { foo(); bar(); } ); // WhileLet foo!( while let Some(..) = x { foo(); bar(); } ); // ForLoop foo!( for x in y { foo(); bar(); } ); // Loop foo!( loop { foo(); bar(); } ); }
comment_widthMaximum length of comments. No effect unlesswrap_comments = true.
80Note: A value of 0 results in wrap_comments being applied regardless of a line's width.
80 (default; comments shorter than comment_width):// Lorem ipsum dolor sit amet, consectetur adipiscing elit.
60 (comments longer than comment_width):// Lorem ipsum dolor sit amet, // consectetur adipiscing elit.
See also wrap_comments.
condense_wildcard_suffixesReplace strings of _ wildcards by a single .. in tuple patterns
falsetrue, falsefalse (default):fn main() { let (lorem, ipsum, _, _) = (1, 2, 3, 4); let (lorem, ipsum, ..) = (1, 2, 3, 4); }
true:fn main() { let (lorem, ipsum, ..) = (1, 2, 3, 4); }
control_brace_styleBrace style for control flow constructs
"AlwaysSameLine""AlwaysNextLine", "AlwaysSameLine", "ClosingNextLine""AlwaysSameLine" (default):fn main() { if lorem { println!("ipsum!"); } else { println!("dolor!"); } }
"AlwaysNextLine":fn main() { if lorem { println!("ipsum!"); } else { println!("dolor!"); } }
"ClosingNextLine":fn main() { if lorem { println!("ipsum!"); } else { println!("dolor!"); } }
disable_all_formattingDon't reformat anything
falsetrue, falseerror_on_line_overflowError if unable to get all lines within max_width, except for comments and string literals.
truetrue, falseSee also max_width.
error_on_unformattedError if unable to get comments or string literals within max_width, or they are left with trailing whitespaces.
falsetrue, falsefn_args_densityArgument density in functions
"Tall""Compressed", "Tall", "Vertical""Tall" (default):trait Lorem { fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet); fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet) { // body } fn lorem( ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, consectetur: Consectetur, adipiscing: Adipiscing, elit: Elit, ); fn lorem( ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, consectetur: Consectetur, adipiscing: Adipiscing, elit: Elit, ) { // body } }
"Compressed":trait Lorem { fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet); fn lorem(ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet) { // body } fn lorem( ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, consectetur: Consectetur, adipiscing: Adipiscing, elit: Elit, ); fn lorem( ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, consectetur: Consectetur, adipiscing: Adipiscing, elit: Elit, ) { // body } }
"Vertical":trait Lorem { fn lorem( ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, ); fn lorem( ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, ) { // body } fn lorem( ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, consectetur: Consectetur, adipiscing: Adipiscing, elit: Elit, ); fn lorem( ipsum: Ipsum, dolor: Dolor, sit: Sit, amet: Amet, consectetur: Consectetur, adipiscing: Adipiscing, elit: Elit, ) { // body } }
brace_styleBrace style for items
"SameLineWhere""AlwaysNextLine", "PreferSameLine", "SameLineWhere""SameLineWhere" (default):fn lorem() { // body } fn lorem(ipsum: usize) { // body } fn lorem<T>(ipsum: T) where T: Add + Sub + Mul + Div, { // body }
"AlwaysNextLine":fn lorem() { // body } fn lorem(ipsum: usize) { // body } fn lorem<T>(ipsum: T) where T: Add + Sub + Mul + Div, { // body }
"PreferSameLine":fn lorem() { // body } fn lorem(ipsum: usize) { // body } fn lorem<T>(ipsum: T) where T: Add + Sub + Mul + Div, { // body }
"SameLineWhere" (default):struct Lorem { ipsum: bool, } struct Dolor<T> where T: Eq, { sit: T, }
"AlwaysNextLine":struct Lorem { ipsum: bool, } struct Dolor<T> where T: Eq, { sit: T, }
"PreferSameLine":struct Lorem { ipsum: bool, } struct Dolor<T> where T: Eq, { sit: T, }
empty_item_single_linePut empty-body functions and impls on a single line
truetrue, falsetrue (default):fn lorem() {} impl Lorem {}
false:fn lorem() { } impl Lorem { }
See also brace_style, control_brace_style.
fn_single_linePut single-expression functions on a single line
falsetrue, falsefalse (default):fn lorem() -> usize { 42 } fn lorem() -> usize { let ipsum = 42; ipsum }
true:fn lorem() -> usize { 42 } fn lorem() -> usize { let ipsum = 42; ipsum }
See also control_brace_style.
where_single_lineTo force single line where layout
falsetrue, falsefalse (default):impl<T> Lorem for T where Option<T>: Ipsum, { // body }
true:impl<T> Lorem for T where Option<T>: Ipsum { // body }
See also brace_style, control_brace_style.
force_explicit_abiAlways print the abi for extern items
truetrue, falseNote: Non-“C” ABIs are always printed. If false then “C” is removed.
true (default):extern "C" { pub static lorem: c_int; }
false:extern { pub static lorem: c_int; }
format_stringsFormat string literals where necessary
falsetrue, falsefalse (default):fn main() { let lorem = "ipsum dolor sit amet consectetur adipiscing elit lorem ipsum dolor sit amet consectetur adipiscing"; }
true:fn main() { let lorem = "ipsum dolor sit amet consectetur adipiscing elit lorem ipsum dolor sit amet \ consectetur adipiscing"; }
See also max_width.
hard_tabsUse tab characters for indentation, spaces for alignment
falsetrue, falsefalse (default):fn lorem() -> usize { 42 // spaces before 42 }
true:fn lorem() -> usize { 42 // tabs before 42 }
See also: tab_spaces.
imports_indentIndent style of imports
"Visual""Block", "Visual""Visual" (default):use foo::{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy, zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz};
"Block":use foo::{ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy, zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz, };
See also: imports_layout.
imports_layoutItem layout inside a imports block
"Mixed" (default):use foo::{xxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyy, zzzzzzzzzzzzzzzzzz}; use foo::{aaaaaaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbb, cccccccccccccccccc, dddddddddddddddddd, eeeeeeeeeeeeeeeeee, ffffffffffffffffff};
"Horizontal":Note: This option forces all imports onto one line and may exceed max_width.
use foo::{xxx, yyy, zzz}; use foo::{aaa, bbb, ccc, ddd, eee, fff};
"HorizontalVertical":use foo::{xxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyy, zzzzzzzzzzzzzzzzzz}; use foo::{aaaaaaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbb, cccccccccccccccccc, dddddddddddddddddd, eeeeeeeeeeeeeeeeee, ffffffffffffffffff};
"Vertical":use foo::{xxx, yyy, zzz}; use foo::{aaa, bbb, ccc, ddd, eee, fff};
match_block_trailing_commaPut a trailing comma after a block based match arm (non-block arms are not affected)
falsetrue, falsefalse (default):fn main() { match lorem { Lorem::Ipsum => { println!("ipsum"); } Lorem::Dolor => println!("dolor"), } }
true:fn main() { match lorem { Lorem::Ipsum => { println!("ipsum"); }, Lorem::Dolor => println!("dolor"), } }
See also: trailing_comma, match_arm_blocks.
max_widthMaximum width of each line
100See also error_on_line_overflow.
merge_derivesMerge multiple derives into a single one.
truetrue, falsetrue (default):#[derive(Eq, PartialEq, Debug, Copy, Clone)] pub enum Foo {}
false:#[derive(Eq, PartialEq)] #[derive(Debug)] #[derive(Copy, Clone)] pub enum Foo {}
force_multiline_blocksForce multiline closure and match arm bodies to be wrapped in a block
falsefalse, truefalse (default):fn main() { result.and_then(|maybe_value| match maybe_value { None => foo(), Some(value) => bar(), }); match lorem { None => if ipsum { println!("Hello World"); }, Some(dolor) => foo(), } }
true:fn main() { result.and_then(|maybe_value| { match maybe_value { None => foo(), Some(value) => bar(), } }); match lorem { None => { if ipsum { println!("Hello World"); } } Some(dolor) => foo(), } }
newline_styleUnix or Windows line endings
"Unix""Native", "Unix", "Windows"normalize_commentsConvert /* */ comments to // comments where possible
falsetrue, falsefalse (default):// Lorem ipsum: fn dolor() -> usize {} /* sit amet: */ fn adipiscing() -> usize {}
true:// Lorem ipsum: fn dolor() -> usize {} // sit amet: fn adipiscing() -> usize {}
reorder_imported_namesReorder lists of names in import statements alphabetically
falsetrue, falsefalse (default):use super::{lorem, ipsum, dolor, sit};
true:use super::{dolor, ipsum, lorem, sit};
See also reorder_imports.
reorder_importsReorder import statements alphabetically
falsetrue, falsefalse (default):use lorem; use ipsum; use dolor; use sit;
true:use dolor; use ipsum; use lorem; use sit;
See also reorder_imported_names, reorder_imports_in_group.
reorder_imports_in_groupReorder import statements in group
falsetrue, falseNote: This option takes effect only when reorder_imports is set to true.
true (default):use std::io; use std::mem; use dolor; use ipsum; use lorem; use sit;
false:use dolor; use ipsum; use lorem; use sit; use std::io; use std::mem;
See also reorder_imports.
reorder_extern_cratesReorder extern crate statements alphabetically
truetrue, falsetrue (default):extern crate dolor; extern crate ipsum; extern crate lorem; extern crate sit;
false:extern crate lorem; extern crate ipsum; extern crate dolor; extern crate sit;
See also reorder_extern_crates_in_group.
reorder_extern_crates_in_groupReorder extern crate statements in group
truetrue, falsefalse (default):This value has no influence beyond the effect of the reorder_extern_crates option. Set reorder_extern_crates to false if you do not want extern crate groups to be collapsed and ordered.
true:Note: This only takes effect when reorder_extern_crates is set to true.
extern crate a; extern crate b; extern crate dolor; extern crate ipsum; extern crate lorem; extern crate sit;
reorder_modulesReorder mod declarations alphabetically in group.
truetrue, falsetrue (default)mod a; mod b; mod dolor; mod ipsum; mod lorem; mod sit;
falsemod b; mod a; mod lorem; mod ipsum; mod dolor; mod sit;
Note mod with #[macro_export] will not be reordered since that could change the semantic of the original source code.
report_todoReport TODO items in comments.
"Never""Always", "Unnumbered", "Never"Warns about any comments containing TODO in them when set to "Always". If it contains a #X (with X being a number) in parentheses following the TODO, "Unnumbered" will ignore it.
See also report_fixme.
report_fixmeReport FIXME items in comments.
"Never""Always", "Unnumbered", "Never"Warns about any comments containing FIXME in them when set to "Always". If it contains a #X (with X being a number) in parentheses following the FIXME, "Unnumbered" will ignore it.
See also report_todo.
skip_childrenDon't reformat out of line modules
falsetrue, falsespace_after_colonLeave a space after the colon.
truetrue, falsetrue (default):fn lorem<T: Eq>(t: T) { let lorem: Dolor = Lorem { ipsum: dolor, sit: amet, }; }
false:fn lorem<T:Eq>(t:T) { let lorem:Dolor = Lorem { ipsum:dolor, sit:amet, }; }
See also: space_before_colon.
space_before_colonLeave a space before the colon.
falsetrue, falsefalse (default):fn lorem<T: Eq>(t: T) { let lorem: Dolor = Lorem { ipsum: dolor, sit: amet, }; }
true:fn lorem<T : Eq>(t : T) { let lorem : Dolor = Lorem { ipsum : dolor, sit : amet, }; }
See also: space_after_colon.
struct_field_align_thresholdThe maximum diff of width between struct fields to be aligned with each other.
0 (default):struct Foo { x: u32, yy: u32, zzz: u32, }
20:struct Foo { x: u32, yy: u32, zzz: u32, }
spaces_around_rangesPut spaces around the .., ..=, and ... range operators
falsetrue, falsefalse (default):fn main() { let lorem = 0..10; let ipsum = 0..=10; match lorem { 1..5 => foo(), _ => bar, } match lorem { 1..=5 => foo(), _ => bar, } match lorem { 1...5 => foo(), _ => bar, } }
true:fn main() { let lorem = 0 .. 10; let ipsum = 0 ..= 10; match lorem { 1 .. 5 => foo(), _ => bar, } match lorem { 1 ..= 5 => foo(), _ => bar, } match lorem { 1 ... 5 => foo(), _ => bar, } }
spaces_within_parens_and_bracketsPut spaces within non-empty generic arguments, parentheses, and square brackets
falsetrue, falsefalse (default):// generic arguments fn lorem<T: Eq>(t: T) { // body } // non-empty parentheses fn lorem<T: Eq>(t: T) { let lorem = (ipsum, dolor); } // non-empty square brackets fn lorem<T: Eq>(t: T) { let lorem: [usize; 2] = [ipsum, dolor]; }
true:// generic arguments fn lorem< T: Eq >( t: T ) { // body } // non-empty parentheses fn lorem< T: Eq >( t: T ) { let lorem = ( ipsum, dolor ); } // non-empty square brackets fn lorem< T: Eq >( t: T ) { let lorem: [ usize; 2 ] = [ ipsum, dolor ]; }
struct_lit_single_linePut small struct literals on a single line
truetrue, falsetrue (default):fn main() { let lorem = Lorem { foo: bar, baz: ofo }; }
false:fn main() { let lorem = Lorem { foo: bar, baz: ofo, }; }
See also: indent_style.
tab_spacesNumber of spaces per tab
44 (default):fn lorem() { let ipsum = dolor(); let sit = vec![ "amet consectetur adipiscing elit amet consectetur adipiscing elit amet consectetur.", ]; }
2:fn lorem() { let ipsum = dolor(); let sit = vec![ "amet consectetur adipiscing elit amet consectetur adipiscing elit amet consectetur.", ]; }
See also: hard_tabs.
trailing_commaHow to handle trailing commas for lists
"Vertical""Always", "Never", "Vertical""Vertical" (default):fn main() { let Lorem { ipsum, dolor, sit } = amet; let Lorem { ipsum, dolor, sit, amet, consectetur, adipiscing, } = elit; }
"Always":fn main() { let Lorem { ipsum, dolor, sit, } = amet; let Lorem { ipsum, dolor, sit, amet, consectetur, adipiscing, } = elit; }
"Never":fn main() { let Lorem { ipsum, dolor, sit } = amet; let Lorem { ipsum, dolor, sit, amet, consectetur, adipiscing } = elit; }
See also: match_block_trailing_comma.
trailing_semicolonAdd trailing semicolon after break, continue and return
truetrue, falsetrue (default):fn foo() -> usize { return 0; }
false:fn foo() -> usize { return 0 }
type_punctuation_densityDetermines if + or = are wrapped in spaces in the punctuation of types
"Wide""Compressed", "Wide""Wide" (default):fn lorem<Ipsum: Dolor + Sit = Amet>() { // body }
"Compressed":fn lorem<Ipsum: Dolor+Sit=Amet>() { // body }
use_field_init_shorthandUse field initialize shorthand if possible.
falsetrue, falsefalse (default):struct Foo { x: u32, y: u32, z: u32, } fn main() { let x = 1; let y = 2; let z = 3; let a = Foo { x: x, y: y, z: z }; }
true:struct Foo { x: u32, y: u32, z: u32, } fn main() { let x = 1; let y = 2; let z = 3; let a = Foo { x, y, z }; }
use_try_shorthandReplace uses of the try! macro by the ? shorthand
falsetrue, falsefalse (default):fn main() { let lorem = try!(ipsum.map(|dolor| dolor.sit())); }
true:fn main() { let lorem = ipsum.map(|dolor| dolor.sit())?; }
wrap_commentsBreak comments to fit on the line
falsetrue, falsefalse (default):// 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.
true:// 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.
match_arm_blocksWrap the body of arms in blocks when it does not fit on the same line with the pattern of arms
truetrue, falsetrue (default):fn main() { match lorem { true => { foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(x) } false => println!("{}", sit), } }
false:fn main() { match lorem { true => foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(x), false => println!("{}", sit), } }
See also: match_block_trailing_comma.
write_modeWhat Write Mode to use when none is supplied: Replace, Overwrite, Display, Diff, Coverage
"Overwrite""Checkstyle", "Coverage", "Diff", "Display", "Overwrite", "Plain", "Replace"blank_lines_upper_boundMaximum number of blank lines which can be put between items. If more than this number of consecutive empty lines are found, they are trimmed down to match this integer.
1Original Code:
#![rustfmt_skip] fn foo() { println!("a"); } fn bar() { println!("b"); println!("c"); }
1 (default):fn foo() { println!("a"); } fn bar() { println!("b"); println!("c"); }
2 (default):fn foo() { println!("a"); } fn bar() { println!("b"); println!("c"); }
See also: blank_lines_lower_bound
blank_lines_lower_boundMinimum number of blank lines which must be put between items. If two items have fewer blank lines between them, additional blank lines are inserted.
0Original Code (rustfmt will not change it with the default value of 0):
#![rustfmt_skip] fn foo() { println!("a"); } fn bar() { println!("b"); println!("c"); }
1fn foo() { println!("a"); } fn bar() { println!("b"); println!("c"); }
remove_blank_lines_at_start_or_end_of_blockRemove blank lines at the start or the end of a block.
truetrue, falsetruefn foo() { let msg = { let mut str = String::new(); str.push_str("hello, "); str.push_str("world!"); str }; println!("{}", msg); }
falsefn foo() { let msg = { let mut str = String::new(); str.push_str("hello, "); str.push_str("world!"); str }; println!("{}", msg); }
required_versionRequire a specific version of rustfmt. If you want to make sure that the specific version of rustfmt is used in your CI, use this option.
CARGO_PKG_VERSION"0.3.8")hide_parse_errorsDo not show parse errors if the parser failed to parse files.
falsetrue, falsecolorWhether to use colored output or not.
"Auto"unstable_featuresEnable unstable featuers on stable channel.
falsetrue, falselicense_template_pathCheck whether beginnings of files match a license template.
A license template is a plain text file which is matched literally against the beginning of each source file, except for {}-delimited blocks, which are matched as regular expressions. The following license template therefore matches strings like // Copyright 2017 The Rust Project Developers., // Copyright 2018 The Rust Project Developers., etc.:
// Copyright {\d+} The Rust Project Developers.
\{, \} and \\ match literal braces / backslashes.
ignoreSkip formatting the specified files and directories.
If you want to ignore specific files, put the following to your config file:
ignore = [ "src/types.rs", "src/foo/bar.rs", ]
If you want to ignore every file under examples/, put the following to your config file:
ignore [ "examples", ]