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.rs | 70 |
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) } |