@@ -6,7 +6,7 @@ use ide_db::{
6
6
} ;
7
7
use syntax:: {
8
8
ast:: { self , make, Expr } ,
9
- match_ast, AstNode ,
9
+ match_ast, ted , AstNode ,
10
10
} ;
11
11
12
12
use crate :: { AssistContext , AssistId , AssistKind , Assists } ;
@@ -52,8 +52,8 @@ pub(crate) fn wrap_return_type_in_result(acc: &mut Assists, ctx: &AssistContext<
52
52
AssistId ( "wrap_return_type_in_result" , AssistKind :: RefactorRewrite ) ,
53
53
"Wrap return type in Result" ,
54
54
type_ref. syntax ( ) . text_range ( ) ,
55
- |builder | {
56
- let body = ast:: Expr :: BlockExpr ( body) ;
55
+ |edit | {
56
+ let body = edit . make_mut ( ast:: Expr :: BlockExpr ( body) ) ;
57
57
58
58
let mut exprs_to_wrap = Vec :: new ( ) ;
59
59
let tail_cb = & mut |e : & _ | tail_cb_impl ( & mut exprs_to_wrap, e) ;
@@ -70,17 +70,24 @@ pub(crate) fn wrap_return_type_in_result(acc: &mut Assists, ctx: &AssistContext<
70
70
let ok_wrapped = make:: expr_call (
71
71
make:: expr_path ( make:: ext:: ident_path ( "Ok" ) ) ,
72
72
make:: arg_list ( iter:: once ( ret_expr_arg. clone ( ) ) ) ,
73
- ) ;
74
- builder. replace_ast ( ret_expr_arg, ok_wrapped) ;
73
+ )
74
+ . clone_for_update ( ) ;
75
+ ted:: replace ( ret_expr_arg. syntax ( ) , ok_wrapped. syntax ( ) ) ;
75
76
}
76
77
77
- match ctx. config . snippet_cap {
78
- Some ( cap) => {
79
- let snippet = format ! ( "Result<{type_ref}, ${{0:_}}>" ) ;
80
- builder. replace_snippet ( cap, type_ref. syntax ( ) . text_range ( ) , snippet)
81
- }
82
- None => builder
83
- . replace ( type_ref. syntax ( ) . text_range ( ) , format ! ( "Result<{type_ref}, _>" ) ) ,
78
+ let new_result_ty =
79
+ make:: ext:: ty_result ( type_ref. clone ( ) , make:: ty_placeholder ( ) ) . clone_for_update ( ) ;
80
+ let old_result_ty = edit. make_mut ( type_ref. clone ( ) ) ;
81
+
82
+ ted:: replace ( old_result_ty. syntax ( ) , new_result_ty. syntax ( ) ) ;
83
+
84
+ if let Some ( cap) = ctx. config . snippet_cap {
85
+ let generic_args = new_result_ty
86
+ . syntax ( )
87
+ . descendants ( )
88
+ . find_map ( ast:: GenericArgList :: cast)
89
+ . unwrap ( ) ;
90
+ edit. add_placeholder_snippet ( cap, generic_args. generic_args ( ) . last ( ) . unwrap ( ) ) ;
84
91
}
85
92
} ,
86
93
)
0 commit comments