Skip to content

Commit 7c871c2

Browse files
authored
Merge pull request rust-lang#20860 from A4-Tacks/migrate-single-field-from
Migrate `generate_single_field_struct_from` assist to use `SyntaxEditor`
2 parents b6c29e0 + d326377 commit 7c871c2

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

src/tools/rust-analyzer/crates/ide-assists/src/handlers/generate_single_field_struct_from.rs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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};
89
use 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

1314
use 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

Comments
 (0)