]> git.proxmox.com Git - rustc.git/blame - src/tools/rustfmt/CHANGELOG.md
New upstream version 1.61.0+dfsg1
[rustc.git] / src / tools / rustfmt / CHANGELOG.md
CommitLineData
f20569fa
XL
1# Changelog
2
3## [Unreleased]
4
ee023bcb
FG
5### Fixed
6
7- Fixes issue where wrapped strings would be incorrectly indented in macro defs when `format_strings` was enabled [#4036](https://github.com/rust-lang/rustfmt/issues/4036)
8
3c0e092e
XL
9## [1.4.38] 2021-10-20
10
11### Changed
12
13- Switched from `rustc-ap-*` crates to `rustc_private` for consumption model of rustc internals
14- `annotate-snippets` updated to v0.8 [PR #4762](https://github.com/rust-lang/rustfmt/pull/4762)
15- Greatly improved the performance of `cargo fmt` in large workspaces utilizing the `--all` flag by updating to a newer version of `cargo_metadata` that leverages updated `cargo` output from v1.51+ [PR #4997](https://github.com/rust-lang/rustfmt/pull/4997)
16- Improved formatting of long slice patterns [#4530](https://github.com/rust-lang/rustfmt/issues/4530)
17 - **Note you must have `version = Two` in your configuration to take advantage of the new formatting**
18- Stabilized `match_block_trailing_comma` configuration option [#3380](https://github.com/rust-lang/rustfmt/issues/3380) - [https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=#match_block_trailing_comma](https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=#match_block_trailing_comma)
19- Stabilized `disable_all_formatting` configuration option [#5026](https://github.com/rust-lang/rustfmt/pull/5026) - [https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=#disable_all_formatting](https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=#disable_all_formatting)
20- Various improvements to the configuration documentation website [https://rust-lang.github.io/rustfmt/?version=v1.4.38]([https://rust-lang.github.io/rustfmt/?version=v1.4.38])
21- Addressed various clippy and rustc warnings
22
23
24### Fixed
25
26- Resolved issue where specious whitespace would be inserted when a block style comment was terminated within string literal processing [#4312](https://github.com/rust-lang/rustfmt/issues/4312)
27- Nested out-of-line mods are again parsed and formatted [#4874](https://github.com/rust-lang/rustfmt/issues/4874)
28- Accepts `2021` for edition value from rustfmt command line [PR #4847](https://github.com/rust-lang/rustfmt/pull/4847)
29- Unstable command line options are no longer displayed in `--help` text on stable [PR #4798](https://github.com/rust-lang/rustfmt/issues/4798)
30- Stopped panicking on patterns in match arms which start with non-ascii characters [#4868](https://github.com/rust-lang/rustfmt/issues/4868)
31- Stopped stripping defaults on const params [#4816](https://github.com/rust-lang/rustfmt/issues/4816)
32- Fixed issue with dropped content with GAT aliases with self bounds in impls [#4911](https://github.com/rust-lang/rustfmt/issues/4911)
33- Stopped removing generic args on associated type constraints [#4943](https://github.com/rust-lang/rustfmt/issues/4943)
34- Stopped dropping visibility on certain trait and impl items [#4960](https://github.com/rust-lang/rustfmt/issues/4960)
35- Fixed dropping of qualified paths in struct patterns [#4908](https://github.com/rust-lang/rustfmt/issues/4908) and [#5005](https://github.com/rust-lang/rustfmt/issues/5005)
36- Fixed bug in line width calculation that was causing specious formatting of certain patterns [#4031](https://github.com/rust-lang/rustfmt/issues/4031)
37 - **Note that this bug fix may cause observable formatting changes in cases where code had been formatted with prior versions of rustfmt that contained the bug**
38- Fixed bug where rustfmt would drop parameter attributes if they were too long in certain cases [#4579](https://github.com/rust-lang/rustfmt/issues/4579)
39- Resolved idempotency issue with extern body elements [#4963](https://github.com/rust-lang/rustfmt/issues/4963)
40- rustfmt will now handle doc-style comments on function parameters, since they could appear with certain macro usage patterns even though it's generally invalid syntax [#4936](https://github.com/rust-lang/rustfmt/issues/4936)
41- Fixed bug in `match_block_trailing_comma` where commas were not added to the blocks of bodies whose arm had a guard that did not fit on the same line as the pattern [#4998](https://github.com/rust-lang/rustfmt/pull/4998)
42- Fixed bug in cases where derive attributes started with a block style comment [#4984](https://github.com/rust-lang/rustfmt/issues/4984)
43- Fixed issue where the struct rest could be lost when `struct_field_align_threshold` was enabled [#4926](https://github.com/rust-lang/rustfmt/issues/4926)
44- Handles cases where certain control flow type expressions have comments between patterns/keywords and the pattern ident contains the keyword [#5009](https://github.com/rust-lang/rustfmt/issues/5009)
45- Handles tuple structs that have explicit visibilities and start with a block style comment [#5011](https://github.com/rust-lang/rustfmt/issues/5011)
46- Handles leading line-style comments in certain types of macro calls [#4615](https://github.com/rust-lang/rustfmt/issues/4615)
47
48
49### Added
50- Granular width heuristic options made available for user control [PR #4782](https://github.com/rust-lang/rustfmt/pull/4782). This includes the following:
51 - [`array_width`](https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=#array_width)
52 - [`attr_fn_like_width`](https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=#attr_fn_like_width)
53 - [`chain_width`](https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=#chain_width)
54 - [`fn_call_width`](https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=#fn_call_width)
55 - [`single_line_if_else_max_width`](https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=#single_line_if_else_max_width)
56 - [`struct_lit_width`](https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=#struct_lit_width)
57 - [`struct_variant_width`](https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=#struct_variant_width)
58
59Note this hit the rustup distributions prior to the v1.4.38 release as part of an out-of-cycle updates, but is listed in this version because the feature was not in the other v1.4.37 releases. See also the `use_small_heuristics` section on the configuration site for more information
60[https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=#use_small_heuristics](https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=#use_small_heuristics)
61
62- New `One` variant added to `imports_granularity` configuration option which can be used to reformat all imports into a single use statement [#4669](https://github.com/rust-lang/rustfmt/issues/4669)
63- rustfmt will now skip files that are annotated with `@generated` at the top of the file [#3958](https://github.com/rust-lang/rustfmt/issues/3958)
ee023bcb 64 if `format_generated_files` option is set to `false` (by default `@generated` files are formatted)
3c0e092e
XL
65- New configuration option `hex_literal_case` that allows user to control the casing utilized for hex literals [PR #4903](https://github.com/rust-lang/rustfmt/pull/4903)
66
67See the section on the configuration site for more information
68https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=#hex_literal_case
69
70- `cargo fmt` now directly supports the `--check` flag, which means it's now possible to run `cargo fmt --check` instead of the more verbose `cargo fmt -- --check` [#3888](https://github.com/rust-lang/rustfmt/issues/3888)
71
72### Install/Download Options
73- **rustup (nightly)** - *pending*
74- **GitHub Release Binaries** - [Release v1.4.38](https://github.com/rust-lang/rustfmt/releases/tag/v1.4.38)
75- **Build from source** - [Tag v1.4.38](https://github.com/rust-lang/rustfmt/tree/v1.4.38), see instructions for how to [install rustfmt from source][install-from-source]
76
cdc7bbd5
XL
77## [1.4.37] 2021-04-03
78
79### Changed
80
81- `rustc-ap-*` crates updated to v712.0.0
82
83### Fixed
84- Resolve idempotence issue related to indentation of macro defs that contain or-patterns with inner comments ([#4603](https://github.com/rust-lang/rustfmt/issues/4603))
85- Addressed various clippy and rustc warnings
86
87### Install/Download Options
88- **crates.io package** - *pending*
89- **rustup (nightly)** - *pending*
90- **GitHub Release Binaries** - [Release v1.4.37](https://github.com/rust-lang/rustfmt/releases/tag/v1.4.37)
91- **Build from source** - [Tag v1.4.37](https://github.com/rust-lang/rustfmt/tree/v1.4.37), see instructions for how to [install rustfmt from source][install-from-source]
92
f20569fa
XL
93## [1.4.36] 2021-02-07
94
95### Changed
96
97- `rustc-ap-*` crates updated to v705.0.0
98
99### Install/Download Options
100- **crates.io package** - *pending*
101- **rustup (nightly)** - *pending*
102- **GitHub Release Binaries** - [Release v1.4.36](https://github.com/rust-lang/rustfmt/releases/tag/v1.4.36)
103- **Build from source** - [Tag v1.4.36](https://github.com/rust-lang/rustfmt/tree/v1.4.36), see instructions for how to [install rustfmt from source][install-from-source]
104
105## [1.4.35] 2021-02-03
106
107### Changed
108
109- `rustc-ap-*` crates updated to v702.0.0
110
111### Install/Download Options
112- **crates.io package** - *pending*
113- **rustup (nightly)** - *n/a (superseded by [v1.4.36](#1436-2021-02-07))
114- **GitHub Release Binaries** - [Release v1.4.35](https://github.com/rust-lang/rustfmt/releases/tag/v1.4.35)
115- **Build from source** - [Tag v1.4.35](https://github.com/rust-lang/rustfmt/tree/v1.4.35), see instructions for how to [install rustfmt from source][install-from-source]
116
117## [1.4.34] 2021-01-28
118
119### Fixed
120- Don't insert trailing comma on (base-less) rest in struct literals within macros ([#4675](https://github.com/rust-lang/rustfmt/issues/4675))
121
122### Install/Download Options
123- **crates.io package** - *pending*
124- **rustup (nightly)** - Starting in `2021-01-31`
125- **GitHub Release Binaries** - [Release v1.4.34](https://github.com/rust-lang/rustfmt/releases/tag/v1.4.34)
126- **Build from source** - [Tag v1.4.34](https://github.com/rust-lang/rustfmt/tree/v1.4.34), see instructions for how to [install rustfmt from source][install-from-source]
127
128## [1.4.33] 2021-01-27
129
130### Changed
131- `merge_imports` configuration has been deprecated in favor of the new `imports_granularity` option. Any existing usage of `merge_imports` will be automatically mapped to the corresponding value on `imports_granularity` with a warning message printed to encourage users to update their config files.
132
133### Added
134- New `imports_granularity` option has been added which succeeds `merge_imports`. This new option supports several additional variants which allow users to merge imports at different levels (crate or module), and even flatten imports to have a single use statement per item. ([PR #4634](https://github.com/rust-lang/rustfmt/pull/4634), [PR #4639](https://github.com/rust-lang/rustfmt/pull/4639))
135
136See the section on the configuration site for more information
137https://rust-lang.github.io/rustfmt/?version=v1.4.33&search=#imports_granularity
138
139### Fixed
140- Fix erroneous removal of `const` keyword on const trait impl ([#4084](https://github.com/rust-lang/rustfmt/issues/4084))
141- Fix incorrect span usage wit const generics in supertraits ([#4204](https://github.com/rust-lang/rustfmt/issues/4204))
142- Use correct span for const generic params ([#4263](https://github.com/rust-lang/rustfmt/issues/4263))
143- Correct span on const generics to include type bounds ([#4310](https://github.com/rust-lang/rustfmt/issues/4310))
144- Idempotence issue on blocks containing only empty statements ([#4627](https://github.com/rust-lang/rustfmt/issues/4627) and [#3868](https://github.com/rust-lang/rustfmt/issues/3868))
145- Fix issue with semicolon placement on required functions that have a trailing comment that ends in a line-style comment before the semicolon ([#4646](https://github.com/rust-lang/rustfmt/issues/4646))
146- Avoid shared interned cfg_if symbol since rustfmt can re-initialize the rustc_ast globals on multiple inputs ([#4656](https://github.com/rust-lang/rustfmt/issues/4656))
147
148### Install/Download Options
149- **crates.io package** - *pending*
150- **rustup (nightly)** - n/a (superseded by [v1.4.34](#1434-2021-01-28))
151- **GitHub Release Binaries** - [Release v1.4.33](https://github.com/rust-lang/rustfmt/releases/tag/v1.4.33)
152- **Build from source** - [Tag v1.4.33](https://github.com/rust-lang/rustfmt/tree/v1.4.33), see instructions for how to [install rustfmt from source][install-from-source]
153
154## [1.4.32] 2021-01-16
155
156### Fixed
157- Indentation now correct on first bound in cases where the generic bounds are multiline formatted and the first bound itself is multiline formatted ([#4636](https://github.com/rust-lang/rustfmt/issues/4636))
158
159### Install/Download Options
160- **crates.io package** - *pending*
161- **rustup (nightly)** - Starting in `2021-01-18`
162- **GitHub Release Binaries** - [Release v1.4.32](https://github.com/rust-lang/rustfmt/releases/tag/v1.4.32)
163- **Build from source** - [Tag v1.4.32](https://github.com/rust-lang/rustfmt/tree/v1.4.32), see instructions for how to [install rustfmt from source][install-from-source]
164
165## [1.4.31] 2021-01-09
166
167### Changed
168
169- `rustc-ap-*` crates updated to v697.0.0
170
171### Added
172- Support for 2021 Edition [#4618](https://github.com/rust-lang/rustfmt/pull/4618))
173
174### Install/Download Options
175- **crates.io package** - *pending*
176- **rustup (nightly)** - Starting in `2021-01-16`
177- **GitHub Release Binaries** - [Release v1.4.31](https://github.com/rust-lang/rustfmt/releases/tag/v1.4.31)
178- **Build from source** - [Tag v1.4.31](https://github.com/rust-lang/rustfmt/tree/v1.4.31), see instructions for how to [install rustfmt from source][install-from-source]
179
180## [1.4.30] 2020-12-20
181
182### Fixed
183- Last character in derive no longer erroneously stripped when `indent_style` is overridden to `Visual`. ([#4584](https://github.com/rust-lang/rustfmt/issues/4584))
184- Brace wrapping of closure bodies maintained in cases where the closure has an explicit return type and the body consists of a single expression statement. ([#4577](https://github.com/rust-lang/rustfmt/issues/4577))
185- No more panics on invalid code with `err` and `typeof` types ([#4357](https://github.com/rust-lang/rustfmt/issues/4357), [#4586](https://github.com/rust-lang/rustfmt/issues/4586))
186
187### Install/Download Options
188- **crates.io package** - *pending*
189- **rustup (nightly)** - Starting in `2020-12-25`
190- **GitHub Release Binaries** - [Release v1.4.30](https://github.com/rust-lang/rustfmt/releases/tag/v1.4.30)
191- **Build from source** - [Tag v1.4.30](https://github.com/rust-lang/rustfmt/tree/v1.4.30), see instructions for how to [install rustfmt from source][install-from-source]
192
193## [1.4.29] 2020-12-04
194
195### Fixed
196- Negative polarity on non-trait impl now preserved. ([#4566](https://github.com/rust-lang/rustfmt/issues/4566))
197
198### Install/Download Options
199- **crates.io package** - *pending*
200- **rustup (nightly)** - Starting in `2020-12-07`
201- **GitHub Release Binaries** - [Release v1.4.29](https://github.com/rust-lang/rustfmt/releases/tag/v1.4.29)
202- **Build from source** - [Tag v1.4.29](https://github.com/rust-lang/rustfmt/tree/v1.4.29), see instructions for how to [install rustfmt from source][install-from-source]
203
204## [1.4.28] 2020-11-29
205
206### Changed
207
208- `rustc-ap-*` crates updated to v691.0.0
209- In the event of an invalid inner attribute on a `cfg_if` condition, rustfmt will now attempt to continue and format the imported modules. Previously rustfmt would emit the parser error about an inner attribute being invalid in this position, but for rustfmt's purposes the invalid attribute doesn't prevent nor impact module formatting.
210
211### Added
212
213- [`group_imports`][group-imports-config-docs] - a new configuration option that allows users to control the strategy used for grouping imports ([#4107](https://github.com/rust-lang/rustfmt/issues/4107))
214
215[group-imports-config-docs]: https://github.com/rust-lang/rustfmt/blob/v1.4.28/Configurations.md#group_imports
216
217### Fixed
218- Formatting of malformed derived attributes is no longer butchered. ([#3898](https://github.com/rust-lang/rustfmt/issues/3898), [#4029](https://github.com/rust-lang/rustfmt/issues/4029), [#4115](https://github.com/rust-lang/rustfmt/issues/4115), [#4545](https://github.com/rust-lang/rustfmt/issues/4545))
219- Correct indentation used in macro branches when `hard_tabs` is enabled. ([#4152](https://github.com/rust-lang/rustfmt/issues/4152))
220- Comments between the visibility modifier and item name are no longer dropped. ([#2781](https://github.com/rust-lang/rustfmt/issues/2781))
221- Comments preceding the assignment operator in type aliases are no longer dropped. ([#4244](https://github.com/rust-lang/rustfmt/issues/4244))
222- Comments between {`&` operator, lifetime, `mut` kw, type} are no longer dropped. ([#4245](https://github.com/rust-lang/rustfmt/issues/4245))
223- Comments between type bounds are no longer dropped. ([#4243](https://github.com/rust-lang/rustfmt/issues/4243))
224- Function headers are no longer dropped on foreign function items. ([#4288](https://github.com/rust-lang/rustfmt/issues/4288))
225- Foreign function blocks are no longer dropped. ([#4313](https://github.com/rust-lang/rustfmt/issues/4313))
226- `where_single_line` is no longer incorrectly applied to multiline function signatures that have no `where` clause. ([#4547](https://github.com/rust-lang/rustfmt/issues/4547))
227- `matches!` expressions with multiple patterns and a destructure pattern are now able to be formatted. ([#4512](https://github.com/rust-lang/rustfmt/issues/4512))
228
229### Install/Download Options
230- **crates.io package** - *pending*
231- **rustup (nightly)** - n/a (superseded by [v1.4.29](#1429-2020-12-04))
232- **GitHub Release Binaries** - [Release v1.4.28](https://github.com/rust-lang/rustfmt/releases/tag/v1.4.28)
233- **Build from source** - [Tag v1.4.28](https://github.com/rust-lang/rustfmt/tree/v1.4.28), see instructions for how to [install rustfmt from source][install-from-source]
234
235## [1.4.27] 2020-11-16
236
237### Fixed
238
239- Leading comments in an extern block are no longer dropped (a bug that exists in v1.4.26). ([#4528](https://github.com/rust-lang/rustfmt/issues/4528))
240
241### Install/Download Options
242- **crates.io package** - *pending*
243- **rustup (nightly)** - Starting in `2020-11-18`
244- **GitHub Release Binaries** - [Release v1.4.27](https://github.com/rust-lang/rustfmt/releases/tag/v1.4.27)
245- **Build from source** - [Tag v1.4.27](https://github.com/rust-lang/rustfmt/tree/v1.4.27), see instructions for how to [install rustfmt from source][install-from-source]
246
247## [1.4.26] 2020-11-14
248
249### Changed
250
136023e0 251- Original comment indentation for trailing comments within an `if` is now taken into account when determining the indentation level to use for the trailing comment in formatted code. This does not modify any existing code formatted with rustfmt; it simply gives the programmer discretion to specify whether the comment is associated to the `else` block, or if the trailing comment is just a member of the `if` block. ([#1575](https://github.com/rust-lang/rustfmt/issues/1575), [#4120](https://github.com/rust-lang/rustfmt/issues/4120), [#4506](https://github.com/rust-lang/rustfmt/issues/4506))
f20569fa
XL
252
253In this example the `// else comment` refers to the `else`:
254```rust
255// if comment
256if cond {
257 "if"
258// else comment
259} else {
260 "else"
261}
262```
263
264Whereas in this case the `// continue` comments are members of their respective blocks and do not refer to the `else` below.
265```rust
266if toks.eat_token(Token::Word("modify"))? && toks.eat_token(Token::Word("labels"))? {
267 if toks.eat_token(Token::Colon)? {
268 // ate the token
269 } else if toks.eat_token(Token::Word("to"))? {
270 // optionally eat the colon after to, e.g.:
271 // @rustbot modify labels to: -S-waiting-on-author, +S-waiting-on-review
272 toks.eat_token(Token::Colon)?;
273 } else {
274 // It's okay if there's no to or colon, we can just eat labels
275 // afterwards.
276 }
277 1 + 2;
278 // continue
279} else if toks.eat_token(Token::Word("label"))? {
280 // continue
281} else {
282 return Ok(None);
283}
284```
285
286### Fixed
287- Formatting of empty blocks with attributes which only contained comments is no longer butchered.([#4475](https://github.com/rust-lang/rustfmt/issues/4475), [#4467](https://github.com/rust-lang/rustfmt/issues/4467), [#4452](https://github.com/rust-lang/rustfmt/issues/4452#issuecomment-705886282), [#4522](https://github.com/rust-lang/rustfmt/issues/4522))
136023e0 288- Indentation of trailing comments in non-empty extern blocks is now correct. ([#4120](https://github.com/rust-lang/rustfmt/issues/4120#issuecomment-696491872))
f20569fa
XL
289
290### Install/Download Options
291- **crates.io package** - *pending*
292- **rustup (nightly)** - Starting in `2020-11-16`
293- **GitHub Release Binaries** - [Release v1.4.26](https://github.com/rust-lang/rustfmt/releases/tag/v1.4.26)
294- **Build from source** - [Tag v1.4.26](https://github.com/rust-lang/rustfmt/tree/v1.4.26), see instructions for how to [install rustfmt from source][install-from-source]
295
296## [1.4.25] 2020-11-10
297
298### Changed
299
300- Semicolons are no longer automatically inserted on trailing expressions in macro definition arms ([#4507](https://github.com/rust-lang/rustfmt/pull/4507)). This gives the programmer control and discretion over whether there should be semicolons in these scenarios so that potential expansion issues can be avoided.
301
302### Install/Download Options
303- **crates.io package** - *pending*
304- **rustup (nightly)** - Starting in `2020-11-14`
305- **GitHub Release Binaries** - [Release v1.4.25](https://github.com/rust-lang/rustfmt/releases/tag/v1.4.25)
306- **Build from source** - [Tag v1.4.25](https://github.com/rust-lang/rustfmt/tree/v1.4.25), see instructions for how to [install rustfmt from source][install-from-source]
307
308## [1.4.24] 2020-11-05
309
310### Changed
311
312- Block wrapped match arm bodies containing a single macro call expression are no longer flattened ([#4496](https://github.com/rust-lang/rustfmt/pull/4496)). This allows programmer discretion so that the block wrapping can be preserved in cases where needed to prevent issues in expansion, such as with trailing semicolons, and aligns with updated [Style Guide guidance](https://github.com/rust-dev-tools/fmt-rfcs/blob/master/guide/expressions.md#macro-call-expressions) for such scenarios.
313
314### Fixed
315- Remove useless `deprecated` attribute on a trait impl block in the rustfmt lib, as these now trigger errors ([rust-lang/rust/#78626](https://github.com/rust-lang/rust/pull/78626))
316
317### Install/Download Options
318- **crates.io package** - *pending*
319- **rustup (nightly)** - Starting in `2020-11-09`
320- **GitHub Release Binaries** - [Release v1.4.24](https://github.com/rust-lang/rustfmt/releases/tag/v1.4.24)
321- **Build from source** - [Tag v1.4.24](https://github.com/rust-lang/rustfmt/tree/v1.4.24), see instructions for how to [install rustfmt from source][install-from-source]
322
323## [1.4.23] 2020-10-30
324
325### Changed
326
327- Update `rustc-ap-*` crates to v686.0.0
328
329### Added
330- Initial support for formatting new ConstBlock syntax ([#4478](https://github.com/rust-lang/rustfmt/pull/4478))
331
332### Fixed
333- Handling of unclosed delimiter-only parsing errors in input files ([#4466](https://github.com/rust-lang/rustfmt/issues/4466))
334- Misc. minor parser bugs ([#4418](https://github.com/rust-lang/rustfmt/issues/4418) and [#4431](https://github.com/rust-lang/rustfmt/issues/4431))
335- Panic on nested tuple access ([#4355](https://github.com/rust-lang/rustfmt/issues/4355))
336- Unable to disable license template path via cli override ([#4487](https://github.com/rust-lang/rustfmt/issues/4487))
337- Preserve comments in empty statements [#4018](https://github.com/rust-lang/rustfmt/issues/4018))
338- Indentation on skipped code [#4398](https://github.com/rust-lang/rustfmt/issues/4398))
339
340### Install/Download Options
341- **crates.io package** - *pending*
342- **rustup (nightly)** - n/a (superseded by [v1.4.24](#1424-2020-11-05))
343- **GitHub Release Binaries** - [Release v1.4.23](https://github.com/rust-lang/rustfmt/releases/tag/v1.4.23)
344- **Build from source** - [Tag v1.4.23](https://github.com/rust-lang/rustfmt/tree/v1.4.23), see instructions for how to [install rustfmt from source][install-from-source]
345
346
347
348## [1.4.22] 2020-10-04
349
350### Changed
351
352- Update `rustc-ap-*` crates to v679.0.0
353- Add config option to allow control of leading match arm pipes
354- Support `RUSTFMT` environment variable in `cargo fmt` to run specified `rustfmt` instance
355
356### Fixed
357
358- Fix preservation of type aliases within extern blocks
359
360
361## [1.4.9] 2019-10-07
362
363### Changed
364
365- Update `rustc-ap-*` crates to 606.0.0.
366
367### Fixed
368
369- Fix aligning comments of different group
370- Fix flattening imports with a single `self`.
371- Fix removing attributes on function parameters.
136023e0 372- Fix removing `impl` keyword from opaque type.
f20569fa
XL
373
374## [1.4.8] 2019-09-08
375
376### Changed
377
378- Update `rustc-ap-*` crates to 583.0.0.
379
380## [1.4.7] 2019-09-06
381
382### Added
383
384- Add `--config` command line option.
385
386### Changed
387
388- Update `rustc-ap-*` crates to 581.0.0.
389- rustfmt now do not warn against trailing whitespaces inside macro calls.
390
391### Fixed
392
393- Fix `merge_imports` generating invalid code.
394- Fix removing discriminant values on enum variants.
395- Fix modules defined inside `cfg_if!` not being formatted.
396- Fix minor formatting issues.
397
398## [1.4.6] 2019-08-28
399
400### Added
401
402- Add `--message-format` command line option to `cargo-fmt`.
403- Add `-l,--files-with-diff` command line option to `rustfmt`.
136023e0 404- Add `json` emit mode.
f20569fa
XL
405
406### Fixed
407
408- Fix removing attributes on struct pattern's fields.
409- Fix non-idempotent formatting of match arm.
410- Fix `merge_imports` generating invalid code.
411- Fix imports with `#![macro_use]` getting reordered with `reorder_imports`.
412- Fix calculation of line numbers in checkstyle output.
413- Fix poor formatting of complex fn type.
414
415## [1.4.5] 2019-08-13
416
417### Fixed
418
419- Fix generating invalid code when formatting an impl block with const generics inside a where clause.
420- Fix adding a trailing space after a `dyn` keyword which is used as a macro argument by itself.
421
422## [1.4.4] 2019-08-06
423
424### Fixed
425
426- Fix `cargo fmt` incorrectly formatting crates that is not part of the workspace or the path dependencies.
427- Fix removing a trailing comma from a tuple pattern.
428
429## [1.4.3] 2019-08-02
430
431### Changed
432
433- Update `rustc-ap-*` crates to 546.0.0.
434
435### Fixed
436
437- Fix an underscore pattern getting removed.
438
439## [1.4.2] 2019-07-31
440
441### Changed
442
443- Explicitly require the version of `rustfmt-config_proc_macro` to be 0.1.2 or later.
444
445## [1.4.1] 2019-07-30
446
447### Changed
448
449- Update `rustc-ap-*` crates to 542.0.0.
450
451## [1.4.0] 2019-07-29
452
453### Added
454
136023e0 455- Add new attribute `rustfmt::skip::attributes` to prevent rustfmt
f20569fa
XL
456from formatting an attribute #3665
457
458### Changed
459
460- Update `rustc-ap-*` crates to 541.0.0.
461- Remove multiple semicolons.
462
463## [1.3.3] 2019-07-15
464
465### Added
466
467- Add `--manifest-path` support to `cargo fmt` (#3683).
468
469### Fixed
470
471- Fix `cargo fmt -- --help` printing nothing (#3620).
472- Fix inserting an extra comma (#3677).
473- Fix incorrect handling of CRLF with `file-lines` (#3684).
474- Fix `print-config=minimal` option (#3687).
475
476## [1.3.2] 2019-07-06
477
478### Fixed
479
480- Fix rustfmt crashing when `await!` macro call is used in a method chain.
481- Fix rustfmt not recognizing a package whose name differs from its directory's name.
482
483## [1.3.1] 2019-06-30
484
485### Added
486
487- Implement the `Display` trait on the types of `Config`.
488
489### Changed
490
491- `ignore` configuration option now only supports paths separated by `/`. Windows-style paths are not supported.
492- Running `cargo fmt` in a sub-directory of a project is now supported.
493
494### Fixed
495
496- Fix bugs that may cause rustfmt to crash.
497
498## [1.3.0] 2019-06-09
499
500### Added
501
502- Format modules defined inside `cfg_if` macro calls #3600
503
504### Changed
505
506- Change option `format_doc_comment` to `format_code_in_doc_comment`.
507- `use_small_heuristics` changed to be an enum and stabilised. Configuration
508 options are now ready for 1.0.
509- Stabilise `fn_args_density` configuration option and rename it to `fn_args_layout` #3581
510- Update `rustc-ap-*` crates to 486.0.0
511- Ignore sub-modules when skip-children is used #3607
512- Removed bitrig support #3608
513
514### Fixed
515
516- `wrap_comments` should not imply `format_doc_comments` #3535
517- Incorrect handling of const generics #3555
518- Add the handling for `vec!` with paren inside macro #3576
519- Format trait aliases with where clauses #3586
520- Catch panics from the parser while rewriting macro calls #3589
521- Fix erasing inner attributes in struct #3593
522- Inline the attribute with its item even with the `macro_use` attribute or when `reorder_imports` is disabled #3598
523- Fix the bug add unwanted code to impl #3602
524
525## [1.2.2] 2019-04-24
526
527### Fixed
528
529- Fix processing of `ignore` paths #3522
530- Attempt to format attributes if only they exist #3523
531
532## [1.2.1] 2019-04-18
533
534### Added
535
536- Add `--print-config current` CLI option b473e65
537- Create GitHub [page](https://rust-lang.github.io/rustfmt/) for Configuration.md #3485
538
539### Fixed
540
541- Keep comment appearing between parameter's name and its type #3491
542- Do not delete semicolon after macro call with square brackets #3500
543- Fix `--version` CLI option #3506
544- Fix duplication of attributes on a match arm's body #3510
545- Avoid overflowing item with attributes #3511
546
547## [1.2.0] 2019-03-27
548
549### Added
550
551- Add new attribute `rustfmt::skip::macros` to prevent rustfmt from formatting a macro #3454
552
553### Changed
554
555- Discard error report in silent_emitter #3466
556
557### Fixed
558
559- Fix bad performance on deeply nested binary expressions #3467
560- Use BTreeMap to guarantee consistent ordering b4d4b57
561
562## [1.1.1] 2019-03-21
563
564### Fixed
565
566- Avoid panic on macro inside deeply nested block c9479de
567- Fix line numbering in missed spans and handle file_lines in edge cases cdd08da
568- Fix formatting of async blocks 1fa06ec
569- Avoid duplication on the presence of spaces between macro name and `!` #3464
570
571## [1.1.0] 2019-03-17
572
573### Added
574
575- Add `inline_attribute_width` configuration option to write an item and its attribute on the same line if their combined width is below a threshold #3409
576- Support `const` generics f0c861b
577- Support path clarity module #3448
578
579### Changed
580
581- Align loop and while formatting 7d9a2ef
582- Support `EmitMode::ModifiedLines` with stdin input #3424
583- Update `rustc-ap-*` crates to 407.0.0
584- Remove trailing whitespaces in missing spans 2d5bc69
585
586### Fixed
587
588- Do not remove comment in the case of no arg 8e3ef3e
589- Fix `Ident of macro+ident gets duplicated` error 40ff078
590- Format the if expression at the end of the block in a single line 5f3dfe6
591
592## [1.0.3] 2019-02-14
593
594### Added
595
596- Point unstable options to tracking issues 412dcc7
597
598### Changed
599
600- Update `rustc-ap-*` crates to 373.0.0
601
602## [1.0.2] 2019-02-12
603
604### Added
605
606- Add a [section](https://github.com/rust-lang/rustfmt/blob/ae331be/Contributing.md#version-gate-formatting-changes) to the Contributing.md file about version-gating formatting changes 36e2cb0
607- Allow specifying package with `-p` CLI option a8d2591
608- Support `rustfmt::skip` on imports #3289
609- Support global `rustfmt.toml` to be written in user config directory #3280
610- Format visibility on trait alias 96a3df3
611
612### Changed
613
614- Do not modify original source code inside macro call #3260
615- Recognize strings inside comments in order to avoid indenting them baa62c6
616- Use Unicode-standard char width to wrap comments or strings a01990c
617- Change new line point in the case of no args #3294
618- Use the same formatting rule between functions and macros #3298
619- Update rustc-ap-rustc_target to 366.0.0, rustc-ap-syntax to 366.0.0, and rustc-ap-syntax_pos to 366.0.0
620
621### Fixed
622
623- rewrite_comment: fix block fallback when failing to rewrite an itemized block ab7f4e1
624- Catch possible tokenizer panics #3240
625- Fix macro indentation on Windows #3266
626- Fix shape when formatting return or break expr on statement position #3259
627- rewrite_comment: fix block fallback when failing to rewrite an itemized block
628- Keep leading double-colon to respect the 2018 edition of rust's paths a2bfc02
629- Fix glob and nested global imports 2125ad2
630- Do not force trailing comma when using mixed layout #3306
631- Prioritize `single_line_fn` and `empty_item_single_line` over `brace_style` #3308
632- Fix `internal error: left behind trailing whitespace` with long lines c2534f5
633- Fix attribute duplication #3325
634- Fix formatting of strings within a macro 813aa79
635- Handle a macro argument with a single keyword 9a7ea6a
636
637## [1.0.1] 2018-12-09
638
639### Added
640
641- Add a `version` option 378994b
642
643### Changed
644
645- End expressions like return/continue/break with a semicolon #3223
646- Update rustc-ap-rustc_target to 306.0.0, rustc-ap-syntax to 306.0.0, and rustc-ap-syntax_pos to 306.0.0
647
648### Fixed
649
650- Allow to run a rustfmt command from cargo-fmt even when there is no target a2da636
651- Fix `un-closed delimiter` errors when formatting break labels 40174e9
652
653## [1.0.0] 2018-11-19
654
655### Changed
656
657- Preserve possibly one whitespace for brace macros 1a3bc79
658- Prefer to break arguments over putting output type on the next line 1dd54e6
659
660## [0.99.9] 2018-11-15
661
662### Changed
663
664- Update rustc-ap-rustc_target to 297.0.0, rustc-ap-syntax to 297.0.0, to rustc-ap-syntax_pos to 297.0.0
665- Don't align comments on `extern crate`s dd7add7
666
667## [0.99.8] 2018-11-14
668
669### Added
670
671- Add `overflow_delimited_expr` config option to more aggressively allow overflow #3175
672
673### Fixed
674
675- Fix the logic for retaining a comment before the arrow in a match #3181
676- Do not wrap comments in doctest to avoid failing doctest runs #3183
677- Fix comment rewriting that was wrapping code into a line comment #3188
678- Fix formatting of unit-struct with `where`-clause #3200
679
680## [0.99.7] 2018-11-07
681
682### Changed
683
684- Force a newline after the `if` condition if there is a different indentation level #3109
685- Use correct width when formatting type on local statement #3126
686- Treat crates non-alphabetically when ordering 799005f
687- Fix formatting of code that is annotated with rustfmt::skip #3113
688- Stabilize `edition` configuration option 9c3ae2d
689- cargo-fmt: detect Rust edition in use #3129
690- Trim the indentation on macros which heuristically appear to use block-style indentation #3178
691
692### Fixed
693
694- Do not remove path disambiugator inside macro #3142
695- Improve handling of Windows newlines #3141
696- Fix alignment of a struct's fields (`struct_field_align_threshold` option) with the Visual `indent_style` #3165
697- Fix a bug in formatting markdown lists within comments #3172
698
699## [0.99.6] 2018-10-18
700
701### Added
702
703- Add `enum_discrim_align_threshold` option to vertically align enum discriminants cc22869
704- Add `println!`-like heuristic to the `fail` attribute #3067
705- Handle itemized items inside comments #3083
706- Add `format_doc_comments` configuration option to control the formatting of code snippets inside comments #3089
707
708### Changed
709
710- Makes brace behavior consistent with empty bodies for traits and impls 2727d41
711- Consider a multi-lined array as a block-like expression #3969
712- Improve formatting of strings #3073
713- Get rid of extra commas in Visual struct literal formatting #3077
714- Update rustc-ap-rustc_target to 274.0.0, rustc-ap-syntax to 274.0.0, and rustc-ap-syntax_pos to 274.0.0
715- Format macro calls with item-like arguments #3080
716- Avoid control flow expressions conditions to go multi line ef59b34
717- Simplify multi-lining binop expressions #3101
718
719### Fixed
720
721- Do not format a code block in documentation if it is annotated with ignore or text 2bcc3a9
722- Fix inconsistent overflow behavior in Visual style #3078
723- Fix corner cases of the string formatting implementation #3083
724- Do not add parens around lifetimes 0ac68c9
725- Catch parser panic in format_snippet 8c4e92a
726
727## [0.99.5] 2018-09-25
728
729### Added
730
731- Handle leading module separator for 2018 Edition #2952
732- Add configuration option `normalize_doc_attributes`: convert doc attributes to comments #3002
733
734### Changed
735
736- Accept 2015 and 2018 instead of Edition2015 and Edition2018 for edition option eec7436
737- Support platforms without a timer 46e2a2e
738- Update rustc-ap-rustc_target to 263.0.0, rustc-ap-syntax to 263.0.0, and rustc-ap-syntax_pos to 263.0.0
739
740### Fixed
741
742- Format of attributes with commas #2971
743- Fix optional arg condensing #2972
744- Improve formatting of long function parameters #2981
745- Fix formatting of raw string literals #2983
746- Handle chain with try operators with spaces #2986
747- Use correct shape in Visual tuple rewriting #2987
748- Impove formatting of arguments with `visual_style = "Visual"` option #2988
749- Change `print_diff` to output the correct line number 992b179
750- Propagate errors about failing to rewrite a macro 6f318e3
751- Handle formatting of long function signature #3010
752- Fix indent computation of a macro with braces c3edf6d
753- Format generics on associated types #3035
754- Incorrect indentation of multiline block match expression #3042
755- Fix bug in import where two consecutive module separators were possible 98a0ef2
756- Prevent right-shifting of block comments with bare lines 5fdb6db
757
758## [0.99.4] 2018-08-27
759
760### Added
761
762- Handle formatting of underscore imports #2951
763- Handle formatting of try blocks #2965
764
765### Changed
766
767- Update rustc-ap-rustc_target to 237.0.0, rustc-ap-syntax to 237.0.0, and rustc-ap-syntax_pos to 237.0.0 ca19c9a
768- Consider `dev` channel as nightly for unstable features #2948
769
770### Fixed
771
772- Fix formatting of patterns with ellipsis # 2942
773
774## [0.99.3] 2018-08-23
775
776### Added
777
778- Use path attribute when searching for modules #2901
779- Expose FileLines JSON representation to allow external libraries to use the file_lines option #2915
780
781### Changed
782
783- Replace '--conifig-help' with '--config=help' cb10e06
784- Improve formatting of slice patterns #2912
785
786### Fixed
787
788- Format chains with comment #2899
789- Fix indentation of formatted macro body #2920
790- Fix indentation of block comments f23e6aa
791
792## [0.99.2] 2018-08-07
793
794### Changed
795
796- Update rustc-ap-rustc_target to 218.0.0, rustc-ap-syntax to 218.0.0, and rustc-ap-syntax_pos to 218.0.0 5c9a2b6
797- Combine function-like attributes #2900
798
799### Fixed
800
801- Explicitly handle semicolon after the item in statement position d96e3ca
802- Fix parsing '#'-hiding of rustdoc 2eca09e
803
804## [0.99.1] 2018-08-04
805
806### Fixed
807
808- fix use statements ordering when a number is present 1928ae7
809
810## [0.99.0] 2018-08-03
811
812- 1.0 RC release
813
814### Changed
815
816- Clarification in README.md 30fe66b
817
818## [0.9.0] 2018-08-01
819
820### Added
821
822- Handle raw identifiers 3027c21
823- Format async closure 60ce411
824- Add max_width option for all heuristics c2ae39e
825- Add config option `format_macro_matchers` to format the metavariable matching patterns in macros 79c5ee8
826- Add config option `format_macro_bodies` to format the bodies of macros 79c5ee8
827- Format exitential type fc307ff
828- Support raw identifiers in struct expressions f121b1a
829- Format Async block and async function 0b25f60
830
831### Changed
832
833- Update rustc-ap-rustc_target to 211.0.0, rustc-ap-syntax to 211.0.0, and rustc-ap-syntax_pos to 211.0.0
834- Put each nested import on its own line while putting non-nested imports on the same line as much as possible 42ab258
835- Respect `empty_item_single_line` config option when formatting empty impls. Put the `where` on its own line to improve readability #2771
836- Strip leading `|` in match arm patterns 1d4b988
837- Apply short function call heuristic to attributes 3abebf9
838- Indent a match guard if the pattern is multiline be4d37d
839- Change default newline style to `Native` 9d8f381
840- Improve formatting of series of binop expressions a4cdb68
841- Trigger an internal error if we skip formatting due to a lost comment b085113
842- Refactor chain formatting #2838
843
844### Fixed
845
846- Do not insert spaces around braces with empty body or multiple lines 2f65852
847- Allow using mixed layout with comments #2766
848- Handle break labels #2726
849- fix rewrite_string when a line feed is present 472a2ed
850- Fix an anomaly with comments and array literals b28a0cd
851- Check for comments after the `=>` in a match arm 6899471
852
853## [0.8.0,0.8.1,0.8.2] 2018-05-28
854
855### Added
856
857- Use scoped attributes for skip attribute https://github.com/rust-lang/rustfmt/pull/2703
858
859### Changed
860
861- Comment options `wrap_comments` and `normalize_comments` are reverted back to unstable 416bc4c
862- Stabilise `reorder_imports` and `reorder_modules` options 7b6d2b4
863- Remove `spaces_within_parens_and_brackets` option d726492
864- Stabilise shorthand options: `use_try_shorthand`, `use_field_init_shorthand`, and `force_explicit_abi` 8afe367
865- Stabilise `remove_nested_parens` and set default to true a70f716
866- Unstabilise `unstable_features` dd9c15a
867- Remove `remove_blank_lines_at_start_or_end_of_block` option 2ee8b0e
868- Update rustc-ap-syntax to 146.0.0 and rustc-ap-rustc_target to 146.0.0 2c275a2
869- Audit the public API #2639
870
871### Fixed
872
873- Handle code block in doc comment without rust prefix f1974e2
874
875## [0.7.0] 2018-05-14
876
877### Added
878
879- Add integration tests against crates in the rust-lang-nursery c79f39a
880
881### Changed
882
883- Update rustc-ap-syntax to 128.0.0 and ustc-ap-rustc_target to 128.0.0 195395f
884- Put operands on its own line when each fits in a single line f8439ce
885- Improve CLI options 55ac062 1869888 798bffb 4d9de48 eca7796 8396da1 5d9f5aa
886
887### Fixed
888
889- Use correct line width for list attribute 61a401a
890- Avoid flip-flopping impl items when reordering them 37c216c
891- Formatting breaks short lines when max_width is less than 100 9b36156
892- Fix variant "Mixed" of imports_layout option 8c8676c
893- Improve handling of long lines f885039
894- Fix up lines exceeding max width 51c07f4
895- Fix handling of modules in non_modrs_mods style cf573e8
896- Do not duplicate attributes on use items e59ceaf
897- Do not insert an extra brace in macros with native newlines 4c9ef93
898
899## [0.6.1] 2018-05-01
900
901### Changed
902
903- Change the default value of imports_indent to IndentStyle::Block https://github.com/rust-lang/rustfmt/pull/2662
904
905### Fixed
906
907- Handle formatting of auto traits 5b5a72c
908- Use consistent formatting for empty enum and struct https://github.com/rust-lang/rustfmt/pull/2656
909
910## [0.6.0] 2018-04-20
911
912### Changed
913
914- Improve public API 8669004
915
916## [0.5.0] 2018-04-20
917
918### Added
919
920- Add `verbose-diff` CLI option 5194984
921
922### Changed
923
924- Update rustc-ap-syntax to 103.0.0 dd807e2
925- Refactor to make a sensible public API ca610d3
926
927### Fixed
928
929- Add spaces between consecutive `..` `..=` 61d29eb
930
931## [0.4.2] 2018-04-12
932
933### Added
934
935- Handle binary operators and lifetimes 0fd174d
936- Add reorder_impl_items config option 94f5a05
937- Add `--unstable-features` CLI option to list unstable options from the `--help` output 8208f8a
938- Add merge_imports config option 5dd203e
939
940### Changed
941
942- Format macro arguments with vertical layout ec71459
943- Reorder imports by default 164cf7d
944- Do not collapse block around expr with condition on match arm 5b9b7d5
945- Use vertical layout for complex attributes c77708f
946- Format array using heuristics for function calls 98c6f7b
947- Implement stable ordering for impl items with the the following item priority: type, const, macro, then method fa80ddf
948- Reorder imports by default 164cf7d
949- Group `extern crate` by default 3a138a2
950- Make `error_on_line_overflow` false by default f146711
951- Merge imports with the same prefix into a single nested import 1954513
952- Squash the various 'reorder imports' option into one 911395a
953
954### Fixed
955
956- Print version is missing the channel ca6fc67
957- Do not add the beginning vert to the match arm 1e1d9d4
958- Follow indent style config when formatting attributes efd295a
959- Do not insert newline when item is empty a8022f3
960- Do not indent or unindent inside string literal ec1907b
961
962## [0.4.1] 2018-03-16
963
964### Added
965
966- Add `ignore` configuration option.
967- Add `license_template_path` configuration option.
968- Format `lazy_static!`.
969
970### Fixed
971
972- Fix formatting bugs.
973- Fix setting `reorder_modules` removing inline modules.
974- Format attributes on block expressions.
975- Support `dyn trait` syntax.
976- Support multiple patterns in `if let` and `while let`.
977- Support a pattern with parentheses.
978
979## [0.4.0] 2018-03-02
980
981### Changed
982
983- Do not print verbose outputs when formatting with stdin.
984- Preserve trailing whitespaces in doc comments.
985- Scale the values of width heuristics by `max_width`.
986
987### Fixed
988
989- Do not reorder items with `#[macro_use]`.
990- Fix formatting bugs.
991- Support the beginning `|` on a match arm.
992
993## [0.3.8] 2018-02-04
994
995### Added
996
997- Format (or at least try to format) `macro_rules!`.
998
999## [0.3.7] 2018-02-01
1000
1001### Added
1002
1003- Add `use_field_init_shorthand` config option.
1004- Add `reorder_modules` configuration option.
1005
1006## [0.3.6] 2018-01-18
1007
1008### Fixed
1009
1010- Fix panicking on formatting certain macros (#2371).
1011
1012## [0.3.5] 2018-01-15
1013
1014### Changed
1015
1016- Format code block in comments when `wrap_comments` is set to `true`.
1017- Remove `same_line_attributes` configuration option.
1018- Rename `git-fmt` to `git-rustfmt`.
1019
1020### Fixed
1021
1022- Rustup to `rustc 1.25.0-nightly (e6072a7b3 2018-01-13)`.
1023- Fix formatting bugs.
1024
1025## [0.3.4] 2017-12-23
1026
1027### Added
1028
1029- Add `--version` flag to `cargo-fmt`, allow `cargo fmt --version`.
1030
1031### Fixed
1032
1033- Rustup to `rustc 1.24.0-nightly (5165ee9e2 2017-12-22)`.
1034
1035## [0.3.3] 2017-12-22
1036
1037### Added
1038
1039- Format trait aliases.
1040
1041### Changed
1042
1043- `cargo fmt` will format every workspace member.
1044
1045### Fixed
1046
1047- Rustup to `rustc 1.24.0-nightly (250b49205 2017-12-21)`
1048- Fix formatting bugs.
1049
1050## [0.3.2] 2017-12-15
1051
1052### Changed
1053
1054- Warn when unknown configuration option is used.
1055
1056### Fixed
1057
1058- Rustup to `rustc 1.24.0-nightly (0077d128d 2017-12-14)`.
1059
1060## [0.3.1] 2017-12-11
1061
1062### Added
1063
1064- Add `error_on_unformatted` configuration option.
1065- Add `--error-on-unformatted` command line option.
1066
1067### Changed
1068
1069- Do not report formatting errors on comments or strings by default.
1070- Rename `error_on_line_overflow_comments` to `error_on_unformatted`.
1071
1072### Fixed
1073
1074- Fix formatting bugs.
1075- Fix adding a trailing whitespace inside code block when `wrap_comments = true`.
1076
1077## [0.3.0] 2017-12-11
1078
1079### Added
1080
1081- Support nested imports.
1082
1083### Changed
1084
1085- Do not report errors on skipped items.
1086- Do not format code block inside comments when `wrap_comments = true`.
1087- Keep vertical spaces between items within range.
1088- Format `format!` and its variants using compressed style.
1089- Format `write!` and its variants using compressed style.
1090- Format **simple** array using compressed style.
1091
1092### Fixed
1093
1094- Fix `rustfmt --package package_name` not working properly.
1095- Fix formatting bugs.
1096
1097## [0.2.17] 2017-12-03
1098
1099### Added
1100
1101- Add `blank_lines_lower_bound` and `blank_lines_upper_bound` configuration options.
1102
1103### Changed
1104
1105- Combine configuration options related to width heuristic into `width_heuristic`.
1106- If the match arm's body is `if` expression, force to use block.
1107
1108### Fixed
1109
1110- Fix `cargo fmt --all` being trapped in an infinite loop.
1111- Fix many formatting bugs.
1112
1113### Removed
1114
1115- Remove legacy configuration options.
1116
1117## [0.2.16] 2017-11-21
1118
1119### Added
1120
1121- Remove empty lines at the beginning of the file.
1122- Soft wrapping on doc comments.
1123
1124### Changed
1125
1126- Break before `|` when using multiple lines for match arm patterns.
1127- Combine `control_style`, `where_style` and `*_indent` config options into `indent_style`.
1128- Combine `item_brace_style` and `fn_brace_style` config options into `brace_style`.
1129- Combine config options related spacing around colons into `space_before_colon` and `space_after_colon`.
1130
1131### Fixed
1132
1133- Fix many bugs.
1134
1135## [0.2.15] 2017-11-08
1136
1137### Added
1138
1139- Add git-fmt tool
1140- `where_single_line` configuration option.
1141
1142### Changed
1143
1144- Rename `chain_one_line_max` to `chain_width`.
1145- Change the suffix of indent-related configuration options to `_indent`.
1146
1147## [0.2.14] 2017-11-06
1148
1149### Fixed
1150
1151- Rustup to the latest nightly.
1152
1153## [0.2.13] 2017-10-30
1154
1155### Fixed
1156
1157- Rustup to the latest nightly.
1158
1159## [0.2.12] 2017-10-29
1160
1161### Fixed
1162
1163- Fix a bug that `cargo fmt` hangs forever.
1164
1165## [0.2.11] 2017-10-29
1166
1167### Fixed
1168
1169- Fix a bug that `cargo fmt` crashes.
1170
1171## [0.2.10] 2017-10-28
1172
1173## [0.2.9] 2017-10-16
1174
1175## [0.2.8] 2017-09-28
1176
1177## [0.2.7] 2017-09-21
1178
1179### Added
1180
1181- `binop_separator` configuration option (#1964).
1182
1183### Changed
1184
1185- Use horizontal layout for function call with a single argument.
1186
1187### Fixed
1188
1189- Fix panicking when calling `cargo fmt --all` (#1963).
1190- Refactorings & faster rustfmt.
1191
1192## [0.2.6] 2017-09-14
1193
1194### Fixed
1195
1196- Fix a performance issue with nested block (#1940).
1197- Refactorings & faster rustfmt.
1198
1199## [0.2.5] 2017-08-31
1200
1201### Added
1202
1203- Format and preserve attributes on statements (#1933).
1204
1205### Fixed
1206
1207- Use getters to access `Span` fields (#1899).
1208
1209## [0.2.4] 2017-08-30
1210
1211### Added
1212
1213- Add support for `Yield` (#1928).
1214
1215## [0.2.3] 2017-08-30
1216
1217### Added
1218
1219- `multiline_closure_forces_block` configuration option (#1898).
1220- `multiline_match_arm_forces_block` configuration option (#1898).
1221- `merge_derives` configuration option (#1910).
1222- `struct_remove_empty_braces` configuration option (#1930).
1223- Various refactorings.
1224
1225### Changed
1226
1227- Put single-lined block comments on the same line with list-like structure's item (#1923).
1228- Preserve blank line between doc comment and attribute (#1925).
1229- Put the opening and the closing braces of enum and struct on the same line, even when `item_brace_style = "AlwaysNextLine"` (#1930).
1230
1231### Fixed
1232
1233- Format attributes on `ast::ForeignItem` and take max width into account (#1916).
1234- Ignore empty lines when calculating the shortest indent width inside macro with braces (#1918).
1235- Handle tabs properly inside macro with braces (#1918).
1236- Fix a typo in `compute_budgets_for_args()` (#1924).
1237- Recover comment between keyword (`impl` and `trait`) and `{` which used to get removed (#1925).
1238
1239
1240[install-from-source]: https://github.com/rust-lang/rustfmt#installing-from-source