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
A4-Tacks 4 weeks ago
parent e0bdaee · parent 5e48ae4 · commit b58d6e5
-rw-r--r--crates/ide-assists/src/handlers/introduce_named_type_parameter.rs16
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,