@@ -85,20 +85,23 @@ pub(crate) fn add_turbo_fish(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
85
85
86
86
if let Some ( let_stmt) = ctx. find_node_at_offset :: < ast:: LetStmt > ( ) {
87
87
if let_stmt. colon_token ( ) . is_none ( ) {
88
- let type_pos = let_stmt. pat ( ) ?. syntax ( ) . last_token ( ) ?. text_range ( ) . end ( ) ;
89
- let semi_pos = let_stmt. syntax ( ) . last_token ( ) ?. text_range ( ) . end ( ) ;
90
-
91
88
acc. add (
92
89
AssistId ( "add_type_ascription" , AssistKind :: RefactorRewrite ) ,
93
90
"Add `: _` before assignment operator" ,
94
91
ident. text_range ( ) ,
95
- |builder| {
92
+ |edit| {
93
+ let let_stmt = edit. make_mut ( let_stmt) ;
94
+
96
95
if let_stmt. semicolon_token ( ) . is_none ( ) {
97
- builder . insert ( semi_pos , ";" ) ;
96
+ ted :: append_child ( let_stmt . syntax ( ) , make :: tokens :: semicolon ( ) ) ;
98
97
}
99
- match ctx. config . snippet_cap {
100
- Some ( cap) => builder. insert_snippet ( cap, type_pos, ": ${0:_}" ) ,
101
- None => builder. insert ( type_pos, ": _" ) ,
98
+
99
+ let placeholder_ty = make:: ty_placeholder ( ) . clone_for_update ( ) ;
100
+
101
+ let_stmt. set_ty ( Some ( placeholder_ty. clone ( ) ) ) ;
102
+
103
+ if let Some ( cap) = ctx. config . snippet_cap {
104
+ edit. add_placeholder_snippet ( cap, placeholder_ty) ;
102
105
}
103
106
} ,
104
107
) ?
@@ -395,6 +398,26 @@ fn main() {
395
398
) ;
396
399
}
397
400
401
+ #[ test]
402
+ fn add_type_ascription_missing_pattern ( ) {
403
+ check_assist_by_label (
404
+ add_turbo_fish,
405
+ r#"
406
+ fn make<T>() -> T {}
407
+ fn main() {
408
+ let = make$0()
409
+ }
410
+ "# ,
411
+ r#"
412
+ fn make<T>() -> T {}
413
+ fn main() {
414
+ let : ${0:_} = make();
415
+ }
416
+ "# ,
417
+ "Add `: _` before assignment operator" ,
418
+ ) ;
419
+ }
420
+
398
421
#[ test]
399
422
fn add_turbo_fish_function_lifetime_parameter ( ) {
400
423
check_assist (
0 commit comments