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 | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/crates/ide-assists/src/handlers/generate_delegate_trait.rs b/crates/ide-assists/src/handlers/generate_delegate_trait.rs index 6639f10c1f..e21f1ab359 100644 --- a/crates/ide-assists/src/handlers/generate_delegate_trait.rs +++ b/crates/ide-assists/src/handlers/generate_delegate_trait.rs @@ -86,7 +86,10 @@ use syntax::{ // } // } // ``` -pub(crate) fn generate_delegate_trait(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> { +pub(crate) fn generate_delegate_trait( + acc: &mut Assists, + ctx: &AssistContext<'_, '_>, +) -> Option<()> { if !ctx.config.code_action_grouping { return None; } @@ -118,7 +121,7 @@ struct Field { impl Field { pub(crate) fn new( - ctx: &AssistContext<'_>, + ctx: &AssistContext<'_, '_>, f: Either<ast::RecordField, (ast::TupleField, ast::TupleFieldList)>, ) -> Option<Field> { let db = ctx.sema.db; @@ -202,7 +205,7 @@ impl Struct { Some(Struct { name, strukt: s }) } - pub(crate) fn delegate(&self, field: Field, acc: &mut Assists, ctx: &AssistContext<'_>) { + pub(crate) fn delegate(&self, field: Field, acc: &mut Assists, ctx: &AssistContext<'_, '_>) { let db = ctx.db(); for (index, delegee) in field.impls.iter().enumerate() { @@ -249,7 +252,7 @@ impl Struct { } fn generate_impl( - ctx: &AssistContext<'_>, + ctx: &AssistContext<'_, '_>, strukt: &Struct, field_ty: &ast::Type, field_name: &str, @@ -271,9 +274,9 @@ fn generate_impl( None, delegee.is_unsafe(db), bound_params.clone(), - bound_params.map(|params| params.to_generic_args()), + bound_params.map(|params| params.to_generic_args(&make)), strukt_params.clone(), - strukt_params.map(|params| params.to_generic_args()), + strukt_params.map(|params| params.to_generic_args(&make)), delegee.is_auto(db), make.ty(&delegee.name(db).display_no_db(edition).to_smolstr()), strukt_ty, @@ -315,7 +318,7 @@ fn generate_impl( let strukt_params = resolve_name_conflicts(strukt_params, &old_impl_params); let (field_ty, ty_where_clause) = match &strukt_params { Some(strukt_params) => { - let args = strukt_params.to_generic_args(); + let args = strukt_params.to_generic_args(&make); let field_ty = rename_strukt_args(ctx, ast_strukt, field_ty, &args)?; let where_clause = ast_strukt .where_clause() @@ -346,6 +349,7 @@ fn generate_impl( // 2.2) Generate generic args applied on impl. let (transform_args, trait_gen_params) = generate_args_for_impl( + &make, old_impl_params, &old_impl.self_ty()?, &field_ty, @@ -372,7 +376,7 @@ fn generate_impl( } }); - let type_gen_args = strukt_params.clone().map(|params| params.to_generic_args()); + let type_gen_args = strukt_params.clone().map(|params| params.to_generic_args(&make)); let path_type = make.ty(&trait_.name(db).display_no_db(edition).to_smolstr()); let path_type = transform_impl(ctx, ast_strukt, &old_impl, &transform_args, path_type)?; // 3) Generate delegate trait impl @@ -412,7 +416,7 @@ fn generate_impl( } fn transform_impl<N: ast::AstNode>( - ctx: &AssistContext<'_>, + ctx: &AssistContext<'_, '_>, strukt: &ast::Struct, old_impl: &ast::Impl, args: &Option<GenericArgList>, @@ -590,13 +594,15 @@ fn finalize_delegate( // While the last two generic args `B` and `C` doesn't change, it remains // `<B, C>`. So we apply `<T, B, C>` as generic arguments to impl. fn generate_args_for_impl( + make: &SyntaxFactory, old_impl_gpl: Option<GenericParamList>, self_ty: &ast::Type, field_ty: &ast::Type, trait_params: Option<GenericParamList>, old_trait_args: &FxHashSet<String>, ) -> (Option<ast::GenericArgList>, Option<GenericParamList>) { - let Some(old_impl_args) = old_impl_gpl.map(|gpl| gpl.to_generic_args().generic_args()) else { + let Some(old_impl_args) = old_impl_gpl.map(|gpl| gpl.to_generic_args(make).generic_args()) + else { return (None, trait_params); }; @@ -638,7 +644,7 @@ fn generate_args_for_impl( } fn rename_strukt_args<N>( - ctx: &AssistContext<'_>, + ctx: &AssistContext<'_, '_>, strukt: &ast::Struct, item: &N, args: &GenericArgList, @@ -654,7 +660,7 @@ where N::cast(transform.apply(item.syntax())) } -fn has_self_type(trait_: hir::Trait, ctx: &AssistContext<'_>) -> bool { +fn has_self_type(trait_: hir::Trait, ctx: &AssistContext<'_, '_>) -> bool { ctx.sema .source(trait_) .and_then(|src| { |