[format_macro_matchers] Closure syntax
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 7k
- Forks
- 1.1k
- Avg merge
- 2d 13h
- Merged PRs (30d)
- 24
Description
I occasionally write macros that include faux-closure syntax, for example:
macro_rules! map_and_then_print {
($value:expr, |$pat:pat| $map:expr) => {{
let $pat = $value;
let s = $map;
println!("{}", s);
}};
}
map_and_then_print!(1, |x| x + 3);
// Prints "4"
rustfmt formats the usage as I'd expect:
map_and_then_print!(1, |x| x + 3);
But the declaration gets formatted a bit strangely:
($value:expr, | $pat:pat | $map:expr) => {{
rustfmt doesn't understand that it's supposed to resemble a closure, so it puts a few extra spaces in. I would have expected it to look like this:
($value:expr, |$pat:pat| $map:expr) => {{
Here is rustfmt.toml:
edition = "2018"
format_macro_matchers = true
Is this kind of thing in scope for the project?
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 reproducing the reported formatting with the macro_rules! example and rustfmt.toml setting format_macro_matchers = true. Trace how the matcher declaration is formatted, then add coverage for the closure-like |$pat:pat| syntax and confirm the output keeps the pipes adjacent to the pattern.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- tooling
- Issue type
- Feature
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100