Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/generate_single_field_struct_from.rs')
-rw-r--r--crates/ide-assists/src/handlers/generate_single_field_struct_from.rs25
1 files changed, 17 insertions, 8 deletions
diff --git a/crates/ide-assists/src/handlers/generate_single_field_struct_from.rs b/crates/ide-assists/src/handlers/generate_single_field_struct_from.rs
index cad14d9296..bdb42f9c1f 100644
--- a/crates/ide-assists/src/handlers/generate_single_field_struct_from.rs
+++ b/crates/ide-assists/src/handlers/generate_single_field_struct_from.rs
@@ -5,9 +5,10 @@ use ide_db::{
RootDatabase, famous_defs::FamousDefs, helpers::mod_path_to_ast,
imports::import_assets::item_for_path_search, use_trivial_constructor::use_trivial_constructor,
};
+use syntax::syntax_editor::{Element, Position};
use syntax::{
TokenText,
- ast::{self, AstNode, HasAttrs, HasGenericParams, HasName, edit, edit_in_place::Indent},
+ ast::{self, AstNode, HasAttrs, HasGenericParams, HasName, edit::AstNodeEdit},
};
use crate::{
@@ -111,9 +112,8 @@ pub(crate) fn generate_single_field_struct_from(
false,
false,
)
- .clone_for_update();
+ .indent(1.into());
- fn_.indent(1.into());
let cfg_attrs = strukt
.attrs()
.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(
make::ty("From"),
ty.clone(),
None,
- ty_where_clause.map(|wc| edit::AstNodeEdit::reset_indent(&wc)),
+ ty_where_clause.map(|wc| wc.reset_indent()),
None,
)
.clone_for_update();
impl_.get_or_create_assoc_item_list().add_item(fn_.into());
+ let impl_ = impl_.indent(indent);
+
+ let mut edit = builder.make_editor(strukt.syntax());
- impl_.reindent_to(indent);
+ edit.insert_all(
+ Position::after(strukt.syntax()),
+ vec![
+ make::tokens::whitespace(&format!("\n\n{indent}")).syntax_element(),
+ impl_.syntax().syntax_element(),
+ ],
+ );
- builder.insert(strukt.syntax().text_range().end(), format!("\n\n{indent}{impl_}"));
+ builder.add_file_edits(ctx.vfs_file_id(), edit);
},
)
}
@@ -169,7 +178,7 @@ fn make_constructors(
types: &[ast::Type],
) -> Vec<Option<ast::Expr>> {
let (db, sema) = (ctx.db(), &ctx.sema);
- let cfg = ctx.config.find_path_confg(ctx.sema.is_nightly(module.krate()));
+ let cfg = ctx.config.find_path_config(ctx.sema.is_nightly(module.krate()));
types
.iter()
.map(|ty| {
@@ -211,7 +220,7 @@ fn from_impl_exists(
let strukt = sema.to_def(strukt)?;
let krate = strukt.krate(db);
let from_trait = FamousDefs(sema, krate).core_convert_From()?;
- let interner = DbInterner::new_with(db, Some(krate.base()), None);
+ let interner = DbInterner::new_with(db, krate.base());
use hir::next_solver::infer::DbInternerInferExt;
let infcx = interner.infer_ctxt().build(TypingMode::non_body_analysis());