Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/visibility.rs')
-rw-r--r--crates/hir-def/src/visibility.rs30
1 files changed, 17 insertions, 13 deletions
diff --git a/crates/hir-def/src/visibility.rs b/crates/hir-def/src/visibility.rs
index 632aa1b352..317be3432a 100644
--- a/crates/hir-def/src/visibility.rs
+++ b/crates/hir-def/src/visibility.rs
@@ -8,8 +8,8 @@ use la_arena::ArenaMap;
use syntax::ast::{self, HasVisibility};
use crate::{
- AssocItemId, HasModule, ItemContainerId, LocalFieldId, ModuleId, TraitId, VariantId,
- nameres::DefMap, resolver::HasResolver, signatures::VariantFields, src::HasSource,
+ AssocItemId, HasModule, ItemContainerId, LocalFieldId, ModuleId, ModuleIdLt, TraitId,
+ VariantId, nameres::DefMap, resolver::HasResolver, signatures::VariantFields, src::HasSource,
};
pub use crate::item_tree::{RawVisibility, VisibilityExplicitness};
@@ -40,9 +40,13 @@ impl Visibility {
}
#[tracing::instrument(skip_all)]
- pub fn is_visible_from(self, db: &dyn SourceDatabase, from_module: ModuleId) -> bool {
+ pub fn is_visible_from<'db>(
+ self,
+ db: &'db dyn SourceDatabase,
+ from_module: ModuleIdLt<'db>,
+ ) -> bool {
let to_module = match self {
- Visibility::Module(m, _) => m,
+ Visibility::Module(m, _) => unsafe { m.to_db(db) },
Visibility::PubCrate(krate) => return from_module.krate(db) == krate,
Visibility::Public => return true,
};
@@ -58,11 +62,11 @@ impl Visibility {
Self::is_visible_from_def_map_(db, def_map, to_module, from_module)
}
- pub(crate) fn is_visible_from_def_map(
+ pub(crate) fn is_visible_from_def_map<'db>(
self,
- db: &dyn SourceDatabase,
- def_map: &DefMap,
- from_module: ModuleId,
+ db: &'db dyn SourceDatabase,
+ def_map: &'db DefMap,
+ from_module: ModuleIdLt<'db>,
) -> bool {
if cfg!(debug_assertions) {
_ = def_map.modules[from_module];
@@ -88,11 +92,11 @@ impl Visibility {
Self::is_visible_from_def_map_(db, def_map, to_module, from_module)
}
- fn is_visible_from_def_map_(
- db: &dyn SourceDatabase,
- def_map: &DefMap,
- mut to_module: ModuleId,
- mut from_module: ModuleId,
+ fn is_visible_from_def_map_<'db>(
+ db: &'db dyn SourceDatabase,
+ def_map: &'db DefMap,
+ mut to_module: ModuleIdLt<'db>,
+ mut from_module: ModuleIdLt<'db>,
) -> bool {
debug_assert_eq!(to_module.krate(db), def_map.krate());
// `to_module` might be the root module of a block expression. Those have the same