Skip to content

rustfmt does not format panic! macro under a specific circumstance #7102

Description

@duongdominhchau

Summary

Somehow my panic!("blah blah blah {}",id) is not formatted, but there is no error.

cargo fmt -- --config=error_on_unformatted=true exits cleanly, cargo fmt -- -v does not print anything unusual. rustup update then cargo +nightly fmt yields the same output.

cargo build produces warnings because I trimmed the code down into silly example, but it is still valid and can be built successfully. In my original project there is no warning, it just runs normally.

I'm unable to pinpoint the exact cause, but I managed to create a quite minimal example here:

pub fn f(root: Container) -> ! {
    let Container { children, .. } = root;
    children.into_iter().for_each(|node| {
            if let Container{ guid, .. } = node {
                if true{
            match guid {
                    Guid::Other(id) => {
                        panic!(
                            "Expecting immediate bookmark root, but found user-created folder GUID={}",id
                        );
                    }
                }
                }
            }
            });
    unreachable!();
}

The children.into_iter() line and the id in panic! is affected, lines before or after are still properly formatted. The children.into_iter() and the inner if let Container lines are required to reproduce the issue, without these two lines it formats just fine. I thought it's about line length, but replacing these lines with lots of nested if true makes the issue disappear.

Please see repro.zip for full code.

Expected behavior

A space should be inserted before id

Actual behavior

The code does not change.

Configuration

None, I use the default.

Reproduction Steps

  1. Download the repro.zip and extract it
  2. cd into the directory and take note of the existing content of src/main.rs
  3. Run cargo fmt and observe that src/main.rs does not change

Meta

  • OS: ArchLinux
  • Rust toolchain version:
$ cargo --version
cargo 1.98.1 (797e8a9bc 2026-08-05)
$ cargo +nightly --version
cargo 1.100.0-nightly (b2e9d5f9d 2026-09-02)
$ rustup --vesrion
rustup 1.29.0 (2026-03-23)
info: This is the version for the rustup toolchain manager, not the rustc compiler.
info: the currently active `rustc` version is `rustc 1.98.1 (48a229cea 2026-09-01)`
$ cargo fmt -- --version
rustfmt 1.9.0-stable (48a229ceae 2026-09-01)
$ cargo +nightly fmt -- --version
rustfmt 1.10.0-nightly (0ed41eb414 2026-09-04)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-stringsArea: string literalsC-bugCategory: this is a bug; use also I-* labels for specific bug kinds, e.g. I-non-idempotency or I-ICEI-max-widthIssue: formatting exceeds maximum width

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions