Skip to content

Commit d6ed315

Browse files
Merge #9017
9017: internal: Reduce the number of traits passed through chalk during applicable trait lookup r=SomeoneToIgnore a=SomeoneToIgnore Inherent traits can be omitted before trait solving, presumably slightly helping #7542 and slightly simplifying the code. Co-authored-by: Kirill Bulatov <[email protected]>
2 parents 7624729 + 050c592 commit d6ed315

File tree

1 file changed

+8
-11
lines changed

1 file changed

+8
-11
lines changed

crates/ide_db/src/helpers/import_assets.rs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,8 @@ fn trait_applicable_items(
420420

421421
let db = sema.db;
422422

423+
let related_dyn_traits =
424+
trait_candidate.receiver_ty.applicable_inherent_traits(db).collect::<FxHashSet<_>>();
423425
let mut required_assoc_items = FxHashSet::default();
424426
let trait_candidates = items_locator::items_with_name(
425427
sema,
@@ -431,13 +433,15 @@ fn trait_applicable_items(
431433
.filter_map(|input| item_as_assoc(db, input))
432434
.filter_map(|assoc| {
433435
let assoc_item_trait = assoc.containing_trait(db)?;
434-
required_assoc_items.insert(assoc);
435-
Some(assoc_item_trait.into())
436+
if related_dyn_traits.contains(&assoc_item_trait) {
437+
None
438+
} else {
439+
required_assoc_items.insert(assoc);
440+
Some(assoc_item_trait.into())
441+
}
436442
})
437443
.collect();
438444

439-
let related_dyn_traits =
440-
trait_candidate.receiver_ty.applicable_inherent_traits(db).collect::<FxHashSet<_>>();
441445
let mut located_imports = FxHashSet::default();
442446

443447
if trait_assoc_item {
@@ -454,10 +458,6 @@ fn trait_applicable_items(
454458
}
455459
}
456460
let located_trait = assoc.containing_trait(db)?;
457-
if related_dyn_traits.contains(&located_trait) {
458-
return None;
459-
}
460-
461461
let trait_item = ItemInNs::from(ModuleDef::from(located_trait));
462462
let original_item = assoc_to_item(assoc);
463463
located_imports.insert(LocatedImport::new(
@@ -480,9 +480,6 @@ fn trait_applicable_items(
480480
let assoc = function.as_assoc_item(db)?;
481481
if required_assoc_items.contains(&assoc) {
482482
let located_trait = assoc.containing_trait(db)?;
483-
if related_dyn_traits.contains(&located_trait) {
484-
return None;
485-
}
486483
let trait_item = ItemInNs::from(ModuleDef::from(located_trait));
487484
let original_item = assoc_to_item(assoc);
488485
located_imports.insert(LocatedImport::new(

0 commit comments

Comments
 (0)