Skip to content

Commit 04717b9

Browse files
committed
Fix builtintype def_to_ty
1 parent 41f470f commit 04717b9

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

crates/ide_db/src/search.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ pub struct FindUsages<'a> {
318318
impl<'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

Comments
 (0)