Rustfmt incorrectly adds whitespace inside multiline string literals within macro calls that have curly braces
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 7k
- Forks
- 1.1k
- Avg merge
- 2d 13h
- Merged PRs (30d)
- 24
Description
Code:
macro_rules! test {
($l:literal) => {};
}
fn main() {
test!{
"
"};
}
expected output:
macro_rules! test {
($l:literal) => {};
}
fn main() {
test!{
"
"
};
}
actual output:
macro_rules! test {
($l:literal) => {};
}
fn main() {
test! {
"
"};
}
Rustfmt added an extra indentation to the literal, including inside the string itself. This only occurs when the macro invocation is delimited by curly brackets, it works fine when square or parentheses are used.
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 by running rustfmt on the supplied Rust snippet and compare the curly-braced macro invocation with square- and parenthesized forms. Trace the macro-call formatting path that handles multiline string literals and delimiters. Done means the curly-braced example matches the expected output without changing the string contents, while the other delimiter cases remain correct.
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
- Clearly specified
- Newbie friendliness
- 35/100