Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #21865 from A4-Tacks/desugar-try-expr-wrap-result-ty
fix: wrap `Result<>` for desugar_try_expr_let_else
A4-Tacks 8 weeks ago
parent eabb84b · parent 16e0a5e · commit 71d06e7
-rw-r--r--crates/ide-assists/src/handlers/desugar_try_expr.rs26
1 files changed, 25 insertions, 1 deletions
diff --git a/crates/ide-assists/src/handlers/desugar_try_expr.rs b/crates/ide-assists/src/handlers/desugar_try_expr.rs
index e43cf0bc8a..865dc86221 100644
--- a/crates/ide-assists/src/handlers/desugar_try_expr.rs
+++ b/crates/ide-assists/src/handlers/desugar_try_expr.rs
@@ -116,7 +116,10 @@ pub(crate) fn desugar_try_expr(acc: &mut Assists, ctx: &AssistContext<'_>) -> Op
let fill_expr = || crate::utils::expr_fill_default(ctx.config);
let new_let_stmt = make.let_else_stmt(
try_enum.happy_pattern(pat),
- let_stmt.ty().map(|ty| make.ty_option(ty).into()),
+ let_stmt.ty().map(|ty| match try_enum {
+ TryEnum::Option => make.ty_option(ty).into(),
+ TryEnum::Result => make.ty_result(ty, make.ty_infer().into()).into(),
+ }),
expr,
make.block_expr(
iter::once(
@@ -269,4 +272,25 @@ fn test() {
"Replace try expression with let else",
);
}
+
+ #[test]
+ fn test_desugar_try_expr_result_let_else_with_type() {
+ check_assist_by_label(
+ desugar_try_expr,
+ r#"
+//- minicore: try, result
+fn test() {
+ let pat: bool = Ok(true)$0?;
+}
+ "#,
+ r#"
+fn test() {
+ let Ok(pat): Result<bool, _> = Ok(true) else {
+ return Err(todo!());
+ };
+}
+ "#,
+ "Replace try expression with let else",
+ );
+ }
}