internal: Refactor FamousDefs builtin crate search

This commit is contained in:
Lukas Wirth 2022-03-26 21:22:35 +01:00
parent 259182b50b
commit ef92453dfe
16 changed files with 146 additions and 105 deletions

View file

@ -148,6 +148,10 @@ impl Crate {
db.crate_graph()[self.id].origin.clone()
}
pub fn is_builtin(self, db: &dyn HirDatabase) -> bool {
matches!(self.origin(db), CrateOrigin::Lang(_))
}
pub fn dependencies(self, db: &dyn HirDatabase) -> Vec<CrateDependency> {
db.crate_graph()[self.id]
.dependencies
@ -155,7 +159,7 @@ impl Crate {
.map(|dep| {
let krate = Crate { id: dep.crate_id };
let name = dep.as_name();
CrateDependency { krate, name }
CrateDependency { krate, name, }
})
.collect()
}
@ -1741,10 +1745,8 @@ impl BuiltinType {
BuiltinType { inner: hir_def::builtin_type::BuiltinType::Str }
}
pub fn ty(self, db: &dyn HirDatabase, module: Module) -> Type {
let resolver = module.id.resolver(db.upcast());
Type::new_with_resolver(db, &resolver, TyBuilder::builtin(self.inner))
.expect("crate not present in resolver")
pub fn ty(self, db: &dyn HirDatabase) -> Type {
Type::new_for_crate(db.crate_graph().iter().next().unwrap(), TyBuilder::builtin(self.inner))
}
pub fn name(self) -> Name {
@ -2619,6 +2621,7 @@ impl Type {
let krate = resolver.krate()?;
Some(Type::new_with_resolver_inner(db, krate, resolver, ty))
}
pub(crate) fn new_with_resolver_inner(
db: &dyn HirDatabase,
krate: CrateId,
@ -2631,6 +2634,10 @@ impl Type {
Type { krate, env: environment, ty }
}
pub(crate) fn new_for_crate(krate: CrateId, ty: Ty) -> Type {
Type { krate, env: Arc::new(TraitEnvironment::empty(krate)), ty }
}
pub fn reference(inner: &Type, m: Mutability) -> Type {
inner.derived(
TyKind::Ref(