Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/ide-completion/src/tests/flyimport.rs1
-rw-r--r--crates/ide-db/src/imports/import_assets.rs19
2 files changed, 9 insertions, 11 deletions
diff --git a/crates/ide-completion/src/tests/flyimport.rs b/crates/ide-completion/src/tests/flyimport.rs
index c58374f2e8..1af16ef857 100644
--- a/crates/ide-completion/src/tests/flyimport.rs
+++ b/crates/ide-completion/src/tests/flyimport.rs
@@ -599,6 +599,7 @@ fn main() {
expect![[r#"
fn weird_function() (use dep::test_mod::TestTrait) fn() DEPRECATED
ct SPECIAL_CONST (use dep::test_mod::TestTrait) u8 DEPRECATED
+ me random_method(…) (use dep::test_mod::TestTrait) fn(&self) DEPRECATED
"#]],
);
}
diff --git a/crates/ide-db/src/imports/import_assets.rs b/crates/ide-db/src/imports/import_assets.rs
index 9fc644d0b6..df461b219b 100644
--- a/crates/ide-db/src/imports/import_assets.rs
+++ b/crates/ide-db/src/imports/import_assets.rs
@@ -500,7 +500,7 @@ fn trait_applicable_items(
let related_traits = inherent_traits.chain(env_traits).collect::<FxHashSet<_>>();
let mut required_assoc_items = FxHashSet::default();
- let trait_candidates = items_locator::items_with_name(
+ let trait_candidates: FxHashSet<_> = items_locator::items_with_name(
sema,
current_crate,
trait_candidate.assoc_item_name.clone(),
@@ -508,15 +508,17 @@ fn trait_applicable_items(
)
.filter_map(|input| item_as_assoc(db, input))
.filter_map(|assoc| {
+ if !trait_assoc_item && matches!(assoc, AssocItem::Const(_) | AssocItem::TypeAlias(_)) {
+ return None;
+ }
+
let assoc_item_trait = assoc.containing_trait(db)?;
if related_traits.contains(&assoc_item_trait) {
- None
- } else {
- required_assoc_items.insert(assoc);
- Some(assoc_item_trait.into())
+ return None;
}
+ required_assoc_items.insert(assoc);
+ Some(assoc_item_trait.into())
})
- .take(DEFAULT_QUERY_SEARCH_LIMIT.inner())
.collect();
let mut located_imports = FxHashSet::default();
@@ -531,11 +533,6 @@ fn trait_applicable_items(
None,
|assoc| {
if required_assoc_items.contains(&assoc) {
- if let AssocItem::Function(f) = assoc {
- if f.self_param(db).is_some() {
- return None;
- }
- }
let located_trait = assoc.containing_trait(db)?;
let trait_item = ItemInNs::from(ModuleDef::from(located_trait));
let import_path = trait_import_paths