Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/generate_delegate_trait.rs')
-rw-r--r--crates/ide-assists/src/handlers/generate_delegate_trait.rs70
1 files changed, 32 insertions, 38 deletions
diff --git a/crates/ide-assists/src/handlers/generate_delegate_trait.rs b/crates/ide-assists/src/handlers/generate_delegate_trait.rs
index 339c3ac71e..154a1f59c7 100644
--- a/crates/ide-assists/src/handlers/generate_delegate_trait.rs
+++ b/crates/ide-assists/src/handlers/generate_delegate_trait.rs
@@ -88,11 +88,11 @@ pub(crate) fn generate_delegate_trait(acc: &mut Assists, ctx: &AssistContext<'_>
let strukt = Struct::new(ctx.find_node_at_offset::<ast::Struct>()?)?;
let field: Field = match ctx.find_node_at_offset::<ast::RecordField>() {
- Some(field) => Field::new(&ctx, Either::Left(field))?,
+ Some(field) => Field::new(ctx, Either::Left(field))?,
None => {
let field = ctx.find_node_at_offset::<ast::TupleField>()?;
let field_list = ctx.find_node_at_offset::<ast::TupleFieldList>()?;
- Field::new(&ctx, either::Right((field, field_list)))?
+ Field::new(ctx, either::Right((field, field_list)))?
}
};
@@ -236,7 +236,7 @@ fn generate_impl(
ctx: &AssistContext<'_>,
strukt: &Struct,
field_ty: &ast::Type,
- field_name: &String,
+ field_name: &str,
delegee: &Delegee,
) -> Option<ast::Impl> {
let delegate: ast::Impl;
@@ -270,25 +270,22 @@ fn generate_impl(
make::path_from_text(&format!("<{} as {}>", field_ty, delegate.trait_()?));
let delegate_assoc_items = delegate.get_or_create_assoc_item_list();
- match bound_def.assoc_item_list() {
- Some(ai) => {
- ai.assoc_items()
- .filter(|item| matches!(item, AssocItem::MacroCall(_)).not())
- .for_each(|item| {
- let assoc =
- process_assoc_item(item, qualified_path_type.clone(), &field_name);
- if let Some(assoc) = assoc {
- delegate_assoc_items.add_item(assoc);
- }
- });
- }
- None => {}
+ if let Some(ai) = bound_def.assoc_item_list() {
+ ai.assoc_items()
+ .filter(|item| matches!(item, AssocItem::MacroCall(_)).not())
+ .for_each(|item| {
+ let assoc =
+ process_assoc_item(item, qualified_path_type.clone(), field_name);
+ if let Some(assoc) = assoc {
+ delegate_assoc_items.add_item(assoc);
+ }
+ });
};
let target_scope = ctx.sema.scope(strukt.strukt.syntax())?;
let source_scope = ctx.sema.scope(bound_def.syntax())?;
let transform = PathTransform::generic_transformation(&target_scope, &source_scope);
- transform.apply(&delegate.syntax());
+ transform.apply(delegate.syntax());
}
Delegee::Impls(trait_, old_impl) => {
let old_impl = ctx.sema.source(old_impl.to_owned())?.value;
@@ -306,7 +303,7 @@ fn generate_impl(
let field_ty = rename_strukt_args(ctx, ast_strukt, field_ty, &args)?;
let where_clause = ast_strukt
.where_clause()
- .and_then(|wc| Some(rename_strukt_args(ctx, ast_strukt, &wc, &args)?));
+ .and_then(|wc| rename_strukt_args(ctx, ast_strukt, &wc, &args));
(field_ty, where_clause)
}
None => (field_ty.clone_for_update(), None),
@@ -323,7 +320,7 @@ fn generate_impl(
.trait_()?
.generic_arg_list()
.map(|l| l.generic_args().map(|arg| arg.to_string()))
- .map_or_else(|| FxHashSet::default(), |it| it.collect());
+ .map_or_else(FxHashSet::default, |it| it.collect());
let trait_gen_params = remove_instantiated_params(
&old_impl.self_ty()?,
@@ -345,13 +342,13 @@ fn generate_impl(
let mut trait_gen_args = old_impl.trait_()?.generic_arg_list();
if let Some(trait_args) = &mut trait_gen_args {
*trait_args = trait_args.clone_for_update();
- transform_impl(ctx, ast_strukt, &old_impl, &transform_args, &trait_args.syntax())?;
+ transform_impl(ctx, ast_strukt, &old_impl, &transform_args, trait_args.syntax())?;
}
let type_gen_args = strukt_params.clone().map(|params| params.to_generic_args());
let path_type = make::ty(&trait_.name(db).to_smol_str()).clone_for_update();
- transform_impl(ctx, ast_strukt, &old_impl, &transform_args, &path_type.syntax())?;
+ transform_impl(ctx, ast_strukt, &old_impl, &transform_args, path_type.syntax())?;
// 3) Generate delegate trait impl
delegate = make::impl_trait(
@@ -383,7 +380,7 @@ fn generate_impl(
let item = item.clone_for_update();
transform_impl(ctx, ast_strukt, &old_impl, &transform_args, item.syntax())?;
- let assoc = process_assoc_item(item, qualified_path_type.clone(), &field_name)?;
+ let assoc = process_assoc_item(item, qualified_path_type.clone(), field_name)?;
delegate_assoc_items.add_item(assoc);
}
@@ -404,8 +401,8 @@ fn transform_impl(
args: &Option<GenericArgList>,
syntax: &syntax::SyntaxNode,
) -> Option<()> {
- let source_scope = ctx.sema.scope(&old_impl.self_ty()?.syntax())?;
- let target_scope = ctx.sema.scope(&strukt.syntax())?;
+ let source_scope = ctx.sema.scope(old_impl.self_ty()?.syntax())?;
+ let target_scope = ctx.sema.scope(strukt.syntax())?;
let hir_old_impl = ctx.sema.to_impl_def(old_impl)?;
let transform = args.as_ref().map_or_else(
@@ -420,7 +417,7 @@ fn transform_impl(
},
);
- transform.apply(&syntax);
+ transform.apply(syntax);
Some(())
}
@@ -481,7 +478,7 @@ fn remove_useless_where_clauses(trait_ty: &ast::Type, self_ty: &ast::Type, wc: a
.skip(1)
.take_while(|node_or_tok| node_or_tok.kind() == SyntaxKind::WHITESPACE)
})
- .for_each(|ws| ted::remove(ws));
+ .for_each(ted::remove);
ted::insert(
ted::Position::after(wc.syntax()),
@@ -512,17 +509,14 @@ fn generate_args_for_impl(
// form the substitution list
let mut arg_substs = FxHashMap::default();
- match field_ty {
- field_ty @ ast::Type::PathType(_) => {
- let field_args = field_ty.generic_arg_list().map(|gal| gal.generic_args());
- let self_ty_args = self_ty.generic_arg_list().map(|gal| gal.generic_args());
- if let (Some(field_args), Some(self_ty_args)) = (field_args, self_ty_args) {
- self_ty_args.zip(field_args).for_each(|(self_ty_arg, field_arg)| {
- arg_substs.entry(self_ty_arg.to_string()).or_insert(field_arg);
- })
- }
+ if let field_ty @ ast::Type::PathType(_) = field_ty {
+ let field_args = field_ty.generic_arg_list().map(|gal| gal.generic_args());
+ let self_ty_args = self_ty.generic_arg_list().map(|gal| gal.generic_args());
+ if let (Some(field_args), Some(self_ty_args)) = (field_args, self_ty_args) {
+ self_ty_args.zip(field_args).for_each(|(self_ty_arg, field_arg)| {
+ arg_substs.entry(self_ty_arg.to_string()).or_insert(field_arg);
+ })
}
- _ => {}
}
let args = old_impl_args
@@ -539,7 +533,7 @@ fn generate_args_for_impl(
)
})
.collect_vec();
- args.is_empty().not().then(|| make::generic_arg_list(args.into_iter()))
+ args.is_empty().not().then(|| make::generic_arg_list(args))
}
fn rename_strukt_args<N>(
@@ -558,7 +552,7 @@ where
let scope = ctx.sema.scope(item.syntax())?;
let transform = PathTransform::adt_transformation(&scope, &scope, hir_adt, args.clone());
- transform.apply(&item.syntax());
+ transform.apply(item.syntax());
Some(item)
}