diff options
| author | sgasho <SuganoShota1999@gmail.com> | 2025-08-27 00:06:47 +0900 |
|---|---|---|
| committer | sgasho <SuganoShota1999@gmail.com> | 2025-08-27 00:06:47 +0900 |
| commit | cee25947df4f0d3cb455810b64cd62c16d775109 (patch) | |
| tree | 63ec88377417a4f08d0a6093561d1ef0cfe1d6da /src/tools | |
| parent | d8b4700b8bb51f2f8ce35461998b318a2cde9787 (diff) | |
| download | rust-cee25947df4f0d3cb455810b64cd62c16d775109.tar.gz rust-cee25947df4f0d3cb455810b64cd62c16d775109.zip | |
fix: Prevent invalid transformation in 'Replace match with if let' assist
Diffstat (limited to 'src/tools')
| -rw-r--r-- | src/tools/rust-analyzer/crates/ide-assists/src/handlers/replace_if_let_with_match.rs | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/replace_if_let_with_match.rs b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/replace_if_let_with_match.rs index dd244375dc9..3b815a467bc 100644 --- a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/replace_if_let_with_match.rs +++ b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/replace_if_let_with_match.rs @@ -328,7 +328,14 @@ fn pick_pattern_and_expr_order( (pat, pat2) => match (binds_name(sema, &pat), binds_name(sema, &pat2)) { (true, true) => return None, (true, false) => (pat, guard, expr, expr2), - (false, true) => (pat2, guard2, expr2, expr), + (false, true) => { + // This pattern triggers an invalid transformation. + // See issues #11373, #19443 + if let ast::Pat::IdentPat(_) = pat2 { + return None; + } + (pat2, guard2, expr2, expr) + } _ if is_sad_pat(sema, &pat) => (pat2, guard2, expr2, expr), (false, false) => (pat, guard, expr, expr2), }, @@ -1892,4 +1899,19 @@ fn main() { "#, ) } + + #[test] + fn test_replace_match_with_if_let_not_applicable_pat2_is_ident_pat() { + check_assist_not_applicable( + replace_match_with_if_let, + r" +fn test(a: i32) { + match$0 a { + 1 => code(), + other => code(other), + } +} +", + ) + } } |
