Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #22148 from A4-Tacks/filter-default-bounds
minor: filter default bounds for introduce_named_type_parameter
| -rw-r--r-- | crates/ide-assists/src/handlers/introduce_named_type_parameter.rs | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/crates/ide-assists/src/handlers/introduce_named_type_parameter.rs b/crates/ide-assists/src/handlers/introduce_named_type_parameter.rs index 95f223420b..c8ae13a833 100644 --- a/crates/ide-assists/src/handlers/introduce_named_type_parameter.rs +++ b/crates/ide-assists/src/handlers/introduce_named_type_parameter.rs @@ -48,7 +48,8 @@ pub(crate) fn introduce_named_type_parameter( ) .for_impl_trait_as_generic(&impl_trait_type); - let type_param = make.type_param(make.name(&type_param_name), Some(type_bound_list)); + let type_bound_list = non_default_bounds(&type_bound_list).then_some(type_bound_list); + let type_param = make.type_param(make.name(&type_param_name), type_bound_list); let new_ty = make.ty(&type_param_name); editor.replace(impl_trait_type.syntax(), new_ty.syntax()); @@ -63,6 +64,10 @@ pub(crate) fn introduce_named_type_parameter( ) } +fn non_default_bounds(bounds: &ast::TypeBoundList) -> bool { + bounds.bounds().collect_array().is_none_or(|[bound]| bound.syntax().text() != "Sized") +} + #[cfg(test)] mod tests { use super::*; @@ -169,6 +174,15 @@ fn foo< } #[test] + fn replace_impl_default_bounds() { + check_assist( + introduce_named_type_parameter, + r#"fn foo(bar: $0impl Sized) {}"#, + r#"fn foo<$0S>(bar: S) {}"#, + ); + } + + #[test] fn replace_impl_with_mut() { check_assist( introduce_named_type_parameter, |