@@ -318,7 +318,7 @@ pub struct FindUsages<'a> {
318318impl < ' a > FindUsages < ' a > {
319319 /// Enable searching for `Self` when the definition is a type.
320320 pub fn include_self_refs ( mut self ) -> FindUsages < ' a > {
321- self . include_self_kw_refs = def_to_ty ( self . sema . db , self . def ) ;
321+ self . include_self_kw_refs = def_to_ty ( self . sema , self . def ) ;
322322 self
323323 }
324324
@@ -474,7 +474,7 @@ impl<'a> FindUsages<'a> {
474474 sink ( file_id, reference)
475475 }
476476 Some ( NameRefClass :: Definition ( def) ) if self . include_self_kw_refs . is_some ( ) => {
477- if self . include_self_kw_refs == def_to_ty ( self . sema . db , & def) {
477+ if self . include_self_kw_refs == def_to_ty ( self . sema , & def) {
478478 let FileRange { file_id, range } = self . sema . original_range ( name_ref. syntax ( ) ) ;
479479 let reference = FileReference {
480480 range,
@@ -536,16 +536,22 @@ impl<'a> FindUsages<'a> {
536536 }
537537}
538538
539- fn def_to_ty ( db : & RootDatabase , def : & Definition ) -> Option < hir:: Type > {
539+ fn def_to_ty ( sema : & Semantics < RootDatabase > , def : & Definition ) -> Option < hir:: Type > {
540540 match def {
541541 Definition :: ModuleDef ( def) => match def {
542- ModuleDef :: Adt ( adt) => Some ( adt. ty ( db) ) ,
543- ModuleDef :: TypeAlias ( it) => Some ( it. ty ( db) ) ,
544- ModuleDef :: BuiltinType ( _it) => None , // FIXME somehow acquire some module to construct the builtin type
545- ModuleDef :: Trait ( _it) => None , // FIXME turn trait into its self-type
542+ ModuleDef :: Adt ( adt) => Some ( adt. ty ( sema. db ) ) ,
543+ ModuleDef :: TypeAlias ( it) => Some ( it. ty ( sema. db ) ) ,
544+ ModuleDef :: BuiltinType ( it) => {
545+ let graph = sema. db . crate_graph ( ) ;
546+ let krate = graph. iter ( ) . next ( ) ?;
547+ let root_file = graph[ krate] . root_file_id ;
548+ let module = sema. to_module_def ( root_file) ?;
549+ Some ( it. ty ( sema. db , module) )
550+ }
551+ ModuleDef :: Trait ( _it) => None , // FIXME turn trait into its self-type
546552 _ => None ,
547553 } ,
548- Definition :: SelfType ( it) => Some ( it. self_ty ( db) ) ,
554+ Definition :: SelfType ( it) => Some ( it. self_ty ( sema . db ) ) ,
549555 _ => None ,
550556 }
551557}
0 commit comments