@@ -28,33 +28,40 @@ use crate::{Assist, AssistCtx, AssistId};
2828pub ( crate ) fn add_impl ( ctx : AssistCtx ) -> Option < Assist > {
2929 let nominal = ctx. find_node_at_offset :: < ast:: NominalDef > ( ) ?;
3030 let name = nominal. name ( ) ?;
31- ctx. add_assist ( AssistId ( "add_impl" ) , format ! ( "Implement {}" , name. text( ) . as_str( ) ) , |edit| {
32- edit. target ( nominal. syntax ( ) . text_range ( ) ) ;
33- let type_params = nominal. type_param_list ( ) ;
34- let start_offset = nominal. syntax ( ) . text_range ( ) . end ( ) ;
35- let mut buf = String :: new ( ) ;
36- buf. push_str ( "\n \n impl" ) ;
37- if let Some ( type_params) = & type_params {
38- format_to ! ( buf, "{}" , type_params. syntax( ) ) ;
39- }
40- buf. push_str ( " " ) ;
41- buf. push_str ( name. text ( ) . as_str ( ) ) ;
42- if let Some ( type_params) = type_params {
43- let lifetime_params = type_params
44- . lifetime_params ( )
45- . filter_map ( |it| it. lifetime_token ( ) )
46- . map ( |it| it. text ( ) . clone ( ) ) ;
47- let type_params =
48- type_params. type_params ( ) . filter_map ( |it| it. name ( ) ) . map ( |it| it. text ( ) . clone ( ) ) ;
31+ let target = nominal. syntax ( ) . text_range ( ) ;
32+ ctx. add_assist (
33+ AssistId ( "add_impl" ) ,
34+ format ! ( "Implement {}" , name. text( ) . as_str( ) ) ,
35+ target,
36+ |edit| {
37+ let type_params = nominal. type_param_list ( ) ;
38+ let start_offset = nominal. syntax ( ) . text_range ( ) . end ( ) ;
39+ let mut buf = String :: new ( ) ;
40+ buf. push_str ( "\n \n impl" ) ;
41+ if let Some ( type_params) = & type_params {
42+ format_to ! ( buf, "{}" , type_params. syntax( ) ) ;
43+ }
44+ buf. push_str ( " " ) ;
45+ buf. push_str ( name. text ( ) . as_str ( ) ) ;
46+ if let Some ( type_params) = type_params {
47+ let lifetime_params = type_params
48+ . lifetime_params ( )
49+ . filter_map ( |it| it. lifetime_token ( ) )
50+ . map ( |it| it. text ( ) . clone ( ) ) ;
51+ let type_params = type_params
52+ . type_params ( )
53+ . filter_map ( |it| it. name ( ) )
54+ . map ( |it| it. text ( ) . clone ( ) ) ;
4955
50- let generic_params = lifetime_params. chain ( type_params) . sep_by ( ", " ) ;
51- format_to ! ( buf, "<{}>" , generic_params)
52- }
53- buf. push_str ( " {\n " ) ;
54- edit. set_cursor ( start_offset + TextSize :: of ( & buf) ) ;
55- buf. push_str ( "\n }" ) ;
56- edit. insert ( start_offset, buf) ;
57- } )
56+ let generic_params = lifetime_params. chain ( type_params) . sep_by ( ", " ) ;
57+ format_to ! ( buf, "<{}>" , generic_params)
58+ }
59+ buf. push_str ( " {\n " ) ;
60+ edit. set_cursor ( start_offset + TextSize :: of ( & buf) ) ;
61+ buf. push_str ( "\n }" ) ;
62+ edit. insert ( start_offset, buf) ;
63+ } ,
64+ )
5865}
5966
6067#[ cfg( test) ]
0 commit comments