@@ -5,9 +5,10 @@ use ide_db::{
55 RootDatabase , famous_defs:: FamousDefs , helpers:: mod_path_to_ast,
66 imports:: import_assets:: item_for_path_search, use_trivial_constructor:: use_trivial_constructor,
77} ;
8+ use syntax:: syntax_editor:: { Element , Position } ;
89use syntax:: {
910 TokenText ,
10- ast:: { self , AstNode , HasAttrs , HasGenericParams , HasName , edit, edit_in_place :: Indent } ,
11+ ast:: { self , AstNode , HasAttrs , HasGenericParams , HasName , edit:: AstNodeEdit } ,
1112} ;
1213
1314use crate :: {
@@ -111,9 +112,8 @@ pub(crate) fn generate_single_field_struct_from(
111112 false ,
112113 false ,
113114 )
114- . clone_for_update ( ) ;
115+ . indent ( 1 . into ( ) ) ;
115116
116- fn_. indent ( 1 . into ( ) ) ;
117117 let cfg_attrs = strukt
118118 . attrs ( )
119119 . filter ( |attr| attr. as_simple_call ( ) . is_some_and ( |( name, _arg) | name == "cfg" ) ) ;
@@ -129,16 +129,25 @@ pub(crate) fn generate_single_field_struct_from(
129129 make:: ty ( "From" ) ,
130130 ty. clone ( ) ,
131131 None ,
132- ty_where_clause. map ( |wc| edit :: AstNodeEdit :: reset_indent ( & wc ) ) ,
132+ ty_where_clause. map ( |wc| wc . reset_indent ( ) ) ,
133133 None ,
134134 )
135135 . clone_for_update ( ) ;
136136
137137 impl_. get_or_create_assoc_item_list ( ) . add_item ( fn_. into ( ) ) ;
138+ let impl_ = impl_. indent ( indent) ;
139+
140+ let mut edit = builder. make_editor ( strukt. syntax ( ) ) ;
138141
139- impl_. reindent_to ( indent) ;
142+ edit. insert_all (
143+ Position :: after ( strukt. syntax ( ) ) ,
144+ vec ! [
145+ make:: tokens:: whitespace( & format!( "\n \n {indent}" ) ) . syntax_element( ) ,
146+ impl_. syntax( ) . syntax_element( ) ,
147+ ] ,
148+ ) ;
140149
141- builder. insert ( strukt . syntax ( ) . text_range ( ) . end ( ) , format ! ( " \n \n {indent}{impl_}" ) ) ;
150+ builder. add_file_edits ( ctx . vfs_file_id ( ) , edit ) ;
142151 } ,
143152 )
144153}
0 commit comments