Auto merge of #17270 - davidbarsky:david/fix-completions-from-associa… · rust-lang/rust@ac2708a

Original file line numberDiff line numberDiff line change

@@ -3,7 +3,7 @@

33

use hir::{

44

db::HirDatabase, AsAssocItem, AssocItem, AssocItemContainer, Crate, HasCrate, ImportPathConfig,

55

ItemInNs, ModPath, Module, ModuleDef, Name, PathResolution, PrefixKind, ScopeDef, Semantics,

6-

SemanticsScope, Trait, Type,

6+

SemanticsScope, Trait, TyFingerprint, Type,

77

};

88

use itertools::{EitherOrBoth, Itertools};

99

use rustc_hash::{FxHashMap, FxHashSet};

@@ -545,6 +545,15 @@ fn trait_applicable_items(

545545

let Some(receiver) = trait_candidate.receiver_ty.fingerprint_for_trait_impl() else {

546546

return false;

547547

};

548+
549+

// in order to handle implied bounds through an associated type, keep any

550+

// method receiver that matches `TyFingerprint::Unnameable`. this receiver

551+

// won't be in `TraitImpls` anyways, as `TraitImpls` only contains actual

552+

// implementations.

553+

if matches!(receiver, TyFingerprint::Unnameable) {

554+

return true;

555+

}

556+
548557

let definitions_exist_in_trait_crate = db

549558

.trait_impls_in_crate(defining_crate_for_trait.into())

550559

.has_impls_for_trait_and_self_ty(candidate_trait_id, receiver);