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.rs | 39 |
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), |