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.rs39
1 files changed, 18 insertions, 21 deletions
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index c07c017c3d..8b99662685 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
@@ -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 {
@@ -2222,7 +2224,7 @@ impl BuiltinAttr {
Some(BuiltinAttr { krate: Some(krate.id), idx })
}
- pub(crate) fn builtin(name: &str) -> Option<Self> {
+ fn builtin(name: &str) -> Option<Self> {
hir_def::builtin_attr::INERT_ATTRIBUTES
.iter()
.position(|tool| tool.name == name)
@@ -2261,7 +2263,7 @@ impl ToolModule {
Some(ToolModule { krate: Some(krate.id), idx })
}
- pub(crate) fn builtin(name: &str) -> Option<Self> {
+ fn builtin(name: &str) -> Option<Self> {
hir_def::builtin_attr::TOOL_MODULES
.iter()
.position(|&tool| tool == name)
@@ -2611,14 +2613,11 @@ pub struct Type {
}
impl Type {
- pub(crate) fn new_with_resolver(
- db: &dyn HirDatabase,
- resolver: &Resolver,
- ty: Ty,
- ) -> Option<Type> {
- let krate = resolver.krate()?;
- Some(Type::new_with_resolver_inner(db, krate, resolver, ty))
+ pub(crate) fn new_with_resolver(db: &dyn HirDatabase, resolver: &Resolver, ty: Ty) -> Type {
+ let krate = resolver.krate();
+ Type::new_with_resolver_inner(db, krate, resolver, ty)
}
+
pub(crate) fn new_with_resolver_inner(
db: &dyn HirDatabase,
krate: CrateId,
@@ -2631,6 +2630,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(
@@ -3031,10 +3034,7 @@ impl Type {
// There should be no inference vars in types passed here
let canonical = hir_ty::replace_errors_with_variables(&self.ty);
- let krate = match scope.krate() {
- Some(k) => k,
- None => return,
- };
+ let krate = scope.krate();
let environment = scope.resolver().generic_def().map_or_else(
|| Arc::new(TraitEnvironment::empty(krate.id)),
|d| db.trait_environment(d),
@@ -3091,10 +3091,7 @@ impl Type {
) {
let canonical = hir_ty::replace_errors_with_variables(&self.ty);
- let krate = match scope.krate() {
- Some(k) => k,
- None => return,
- };
+ let krate = scope.krate();
let environment = scope.resolver().generic_def().map_or_else(
|| Arc::new(TraitEnvironment::empty(krate.id)),
|d| db.trait_environment(d),