rust-lang / rust-lang/rustfmt

rustfmt does not format panic! macro under a specific circumstance

Open
#7,102 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

A-strings C-bug I-max-width
Dominant language
Rust
Stars
7k
Forks
1.1k
Avg merge
2d 13h
Merged PRs (30d)
24

Description

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)

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Extract repro.zip, inspect src/main.rs, and run cargo fmt to confirm that the spacing before id is unchanged. Use the minimal example and its required children.into_iter() and inner if let Container lines to trace the formatter behavior. Done means cargo fmt inserts the missing space without disturbing the surrounding formatting.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
58/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.