Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/lib.rs')
-rw-r--r--crates/hir/src/lib.rs17
1 files changed, 12 insertions, 5 deletions
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index c07c017c3d..171131c99e 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -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(