Skip to content

fix impl unwrap block #2207#3115

Open
asukaminato0721 wants to merge 4 commits intofacebook:mainfrom
asukaminato0721:24552-ty
Open

fix impl unwrap block #2207#3115
asukaminato0721 wants to merge 4 commits intofacebook:mainfrom
asukaminato0721:24552-ty

Conversation

@asukaminato0721
Copy link
Copy Markdown
Contributor

@asukaminato0721 asukaminato0721 commented Apr 12, 2026

Summary

part of #2207

impl unwrap block

astral-sh/ruff#24552

Test Plan

add test

@meta-cla meta-cla Bot added the cla signed label Apr 12, 2026
@asukaminato0721 asukaminato0721 changed the title fix impl unwrap scope #2207 fix impl unwrap block #2207 Apr 12, 2026
@asukaminato0721 asukaminato0721 marked this pull request as ready for review April 12, 2026 17:51
Copilot AI review requested due to automatic review settings April 12, 2026 17:51
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an “Unwrap block” refactor code action to the Pyrefly LSP, enabling users to remove an enclosing block statement (e.g., if, else, for/while without else, with) and reindent the block body into the parent scope.

Changes:

  • Implemented unwrap_block quick-fix/refactor logic, including AST traversal and text edit construction.
  • Wired the new refactor into Transaction and the non-wasm LSP server’s code-action collection.
  • Added initial LSP code-action tests for unwrap-block (basic if, else, and loop-else rejection).

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
pyrefly/lib/test/lsp/code_actions.rs Adds unwrap-block helpers and a few targeted tests.
pyrefly/lib/state/lsp/quick_fixes/unwrap_block.rs New unwrap-block refactor implementation (target detection + edit generation).
pyrefly/lib/state/lsp/quick_fixes/mod.rs Exposes the new unwrap_block module.
pyrefly/lib/state/lsp.rs Adds Transaction::unwrap_block_code_actions API entrypoint.
pyrefly/lib/lsp/non_wasm/server.rs Includes unwrap-block in refactor code-action computation/telemetry.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread pyrefly/lib/state/lsp/quick_fixes/unwrap_block.rs Outdated
Comment thread pyrefly/lib/test/lsp/code_actions.rs
@github-actions

This comment has been minimized.

Copy link
Copy Markdown
Contributor

@connernilsen connernilsen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @asukaminato0721, this is looking good, but a few things (mostly requests for more tests). Let me know if you have questions

Comment thread pyrefly/lib/test/lsp/code_actions.rs
Comment thread pyrefly/lib/state/lsp/quick_fixes/unwrap_block.rs
Comment thread pyrefly/lib/test/lsp/code_actions.rs
Comment thread pyrefly/lib/state/lsp/quick_fixes/unwrap_block.rs Outdated
@github-actions

This comment has been minimized.

Copy link
Copy Markdown
Contributor

@connernilsen connernilsen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few more things I found

Comment thread pyrefly/lib/state/lsp/quick_fixes/unwrap_block.rs Outdated
Comment thread pyrefly/lib/state/lsp/quick_fixes/unwrap_block.rs Outdated
Comment on lines +154 to +163
if let Some(target) =
find_unwrap_block_target_in_body(&try_stmt.orelse, source, position)
{
return Some(target);
}
if let Some(target) =
find_unwrap_block_target_in_body(&try_stmt.finalbody, source, position)
{
return Some(target);
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the For and While cases above, we return None if these are present. Is there a reason we're not doing that here?

Comment thread pyrefly/lib/test/lsp/code_actions.rs
@github-actions github-actions Bot added size/xl and removed size/xl labels Apr 21, 2026
@github-actions
Copy link
Copy Markdown

According to mypy_primer, this change doesn't affect type check results on a corpus of open source code. ✅

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants