diff options
| author | Shoyu Vanilla (Flint) <modulo641@gmail.com> | 2025-09-22 15:31:10 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-22 15:31:10 +0000 |
| commit | 44f3de3d4370f681d2255f77417cdb6ee850446e (patch) | |
| tree | c2069752d2ff8a77993ecb9041320411ca2b1cef | |
| parent | 8ee0aa19b55b1ae3a4eac08cc5180f7e64b3caa1 (diff) | |
| parent | dc805bf49844d7bde1013f817c4368c1c3c485aa (diff) | |
| download | rust-44f3de3d4370f681d2255f77417cdb6ee850446e.tar.gz rust-44f3de3d4370f681d2255f77417cdb6ee850446e.zip | |
Merge pull request #20722 from A4-Tacks/pull-assign-up-inner-if
Fix apply in inner if for pull_assignment_up
| -rw-r--r-- | src/tools/rust-analyzer/crates/ide-assists/src/handlers/pull_assignment_up.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/pull_assignment_up.rs b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/pull_assignment_up.rs index 21debf6745a..00902fafe82 100644 --- a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/pull_assignment_up.rs +++ b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/pull_assignment_up.rs @@ -53,6 +53,10 @@ pub(crate) fn pull_assignment_up(acc: &mut Assists, ctx: &AssistContext<'_>) -> }; let tgt: ast::Expr = if let Some(if_expr) = ctx.find_node_at_offset::<ast::IfExpr>() { + let if_expr = std::iter::successors(Some(if_expr), |it| { + it.syntax().parent().and_then(ast::IfExpr::cast) + }) + .last()?; collector.collect_if(&if_expr)?; if_expr.into() } else if let Some(match_expr) = ctx.find_node_at_offset::<ast::MatchExpr>() { @@ -238,6 +242,37 @@ fn foo() { } #[test] + fn test_pull_assignment_up_inner_if() { + check_assist( + pull_assignment_up, + r#" +fn foo() { + let mut a = 1; + + if true { + a = 2; + } else if true { + $0a = 3; + } else { + a = 4; + } +}"#, + r#" +fn foo() { + let mut a = 1; + + a = if true { + 2 + } else if true { + 3 + } else { + 4 + }; +}"#, + ); + } + + #[test] fn test_pull_assignment_up_match() { check_assist( pull_assignment_up, |
