rust-lang / rust-lang/rustfmt

Single expression closure without parameters

Open
#3,605 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

A-closures I-poor-formatting P-low
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

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.

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.