@@ -500,23 +500,25 @@ fn trait_applicable_items(
500500 let related_traits = inherent_traits. chain ( env_traits) . collect :: < FxHashSet < _ > > ( ) ;
501501
502502 let mut required_assoc_items = FxHashSet :: default ( ) ;
503- let trait_candidates = items_locator:: items_with_name (
503+ let trait_candidates: FxHashSet < _ > = items_locator:: items_with_name (
504504 sema,
505505 current_crate,
506506 trait_candidate. assoc_item_name . clone ( ) ,
507507 AssocSearchMode :: AssocItemsOnly ,
508508 )
509509 . filter_map ( |input| item_as_assoc ( db, input) )
510510 . filter_map ( |assoc| {
511+ if !trait_assoc_item && matches ! ( assoc, AssocItem :: Const ( _) | AssocItem :: TypeAlias ( _) ) {
512+ return None ;
513+ }
514+
511515 let assoc_item_trait = assoc. containing_trait ( db) ?;
512516 if related_traits. contains ( & assoc_item_trait) {
513- None
514- } else {
515- required_assoc_items. insert ( assoc) ;
516- Some ( assoc_item_trait. into ( ) )
517+ return None ;
517518 }
519+ required_assoc_items. insert ( assoc) ;
520+ Some ( assoc_item_trait. into ( ) )
518521 } )
519- . take ( DEFAULT_QUERY_SEARCH_LIMIT . inner ( ) )
520522 . collect ( ) ;
521523
522524 let mut located_imports = FxHashSet :: default ( ) ;
@@ -531,11 +533,6 @@ fn trait_applicable_items(
531533 None ,
532534 |assoc| {
533535 if required_assoc_items. contains ( & assoc) {
534- if let AssocItem :: Function ( f) = assoc {
535- if f. self_param ( db) . is_some ( ) {
536- return None ;
537- }
538- }
539536 let located_trait = assoc. containing_trait ( db) ?;
540537 let trait_item = ItemInNs :: from ( ModuleDef :: from ( located_trait) ) ;
541538 let import_path = trait_import_paths
0 commit comments