rust-lang / rust-lang/rust-analyzer

Feature request: Unwrap immediately invoked closure

Open
#12,237 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

A-assists C-feature
Dominant language
Rust
Stars
16.9k
Forks
2.2k
Avg merge
1d 12h
Merged PRs (30d)
72

Description

Sometimes as part of a refactoring, you end up with an immediately invoked closure like (|| { /* do stuff */ })(). This is equivalent to just the inner block if there are no control flow statements in the closure. In such cases it would be nice if rust-analyzer would help quickly get rid of the closure bits.

Concretely, this just happened for me when I had an_option.unwrap_or_else(|| { ... }) and noticed that I wanted to ? out of the outer function in the closure body. I used the inline-method assist on unwrap_or_else and ended up with an immediately-invoked closure.

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 locating rust-analyzer's existing assist for inlining a method and the handling of immediately invoked closures. Check how assists test equivalent transformations, then add coverage for a closure such as (|| { /* do stuff */ })() when it has no control-flow statements. Done means the closure wrapper can be removed without changing the resulting block behavior.

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
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.