Defining generics in a macro inside macro causes infinite indentation
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 7k
- Forks
- 1.1k
- Avg merge
- 2d 13h
- Merged PRs (30d)
- 24
Description
macro_rules! example {
(good) => {
macro_rules! good {
() => {
A
};
}
};
(bad) => {
macro_rules! bad {
() => {
A<'a>
};
}
};
(alsobad) => {
macro_rules! bad {
() => {
A<B>
};
}
};
}
Running multiple rounds of fmt in this causes both versions of bad's body to be indented indefinitely, but not good's.
Might be related to #4609, #5044 and other issues involving infinite indentation, but none of them mentioned generics.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the minimal macro_rules reproduction in this issue and run rustfmt through multiple rounds to observe the increasing indentation. Review related infinite-indentation issues #4609 and #5044 for relevant investigation context. Done means nested generic and lifetime-like bodies remain stable across repeated formatting, while the good case continues to format correctly.
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
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100