X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=Configurations.md;h=7557b3637f13e8dffba6bbcd645f9409405ed0c1;hb=bfe5e9c108bff11eff00643b1d19b6665e43283e;hp=824868bca098290a33e8404a903d5eb2d9d4034b;hpb=4c1b0c2241bf72b2c66a73b3468e6698964e3f0a;p=rust.git diff --git a/Configurations.md b/Configurations.md index 824868bca09..7557b3637f1 100644 --- a/Configurations.md +++ b/Configurations.md @@ -1,6 +1,6 @@ # Configuring Rustfmt -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. +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. If none of these directories contain such a file, both your home directory and a directory called `rustfmt` in your [global config directory](https://docs.rs/dirs/1.0.4/dirs/fn.config_dir.html) (e.g. `.config/rustfmt/`) are checked as well. A possible content of `rustfmt.toml` or `.rustfmt.toml` might look like this: @@ -24,7 +24,7 @@ Indent on expressions or items. - **Default value**: `"Block"` - **Possible values**: `"Block"`, `"Visual"` -- **Stable**: No +- **Stable**: No (tracking issue: #3346) ### Array @@ -236,7 +236,7 @@ fn main() { ```rust fn main() { let lorem = Lorem { ipsum: dolor, - sit: amet, }; + sit: amet }; } ``` @@ -275,8 +275,8 @@ fn lorem() -> T Whether to use different formatting for items and expressions if they satisfy a heuristic notion of 'small'. -- **Default value**: `Default` -- **Possible values**: `Default`, `Off`, `Max` +- **Default value**: `"Default"` +- **Possible values**: `"Default"`, `"Off"`, `"Max"` - **Stable**: Yes #### `Default` (default): @@ -361,7 +361,7 @@ Where to put a binary operator when a binary expression goes multiline. - **Default value**: `"Front"` - **Possible values**: `"Front"`, `"Back"` -- **Stable**: No +- **Stable**: No (tracking issue: #3368) #### `"Front"` (default): @@ -401,7 +401,7 @@ Combine control expressions with function calls. - **Default value**: `true` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3369) #### `true` (default): @@ -509,7 +509,7 @@ Maximum length of comments. No effect unless`wrap_comments = true`. - **Default value**: `80` - **Possible values**: any positive integer -- **Stable**: No +- **Stable**: No (tracking issue: #3349) **Note:** A value of `0` results in [`wrap_comments`](#wrap_comments) being applied regardless of a line's width. @@ -532,7 +532,7 @@ Replace strings of _ wildcards by a single .. in tuple patterns - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3384) #### `false` (default): @@ -557,7 +557,7 @@ Brace style for control flow constructs - **Default value**: `"AlwaysSameLine"` - **Possible values**: `"AlwaysNextLine"`, `"AlwaysSameLine"`, `"ClosingNextLine"` -- **Stable**: No +- **Stable**: No (tracking issue: #3377) #### `"AlwaysSameLine"` (default): @@ -605,7 +605,7 @@ Don't reformat anything - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3388) ## `error_on_line_overflow` @@ -616,7 +616,7 @@ using a shorter name. - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3391) See also [`max_width`](#max_width). @@ -627,7 +627,7 @@ trailing whitespaces. - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3392) ## `fn_args_density` @@ -635,7 +635,7 @@ Argument density in functions - **Default value**: `"Tall"` - **Possible values**: `"Compressed"`, `"Tall"`, `"Vertical"` -- **Stable**: No +- **Stable**: No (tracking issue: #3375) #### `"Tall"` (default): @@ -746,7 +746,7 @@ Brace style for items - **Default value**: `"SameLineWhere"` - **Possible values**: `"AlwaysNextLine"`, `"PreferSameLine"`, `"SameLineWhere"` -- **Stable**: No +- **Stable**: No (tracking issue: #3376) ### Functions @@ -862,7 +862,7 @@ Put empty-body functions and impls on a single line - **Default value**: `true` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3356) #### `true` (default): @@ -895,7 +895,7 @@ doesn't get ignored when aligning. - **Default value** : 0 - **Possible values**: any positive integer -- **Stable**: No +- **Stable**: No (tracking issue: #3372) #### `0` (default): @@ -938,7 +938,7 @@ Put single-expression functions on a single line - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3358) #### `false` (default): @@ -973,7 +973,7 @@ Forces the `where` clause to be laid out on a single line. - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3359) #### `false` (default): @@ -1031,14 +1031,13 @@ Format string literals where necessary - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3353) #### `false` (default): ```rust fn main() { - let lorem = - "ipsum dolor sit amet consectetur adipiscing elit lorem ipsum dolor sit amet consectetur adipiscing"; + let lorem = "ipsum dolor sit amet consectetur adipiscing elit lorem ipsum dolor sit amet consectetur adipiscing"; } ``` @@ -1059,7 +1058,7 @@ Format the metavariable matching patterns in macros. - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3354) #### `false` (default): @@ -1096,7 +1095,7 @@ Format the bodies of macros. - **Default value**: `true` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3355) #### `true` (default): @@ -1156,7 +1155,7 @@ Indent style of imports - **Default Value**: `"Block"` - **Possible values**: `"Block"`, `"Visual"` -- **Stable**: No +- **Stable**: No (tracking issue: #3360) #### `"Block"` (default): @@ -1182,7 +1181,7 @@ Item layout inside a imports block - **Default value**: "Mixed" - **Possible values**: "Horizontal", "HorizontalVertical", "Mixed", "Vertical" -- **Stable**: No +- **Stable**: No (tracking issue: #3361) #### `"Mixed"` (default): @@ -1245,7 +1244,7 @@ Merge multiple imports into a single nested import. - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3362) #### `false` (default): @@ -1268,7 +1267,7 @@ Put a trailing comma after a block based match arm (non-block arms are not affec - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3380) #### `false` (default): @@ -1338,7 +1337,7 @@ Force multiline closure and match arm bodies to be wrapped in a block - **Default value**: `false` - **Possible values**: `false`, `true` -- **Stable**: No +- **Stable**: No (tracking issue: #3374) #### `false` (default): @@ -1414,7 +1413,7 @@ Convert /* */ comments to // comments where possible - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3350) #### `false` (default): @@ -1520,7 +1519,7 @@ mod dolor; mod sit; ``` -**Note** `mod` with `#[macro_export]` will not be reordered since that could change the semantic +**Note** `mod` with `#[macro_export]` will not be reordered since that could change the semantics of the original source code. ## `reorder_impl_items` @@ -1529,7 +1528,7 @@ Reorder impl items. `type` and `const` are put first, then macros and methods. - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3363) #### `false` (default) @@ -1565,7 +1564,7 @@ Report `TODO` items in comments. - **Default value**: `"Never"` - **Possible values**: `"Always"`, `"Unnumbered"`, `"Never"` -- **Stable**: No +- **Stable**: No (tracking issue: #3393) 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 @@ -1579,7 +1578,7 @@ Report `FIXME` items in comments. - **Default value**: `"Never"` - **Possible values**: `"Always"`, `"Unnumbered"`, `"Never"` -- **Stable**: No +- **Stable**: No (tracking issue: #3394) 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 @@ -1594,7 +1593,7 @@ Don't reformat out of line modules - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3389) ## `space_after_colon` @@ -1602,7 +1601,7 @@ Leave a space after the colon. - **Default value**: `true` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3366) #### `true` (default): @@ -1634,7 +1633,7 @@ Leave a space before the colon. - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3365) #### `false` (default): @@ -1665,8 +1664,8 @@ See also: [`space_after_colon`](#space_after_colon). The maximum diff of width between struct fields to be aligned with each other. - **Default value** : 0 -- **Possible values**: any positive integer -- **Stable**: No +- **Possible values**: any non-negative integer +- **Stable**: No (tracking issue: #3371) #### `0` (default): @@ -1694,7 +1693,7 @@ Put spaces around the .., ..=, and ... range operators - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3367) #### `false` (default): @@ -1750,7 +1749,7 @@ Put small struct literals on a single line - **Default value**: `true` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3357) #### `true` (default): @@ -1815,7 +1814,7 @@ How to handle trailing commas for lists - **Default value**: `"Vertical"` - **Possible values**: `"Always"`, `"Never"`, `"Vertical"` -- **Stable**: No +- **Stable**: No (tracking issue: #3379) #### `"Vertical"` (default): @@ -1873,7 +1872,7 @@ Add trailing semicolon after break, continue and return - **Default value**: `true` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3378) #### `true` (default): ```rust @@ -1895,7 +1894,7 @@ Determines if `+` or `=` are wrapped in spaces in the punctuation of types - **Default value**: `"Wide"` - **Possible values**: `"Compressed"`, `"Wide"` -- **Stable**: No +- **Stable**: No (tracking issue: #3364) #### `"Wide"` (default): @@ -1979,6 +1978,56 @@ fn main() { } ``` +## `format_doc_comments` + +Format doc comments. + +- **Default value**: `false` +- **Possible values**: `true`, `false` +- **Stable**: No (tracking issue: #3348) + +#### `false` (default): + +```rust +/// Adds one to the number given. +/// +/// # Examples +/// +/// ```rust +/// let five=5; +/// +/// assert_eq!( +/// 6, +/// add_one(5) +/// ); +/// # fn add_one(x: i32) -> i32 { +/// # x + 1 +/// # } +/// ``` +fn add_one(x: i32) -> i32 { + x + 1 +} +``` + +#### `true` + +```rust +/// Adds one to the number given. +/// +/// # Examples +/// +/// ```rust +/// let five = 5; +/// +/// assert_eq!(6, add_one(5)); +/// # fn add_one(x: i32) -> i32 { +/// # x + 1 +/// # } +/// ``` +fn add_one(x: i32) -> i32 { + x + 1 +} +``` ## `wrap_comments` @@ -1986,7 +2035,7 @@ Break comments to fit on the line - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3347) #### `false` (default): @@ -2010,7 +2059,7 @@ Wrap the body of arms in blocks when it does not fit on the same line with the p - **Default value**: `true` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3373) #### `true` (default): @@ -2039,6 +2088,88 @@ fn main() { See also: [`match_block_trailing_comma`](#match_block_trailing_comma). +## `overflow_delimited_expr` + +When structs, slices, arrays, and block/array-like macros are used as the last +argument in an expression list, allow them to overflow (like blocks/closures) +instead of being indented on a new line. + +- **Default value**: `false` +- **Possible values**: `true`, `false` +- **Stable**: No (tracking issue: #3370) + +#### `false` (default): + +```rust +fn example() { + foo(ctx, |param| { + action(); + foo(param) + }); + + foo( + ctx, + Bar { + x: value, + y: value2, + }, + ); + + foo( + ctx, + &[ + MAROON_TOMATOES, + PURPLE_POTATOES, + ORGANE_ORANGES, + GREEN_PEARS, + RED_APPLES, + ], + ); + + foo( + ctx, + vec![ + MAROON_TOMATOES, + PURPLE_POTATOES, + ORGANE_ORANGES, + GREEN_PEARS, + RED_APPLES, + ], + ); +} +``` + +#### `true`: + +```rust +fn example() { + foo(ctx, |param| { + action(); + foo(param) + }); + + foo(ctx, Bar { + x: value, + y: value2, + }); + + foo(ctx, &[ + MAROON_TOMATOES, + PURPLE_POTATOES, + ORGANE_ORANGES, + GREEN_PEARS, + RED_APPLES, + ]); + + foo(ctx, vec![ + MAROON_TOMATOES, + PURPLE_POTATOES, + ORGANE_ORANGES, + GREEN_PEARS, + RED_APPLES, + ]); +} +``` ## `blank_lines_upper_bound` @@ -2046,8 +2177,8 @@ Maximum number of blank lines which can be put between items. If more than this lines are found, they are trimmed down to match this integer. - **Default value**: `1` -- **Possible values**: *unsigned integer* -- **Stable**: No +- **Possible values**: any non-negative integer +- **Stable**: No (tracking issue: #3381) ### Example Original Code: @@ -2106,7 +2237,7 @@ them, additional blank lines are inserted. - **Default value**: `0` - **Possible values**: *unsigned integer* -- **Stable**: No +- **Stable**: No (tracking issue: #3382) ### Example Original Code (rustfmt will not change it with the default value of `0`): @@ -2146,7 +2277,7 @@ specific version of rustfmt is used in your CI, use this option. - **Default value**: `CARGO_PKG_VERSION` - **Possible values**: any published version (e.g. `"0.3.8"`) -- **Stable**: No +- **Stable**: No (tracking issue: #3386) ## `hide_parse_errors` @@ -2154,7 +2285,7 @@ Do not show parse errors if the parser failed to parse files. - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3390) ## `color` @@ -2162,23 +2293,23 @@ Whether to use colored output or not. - **Default value**: `"Auto"` - **Possible values**: "Auto", "Always", "Never" -- **Stable**: No +- **Stable**: No (tracking issue: #3385) ## `unstable_features` -Enable unstable features on stable channel. +Enable unstable features on the unstable channel. - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3387) ## `license_template_path` Check whether beginnings of files match a license template. -- **Default value**: `""`` +- **Default value**: `""` - **Possible values**: path to a license template file -- **Stable**: No +- **Stable**: No (tracking issue: #3352) 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 @@ -2196,9 +2327,9 @@ Copyright 2018 The Rust Project Developers.`, etc.: Skip formatting the specified files and directories. -- **Default value**: format every files +- **Default value**: format every file - **Possible values**: See an example below -- **Stable**: No +- **Stable**: No (tracking issue: #3395) ### Example @@ -2225,23 +2356,39 @@ Specifies which edition is used by the parser. - **Default value**: `2015` - **Possible values**: `2015`, `2018` -- **Stable**: No - -### Example +- **Stable**: Yes -If you want to format code that requires edition 2018, add the following to your config file: +Rustfmt is able to pick up the edition used by reading the `Cargo.toml` file if executed +through the Cargo's formatting tool `cargo fmt`. Otherwise, the edition needs to be specified +in your config file: ```toml edition = "2018" ``` +## `version` + +Which version of the formatting rules to use. `Version::One` is backwards-compatible +with Rustfmt 1.0. Other versions are only backwards compatible within a major +version number. + +- **Default value**: `One` +- **Possible values**: `One`, `Two` +- **Stable**: No (tracking issue: #3383) + +### Example + +```toml +version = "Two" +``` + ## `normalize_doc_attributes` Convert `#![doc]` and `#[doc]` attributes to `//!` and `///` doc comments. - **Default value**: `false` - **Possible values**: `true`, `false` -- **Stable**: No +- **Stable**: No (tracking issue: #3351) #### `false` (default): @@ -2261,6 +2408,27 @@ pub enum Foo {} pub enum Foo {} ``` +## `inline_attribute_width` + +Write an item and its attribute on the same line if their combined width is below a threshold + +- **Default value**: 0 +- **Possible values**: any positive integer +- **Stable**: No (tracking issue: #3343) + +### Example + +#### `0` (default): +```rust +#[cfg(feature = "alloc")] +use core::slice; +``` + +#### `50`: +```rust +#[cfg(feature = "alloc")] use core::slice; +``` + ## `emit_mode` Internal option