Skip to content

Commit 63d2f35

Browse files
committed
fix: fix 'introduce_named_generic' for impl inside types
1 parent 19387d3 commit 63d2f35

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

crates/ide-assists/src/handlers/introduce_named_generic.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use crate::{utils::suggest_name, AssistContext, AssistId, AssistKind, Assists};
1818
// ```
1919
pub(crate) fn introduce_named_generic(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> {
2020
let impl_trait_type = ctx.find_node_at_offset::<ast::ImplTraitType>()?;
21-
let param = impl_trait_type.syntax().parent().and_then(ast::Param::cast)?;
21+
let param = impl_trait_type.syntax().ancestors().find_map(|node| ast::Param::cast(node))?;
2222
let fn_ = param.syntax().ancestors().find_map(ast::Fn::cast)?;
2323

2424
let type_bound_list = impl_trait_type.type_bound_list()?;
@@ -149,4 +149,22 @@ fn foo<
149149
r#"fn foo<$0F: Foo + Bar>(bar: F) {}"#,
150150
);
151151
}
152+
153+
#[test]
154+
fn replace_impl_with_mut() {
155+
check_assist(
156+
introduce_named_generic,
157+
r#"fn f(iter: &mut $0impl Iterator<Item = i32>) {}"#,
158+
r#"fn f<$0I: Iterator<Item = i32>>(iter: &mut I) {}"#,
159+
);
160+
}
161+
162+
#[test]
163+
fn replace_impl_inside() {
164+
check_assist(
165+
introduce_named_generic,
166+
r#"fn f(x: &mut Vec<$0impl Iterator<Item = i32>>) {}"#,
167+
r#"fn f<$0I: Iterator<Item = i32>>(x: &mut Vec<I>) {}"#,
168+
);
169+
}
152170
}

0 commit comments

Comments
 (0)