All Versions
96
Latest Version
Avg Release Cycle
34 days
Latest Release
1107 days ago

Changelog History
Page 1

  • v2.0.0-rc.2

    May 25, 2020
  • v1.5.1 Changes

    June 24, 2022

    N.B A bug was introduced in v1.5.0/nightly-2022-06-15 which modified formatting. If you happened to run rustfmt over your code with one of those ~10 nightlies it's possible you may have seen formatting changes, and you may see additional changes after this fix since that bug has now been reverted.

    ๐Ÿ›  Fixed

    • Correct an issue introduced in v1.5.0 where formatting changes were unintentionally introduced in a few cases with a large/long construct in a right hand side position (e.g. a large chain on the RHS of a local/assignment statement)
    • cargo fmt --version properly displays the version value again #5395

    ๐Ÿ”„ Changed

    • 0๏ธโƒฃ Properly sort imports containing raw identifiers #3791 (note this is change version gated, and not applied by default)

    โž• Added

    • Add new configuration option, doc_comment_code_block_width, which allows for setting a shorter width limit to use for formatting code snippets in doc comments #5384

    Install/Download Options

    • rustup (nightly) - nightly-2022-06-24
    • ๐Ÿš€ GitHub Release Binaries - Release v1.5.1
    • ๐Ÿ— Build from source - Tag v1.5.1, see instructions for how to [install rustfmt from source][install-from-source]
  • v1.5.0 Changes

    June 14, 2022

    ๐Ÿ”„ Changed

    • Simplify the rustfmt help text by eliding the full path to the rustfmt binary path from the usage string when running rustfmt --help #5214

    ๐Ÿ›  Fixed

    • โœ‚ Remove duplicate imports when imports_granularity is set to Item #4725
    • Properly handle stdin input containing an inner skip attribute #5368
    • Maintain attributes on imports when imports_granularity is set to Item #5030
    • Format empty trait definitions as a single line when both empty_item_single_line is enabled and brace_style is set to AlwaysNextLine #5047
    • Don't change granularity of imports containing comments with imports_granularity if doing so could lose or misplace those comments #5311
    • Prevent rustfmt from removing trailing comments at the end of files annotated with inner #![rustfmt::skip] attributes #5033
    • ๐Ÿ›  Fixed various error[internal]: left behind trailing whitespace" issues:
      • Remove trailing whitespace when formatting a where clause who's bounds have an empty right hand side #5012 #4850
      • Prevent rustfmt from adding an empty comment line when rewriting markdown lists at the start of doc comments. This issue was triggered when wrap_comments=true #5088
    • Prevent adding a block indented newline before a function parameter with a complex type that was formatted over multiple lines #5125
    • ๐Ÿ›  Fix various module resolution issues preventing rustfmt from finding modules that should be formatted:
      • Handle external mods imported via external->inline load hierarchy #5063
      • Resolve sub modules of integration tests #5119
      • Module resolution will fallback to the current search directory if a relative directory search results in a FileNotFound error #5198
    • Give users a clearer error message when resolving a module who's file path is ambiguous (e.g x.rs and x/mod.rs). Before users were given a File not found error message which was confusing #5167
    • ๐Ÿ›  Fix various issues related to type aliases:
      • Prevent rustfmt from adding = impl to associated types defined in macro bodies #4823
      • Properly block indent type alias impl traits (TAITs) that wrap to the next line when version=Two is set. Before any trait bounds that wrapped to the next line would not be indented #5027
      • Prevent rustfmt from adding an impl Trait definition into types #5086
    • ๐Ÿ›  Fix cases where normalize_comments=true would de-normalizes some comments by changing inline comments into block comments #4909
    • ๐Ÿ’… Prevent rustfmt from wrapping the content of markdown reference-style links in doc comments #5095 #4933
    • Don't format files annotated with inner #![rustfmt::skip] attribute PR #5094
    • Prevent duplicate comma when struct pattern ends with .. and trailing_comma=Always. For example, let Foo { a, .. } = b; would become let Foo { a,, .. } = b; #5066
    • ๐Ÿ›  Fix the order of static and async keywords when rewriting static async closures. The correct order is static and then async (e.g static async || {}) #5149
    • Retain the fully qualified path segment when rewriting struct literals in expression position. Now <Struct as Trait>::Type is not rewritten as Trait::Type #5151
    • ๐Ÿšš Do not remove match arm braces from a match arm with a single ast::ExprKind::Block that has leading attributes. Removing the braces could lead to code that does not compile. Now rustfmt will leave the outer {} in place when formatting => {#[allow(unsafe_code)]unsafe {}} #4109
    • Backport json emitter and stdin changes PR #5054
      • Make --check work when running rustfmt with input from stdin PR #3896
      • Fix --check with the --files-with-diff flag PR #3910
      • Produce valid JSON when using the JSON emitter PR #3953
      • Fix newlines in JSON output PR #4262
      • Use <stdin> when emitting stdin as filename PR #4298
    • Always generate some output when formatting @generated files via stdin even when format_generated_files=false. Not producing output caused rust-analyzer to delete the file content rust-lang/rust-analyzer #5172
    • Properly block indent multi-line comments in empty struct definitions. Previously, only the first comment line would be block indented. All other comment lines would be aligned with the struct definition #4854
    • Prevent rustfmt from wrapping a comment at a byte position inside a non-ascii character when wrap_comments=true. This prevents rustfmt from panicking when breaking on the invalid position #5023
    • ๐Ÿšš Prevent rustfmt from removing commented out trailing separators (e.g commas) when rewriting lists. For example, remove the comma from a comment like this // ..., would lead to a scenario where the entire list could not be rewritten because the content of the comment changed #5042
    • ๐Ÿ›  Fix panic when import_granularity was set to Module, One, or Crate and the import use declaration contained an alias use crate a::b as b1 #5131
    • โž• Add a newline between generic parameters and their doc comments to prevent the generic parameters from being merged into their doc comments #5122
    • ๐Ÿ›  Fixes indentation issue where string literals manually broken with line continuation characters (\) would be incorrectly indented in macro definitions when setting format_strings=true#4036
    • Properly wrap and format long markdown block quotes when wrap_comments=true #5157
    • Prevent rustfmt from wrapping markdown headers even when wrap_comments=true. Wrapping the markdown headers would prevent them from being properly rendered with rustdoc #5238
    • Prevent rustfmt from removing commas between struct fields when those fields were also separated by an empty line #4791 #4928
    • ๐Ÿ›  Fix compiler error caused when formatting imports with imports_granularity=Module and a path containing self. Given the following import use crate::lexer::{self, tokens::TokenData};, rustfmt would transform the self import into use crate::lexer::self;. Now rustfmt produces use crate::lexer::{self}; #4681
    • Prevent rustfmt from breaking long type links in doc comments on namespace qualifiers (::) when wrap_comments=true. Breaking these long type links over multiple lines prevented them from being properly rendered in rustdoc #5260
    • Correctly find the start of struct bodies after any generic const parameters. Naively searching for an opening { lead to issues since generic const parameters are also defined with {} (e.g. struct Example<const N: usize = { 1048576 }> {}) #5273
    • ๐Ÿ”€ Prevent rustfmt from merging derives when using inner or outer rustfmt::skip::attributes attributes. For example, #[rustfmt::skip::attributes(derive)] #5270
    • Retain trailing ; when rewriting macro calls in extern blocks. For example, extern "C" { x!(-); }#5281
    • โž• Add a newline when formatting struct fields preceded by both doc comments and inline comments to prevent the field from being merged into the inline comment. This was not an issue when a struct was preceded by just a doc comment or just an inline comment #5215

    โž• Added

    โœ‚ Removed

    • โœ‚ Removed unstable, nightly-only config option report_todo #5101
    • โœ‚ Removed unstable, nightly-only config option report_fixme #5102
    • Removed unstable, nightly-only config option license_template_path #5103

    Misc

    • ๐Ÿ‘Œ Improved performance when formatting large and deeply nested expression trees, often found in generated code, which have many expressions that exceed max_width #5128, #4867, #4476, #5139

    Install/Download Options

    • rustup (nightly) - nightly-2022-06-15
    • ๐Ÿš€ GitHub Release Binaries - Release v1.5.0
    • ๐Ÿ— Build from source - Tag v1.5.0, see instructions for how to [install rustfmt from source][install-from-source]
  • v1.4.38 Changes

    October 20, 2021

    ๐Ÿ”„ Changed

    ๐Ÿ›  Fixed

    • ๐Ÿ’… Resolved issue where specious whitespace would be inserted when a block style comment was terminated within string literal processing #4312
    • ๐Ÿ“œ Nested out-of-line mods are again parsed and formatted #4874
    • ๐Ÿ’ป Accepts 2021 for edition value from rustfmt command line PR #4847
    • ๐Ÿ’ป Unstable command line options are no longer displayed in --help text on stable PR #4798
    • Stopped panicking on patterns in match arms which start with non-ascii characters #4868
    • 0๏ธโƒฃ Stopped stripping defaults on const params #4816
    • ๐Ÿ›  Fixed issue with dropped content with GAT aliases with self bounds in impls #4911
    • Stopped removing generic args on associated type constraints #4943
    • Stopped dropping visibility on certain trait and impl items #4960
    • ๐Ÿ›  Fixed dropping of qualified paths in struct patterns #4908 and #5005
    • ๐Ÿ›  Fixed bug in line width calculation that was causing specious formatting of certain patterns #4031
      • 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
    • ๐Ÿ›  Fixed bug where rustfmt would drop parameter attributes if they were too long in certain cases #4579
    • Resolved idempotency issue with extern body elements #4963
    • ๐Ÿ’… 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
    • 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
    • ๐Ÿ›  Fixed bug in cases where derive attributes started with a block style comment #4984
    • Fixed issue where the struct rest could be lost when struct_field_align_threshold was enabled #4926
    • ๐Ÿ– Handles cases where certain control flow type expressions have comments between patterns/keywords and the pattern ident contains the keyword #5009
    • ๐Ÿ’… Handles tuple structs that have explicit visibilities and start with a block style comment #5011
    • ๐Ÿ’… Handles leading line-style comments in certain types of macro calls #4615

    โž• Added

    Note 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 https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=#use_small_heuristics

    • ๐Ÿ†• New One variant added to imports_granularity configuration option which can be used to reformat all imports into a single use statement #4669
    • rustfmt will now skip files that are annotated with @generated at the top of the file #3958 if format_generated_files option is set to false (by default @generated files are formatted)
    • New configuration option hex_literal_case that allows user to control the casing utilized for hex literals PR #4903

    ๐Ÿ‘€ See the section on the configuration site for more information https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=#hex_literal_case

    • ๐Ÿ‘ 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

    Install/Download Options

    • rustup (nightly) - pending
    • ๐Ÿš€ GitHub Release Binaries - Release v1.4.38
    • ๐Ÿ— Build from source - Tag v1.4.38, see instructions for how to [install rustfmt from source][install-from-source]
  • v1.4.37 Changes

    April 03, 2021

    ๐Ÿ”„ Changed

    • โšก๏ธ rustc-ap-* crates updated to v712.0.0

    ๐Ÿ›  Fixed

    • Resolve idempotence issue related to indentation of macro defs that contain or-patterns with inner comments (#4603)
    • โž• Addressed various clippy and rustc warnings

    Install/Download Options

    • ๐Ÿ“ฆ crates.io package - pending
    • rustup (nightly) - pending
    • ๐Ÿš€ GitHub Release Binaries - Release v1.4.37
    • ๐Ÿ— Build from source - Tag v1.4.37, see instructions for how to [install rustfmt from source][install-from-source]
  • v1.4.36 Changes

    February 07, 2021

    ๐Ÿ”„ Changed

    • โšก๏ธ rustc-ap-* crates updated to v705.0.0

    Install/Download Options

    • ๐Ÿ“ฆ crates.io package - pending
    • rustup (nightly) - pending
    • ๐Ÿš€ GitHub Release Binaries - Release v1.4.36
    • ๐Ÿ— Build from source - Tag v1.4.36, see instructions for how to [install rustfmt from source][install-from-source]
  • v1.4.35 Changes

    February 03, 2021

    ๐Ÿ”„ Changed

    • โšก๏ธ rustc-ap-* crates updated to v702.0.0

    Install/Download Options

    • ๐Ÿ“ฆ crates.io package - pending
    • rustup (nightly) - *n/a (superseded by v1.4.36)
    • ๐Ÿš€ GitHub Release Binaries - Release v1.4.35
    • ๐Ÿ— Build from source - Tag v1.4.35, see instructions for how to [install rustfmt from source][install-from-source]
  • v1.4.34 Changes

    January 28, 2021

    ๐Ÿ›  Fixed

    • Don't insert trailing comma on (base-less) rest in struct literals within macros (#4675)

    Install/Download Options

    • ๐Ÿ“ฆ crates.io package - pending
    • rustup (nightly) - Starting in 2021-01-31
    • ๐Ÿš€ GitHub Release Binaries - Release v1.4.34
    • ๐Ÿ— Build from source - Tag v1.4.34, see instructions for how to [install rustfmt from source][install-from-source]
  • v1.4.33 Changes

    January 27, 2021

    ๐Ÿ”„ Changed

    • ๐Ÿ”ง 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.

    โž• Added

    • ๐Ÿ”€ 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, PR #4639)

    ๐Ÿ‘€ See the section on the configuration site for more information https://rust-lang.github.io/rustfmt/?version=v1.4.33&search=#imports_granularity

    ๐Ÿ›  Fixed

    • ๐Ÿ›  Fix erroneous removal of const keyword on const trait impl (#4084)
    • ๐Ÿ›  Fix incorrect span usage wit const generics in supertraits (#4204)
    • ๐Ÿ‘‰ Use correct span for const generic params (#4263)
    • Correct span on const generics to include type bounds (#4310)
    • Idempotence issue on blocks containing only empty statements (#4627 and #3868)
    • ๐Ÿ›  Fix issue with semicolon placement on required functions that have a trailing comment that ends in a line-style comment before the semicolon (#4646)
    • Avoid shared interned cfg_if symbol since rustfmt can re-initialize the rustc_ast globals on multiple inputs (#4656)

    Install/Download Options

    • ๐Ÿ“ฆ crates.io package - pending
    • rustup (nightly) - n/a (superseded by v1.4.34)
    • ๐Ÿš€ GitHub Release Binaries - Release v1.4.33
    • ๐Ÿ— Build from source - Tag v1.4.33, see instructions for how to [install rustfmt from source][install-from-source]
  • v1.4.32 Changes

    January 16, 2021

    ๐Ÿ›  Fixed

    • Indentation now correct on first bound in cases where the generic bounds are multiline formatted and the first bound itself is multiline formatted (#4636)

    Install/Download Options

    • ๐Ÿ“ฆ crates.io package - pending
    • rustup (nightly) - Starting in 2021-01-18
    • ๐Ÿš€ GitHub Release Binaries - Release v1.4.32
    • ๐Ÿ— Build from source - Tag v1.4.32, see instructions for how to [install rustfmt from source][install-from-source]