Unnamed repository; edit this file 'description' to name the repository.
fix flyimport showing other types in `impl` trait statement
dfireBird 2024-02-13
parent 9897662 · commit 0e47bef
-rw-r--r--crates/ide-completion/src/completions/flyimport.rs2
-rw-r--r--crates/ide-completion/src/tests/flyimport.rs19
2 files changed, 21 insertions, 0 deletions
diff --git a/crates/ide-completion/src/completions/flyimport.rs b/crates/ide-completion/src/completions/flyimport.rs
index b9f91d34b2..1c6cbf713b 100644
--- a/crates/ide-completion/src/completions/flyimport.rs
+++ b/crates/ide-completion/src/completions/flyimport.rs
@@ -238,6 +238,8 @@ fn import_on_the_fly(
(PathKind::Type { location }, ItemInNs::Types(ty)) => {
if matches!(location, TypeLocation::TypeBound) {
matches!(ty, ModuleDef::Trait(_))
+ } else if matches!(location, TypeLocation::ImplTrait) {
+ matches!(ty, ModuleDef::Trait(_)) || matches!(ty, ModuleDef::Module(_))
} else {
true
}
diff --git a/crates/ide-completion/src/tests/flyimport.rs b/crates/ide-completion/src/tests/flyimport.rs
index eaa1bebc03..fff193ba4c 100644
--- a/crates/ide-completion/src/tests/flyimport.rs
+++ b/crates/ide-completion/src/tests/flyimport.rs
@@ -1397,3 +1397,22 @@ pub use bridge2::server2::Span2;
"#]],
);
}
+
+#[test]
+fn flyimport_only_traits_in_impl_trait_block() {
+ check(
+ r#"
+//- /main.rs crate:main deps:dep
+pub struct Bar;
+
+impl Foo$0 for Bar { }
+//- /lib.rs crate:dep
+pub trait FooTrait;
+
+pub struct FooStruct;
+"#,
+ expect![[r#"
+ tt FooTrait (use dep::FooTrait)
+ "#]],
+ );
+}