Single expression closure without parameters
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 7k
- Forks
- 1.1k
- Avg merge
- 2d 13h
- Merged PRs (30d)
- 24
Description
Before formatting:
vm.get_method_or_type_error(
obj.clone(),
"__getitem__",
|| format!("'{}' object is not iterable", obj.class().name)
)?;
After formatting:
vm.get_method_or_type_error(obj.clone(), "__getitem__", || {
format!("'{}' object is not iterable", obj.class().name)
})?;
Maybe lazy string (empty closure params and format! call inside) and other single expression closures should not be split by a new line, and instead being considered as an atomic element?
If I add more arguments, so that a list would be formatted as arg-per-line anyway, it behaves exactly like that and is more readable in my opinion
vm.get_method_or_type_error(
obj.clone(),
obj.clone(),
obj.clone(),
"__getitem__",
|| format!("hello, world1111111111111112222222222, 2222222221111111111111222"),
)?;
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 before-and-after formatting examples in rustfmt and locate the closure-formatting entry point that splits the zero-parameter single-expression closure. Check existing formatter tests for similar closure cases, then add coverage showing that such closures remain on one line while the longer multi-argument example retains argument-per-line 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
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100