1
1
use hir:: { self , HasCrate , HirDisplay } ;
2
2
use stdx:: format_to;
3
- use syntax:: ast:: { self , AstNode , HasName , HasVisibility } ;
3
+ use syntax:: ast:: { self , make , AstNode , HasName , HasVisibility } ;
4
4
5
5
use crate :: {
6
- utils:: { find_impl_block_end, find_struct_impl, generate_impl_text} ,
6
+ utils:: { find_impl_block_end, find_struct_impl, generate_impl_text, render_snippet , Cursor } ,
7
7
AssistContext , AssistId , AssistKind , Assists , GroupLabel ,
8
8
} ;
9
9
@@ -78,17 +78,16 @@ pub(crate) fn generate_delegate(acc: &mut Assists, ctx: &AssistContext) -> Optio
78
78
}
79
79
} ;
80
80
81
- format_to ! (
82
- buf,
83
- "{}fn {}(&self) {} {{
84
- self.{}.{}()
85
- }}" ,
86
- vis,
87
- method. name( ctx. db( ) ) ,
88
- return_type,
89
- field_name,
90
- method. name( ctx. db( ) )
91
- ) ;
81
+ // make function
82
+ let vis = strukt. visibility ( ) ;
83
+ let name = make:: name ( & method. name ( ctx. db ( ) ) . to_string ( ) ) ;
84
+ let type_params = None ;
85
+ let params = make:: param_list ( None , [ ] ) ;
86
+ let body = make:: block_expr ( [ ] , None ) ;
87
+ let ret_type = & method. ret_type ( ctx. db ( ) ) . display ( ctx. db ( ) ) . to_string ( ) ;
88
+ let ret_type = Some ( make:: ret_type ( make:: ty ( ret_type) ) ) ;
89
+ let is_async = false ;
90
+ let f = make:: fn_ ( vis, name, type_params, params, body, ret_type, is_async) ;
92
91
93
92
let start_offset = impl_def
94
93
. and_then ( |impl_def| find_impl_block_end ( impl_def, & mut buf) )
@@ -97,7 +96,14 @@ pub(crate) fn generate_delegate(acc: &mut Assists, ctx: &AssistContext) -> Optio
97
96
strukt. syntax ( ) . text_range ( ) . end ( )
98
97
} ) ;
99
98
100
- builder. insert ( start_offset, buf) ;
99
+ let cap = ctx. config . snippet_cap . unwrap ( ) ; // FIXME.
100
+ let cursor = Cursor :: Before ( f. syntax ( ) ) ;
101
+
102
+ builder. insert_snippet (
103
+ cap,
104
+ start_offset,
105
+ format ! ( "\n \n {}" , render_snippet( cap, f. syntax( ) , cursor) ) ,
106
+ ) ;
101
107
} ,
102
108
) ?;
103
109
}
0 commit comments