@@ -56,13 +56,20 @@ pub(crate) fn add_turbo_fish(acc: &mut Assists, ctx: &AssistContext) -> Option<(
56
56
if let Some ( let_stmt) = ctx. find_node_at_offset :: < ast:: LetStmt > ( ) {
57
57
if let_stmt. colon_token ( ) . is_none ( ) {
58
58
let type_pos = let_stmt. pat ( ) ?. syntax ( ) . last_token ( ) ?. text_range ( ) . end ( ) ;
59
+ let semi_pos = let_stmt. syntax ( ) . last_token ( ) ?. text_range ( ) . end ( ) ;
60
+
59
61
acc. add (
60
62
AssistId ( "add_type_ascription" , AssistKind :: RefactorRewrite ) ,
61
63
"Add `: _` before assignment operator" ,
62
64
ident. text_range ( ) ,
63
- |builder| match ctx. config . snippet_cap {
64
- Some ( cap) => builder. insert_snippet ( cap, type_pos, ": ${0:_}" ) ,
65
- None => builder. insert ( type_pos, ": _" ) ,
65
+ |builder| {
66
+ if let_stmt. semicolon_token ( ) . is_none ( ) {
67
+ builder. insert ( semi_pos, ";" ) ;
68
+ }
69
+ match ctx. config . snippet_cap {
70
+ Some ( cap) => builder. insert_snippet ( cap, type_pos, ": ${0:_}" ) ,
71
+ None => builder. insert ( type_pos, ": _" ) ,
72
+ }
66
73
} ,
67
74
) ?
68
75
} else {
@@ -265,4 +272,24 @@ fn main() {
265
272
"# ,
266
273
) ;
267
274
}
275
+
276
+ #[ test]
277
+ fn add_type_ascription_append_semicolon ( ) {
278
+ check_assist_by_label (
279
+ add_turbo_fish,
280
+ r#"
281
+ fn make<T>() -> T {}
282
+ fn main() {
283
+ let x = make$0()
284
+ }
285
+ "# ,
286
+ r#"
287
+ fn make<T>() -> T {}
288
+ fn main() {
289
+ let x: ${0:_} = make();
290
+ }
291
+ "# ,
292
+ "Add `: _` before assignment operator" ,
293
+ ) ;
294
+ }
268
295
}
0 commit comments