rust-lang / rust-lang/rustfmt

Non-idempotent repeatedly growing indentation in doc attribute containing multi-line concat

Open
#5,974 2 comments 5 reactions 1 assignee View on GitHub

@rscprof is already working on this.

Since Jan 16, 2024.

A-doc-comments A-macros C-bug I-non-idempotency
Dominant language
Rust
Stars
7k
Forks
1.1k
Avg merge
2d 13h
Merged PRs (30d)
24

Description

Minimized from https://github.com/rust-lang/rust/blob/1.74.0/library/core/src/num/nonzero.rs#L341-L342.

macro_rules! repro {
    () => {
        #[doc = concat!("let var = ",
                        "false;")]
        fn f() {}
    };
}

As of current master, rustfmt applies the following diff. This is from cargo run --bin rustfmt -- /path/to/repro.rs.

-                        "false;")]
+                                "false;")]

If you run rustfmt again, it keeps going for 16 levels of indentation before reaching an idempotent state.

-                        "false;")]
+                                        "false;")]
-                        "false;")]
+                                                "false;")]
-                        "false;")]
+                                                        "false;")]
-                        "false;")]
+                                                                "false;")]
-                        "false;")]
+                                                                        "false;")]
-                        "false;")]
+                                                                                "false;")]
-                        "false;")]
+                                                                                        "false;")]
-                        "false;")]
+                                                                                        "false;")]

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.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.