X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=crates%2Fide_assists%2Fsrc%2Fhandlers%2Freplace_let_with_if_let.rs;h=a5fa8a110d31eed11ca4b4f0b9cad6b0a46fc8bc;hb=24255e5b3dbabe7eaec1a42668d50d96d6b1aa0f;hp=614fb3cb4fc138c1fef29cfcbde5484af8904c80;hpb=87621de2b9e03cf4b34e49107671ff5ff3e81cdd;p=rust.git diff --git a/crates/ide_assists/src/handlers/replace_let_with_if_let.rs b/crates/ide_assists/src/handlers/replace_let_with_if_let.rs index 614fb3cb4fc..a5fa8a110d3 100644 --- a/crates/ide_assists/src/handlers/replace_let_with_if_let.rs +++ b/crates/ide_assists/src/handlers/replace_let_with_if_let.rs @@ -38,7 +38,7 @@ // ``` pub(crate) fn replace_let_with_if_let(acc: &mut Assists, ctx: &AssistContext) -> Option<()> { let let_kw = ctx.find_token_syntax_at_offset(T![let])?; - let let_stmt = let_kw.ancestors().find_map(ast::LetStmt::cast)?; + let let_stmt = let_kw.parent().and_then(ast::LetStmt::cast)?; let init = let_stmt.initializer()?; let original_pat = let_stmt.pat()?; @@ -49,8 +49,9 @@ pub(crate) fn replace_let_with_if_let(acc: &mut Assists, ctx: &AssistContext) -> target, |edit| { let ty = ctx.sema.type_of_expr(&init); - let happy_variant = - ty.and_then(|ty| TryEnum::from_ty(&ctx.sema, &ty)).map(|it| it.happy_case()); + let happy_variant = ty + .and_then(|ty| TryEnum::from_ty(&ctx.sema, &ty.adjusted())) + .map(|it| it.happy_case()); let pat = match happy_variant { None => original_pat, Some(var_name) => { @@ -61,7 +62,7 @@ pub(crate) fn replace_let_with_if_let(acc: &mut Assists, ctx: &AssistContext) -> let block = make::ext::empty_block_expr().indent(IndentLevel::from_node(let_stmt.syntax())); - let if_ = make::expr_if(make::condition(init, Some(pat)), block, None); + let if_ = make::expr_if(make::expr_let(pat, init).into(), block, None); let stmt = make::expr_stmt(if_); edit.replace_ast(ast::Stmt::from(let_stmt), ast::Stmt::from(stmt));