Add generic parameters for manual impl assist

The `impl_trait` function takes an optional `GenericParamList` to create
the trait impl.
This commit is contained in:
TheDoctor314 2021-11-08 21:19:22 +05:30
parent 4f93fa1213
commit 05b368f065
2 changed files with 13 additions and 5 deletions

View file

@ -3,7 +3,7 @@ use ide_db::helpers::{import_assets::NameToImport, mod_path_to_ast};
use ide_db::items_locator; use ide_db::items_locator;
use itertools::Itertools; use itertools::Itertools;
use syntax::{ use syntax::{
ast::{self, make, AstNode, HasName}, ast::{self, make, AstNode, HasGenericParams, HasName},
SyntaxKind::{IDENT, WHITESPACE}, SyntaxKind::{IDENT, WHITESPACE},
}; };
@ -160,8 +160,11 @@ fn impl_def_from_trait(
if trait_items.is_empty() { if trait_items.is_empty() {
return None; return None;
} }
let impl_def = let impl_def = make::impl_trait(
make::impl_trait(trait_path.clone(), make::ext::ident_path(&annotated_name.text())); trait_path.clone(),
make::ext::ident_path(&annotated_name.text()),
adt.generic_param_list(),
);
let (impl_def, first_assoc_item) = let (impl_def, first_assoc_item) =
add_trait_assoc_items_to_impl(sema, trait_items, trait_, impl_def, target_scope); add_trait_assoc_items_to_impl(sema, trait_items, trait_, impl_def, target_scope);

View file

@ -149,8 +149,13 @@ pub fn impl_(
ast_from_text(&format!("impl{} {}{} {{}}", params, ty, ty_params)) ast_from_text(&format!("impl{} {}{} {{}}", params, ty, ty_params))
} }
pub fn impl_trait(trait_: ast::Path, ty: ast::Path) -> ast::Impl { pub fn impl_trait(
ast_from_text(&format!("impl {} for {} {{}}", trait_, ty)) trait_: ast::Path,
ty: ast::Path,
ty_params: Option<ast::GenericParamList>,
) -> ast::Impl {
let ty_params = ty_params.map_or_else(String::new, |params| params.to_string());
ast_from_text(&format!("impl{2} {} for {}{2} {{}}", trait_, ty, ty_params))
} }
pub(crate) fn generic_arg_list() -> ast::GenericArgList { pub(crate) fn generic_arg_list() -> ast::GenericArgList {