Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/per_ns.rs')
-rw-r--r--crates/hir-def/src/per_ns.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/crates/hir-def/src/per_ns.rs b/crates/hir-def/src/per_ns.rs
index 19485c476f..3f3b98c6b5 100644
--- a/crates/hir-def/src/per_ns.rs
+++ b/crates/hir-def/src/per_ns.rs
@@ -3,6 +3,8 @@
//!
//! `PerNs` (per namespace) captures this.
+use bitflags::bitflags;
+
use crate::{
item_scope::{ImportId, ImportOrExternCrate, ItemInNs},
visibility::Visibility,
@@ -16,6 +18,16 @@ pub enum Namespace {
Macros,
}
+bitflags! {
+ /// Describes only the presence/absence of each namespace, without its value.
+ #[derive(Debug, PartialEq, Eq)]
+ pub(crate) struct NsAvailability : u32 {
+ const TYPES = 1 << 0;
+ const VALUES = 1 << 1;
+ const MACROS = 1 << 2;
+ }
+}
+
#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
pub struct PerNs {
pub types: Option<(ModuleDefId, Visibility, Option<ImportOrExternCrate>)>,
@@ -24,6 +36,14 @@ pub struct PerNs {
}
impl PerNs {
+ pub(crate) fn availability(&self) -> NsAvailability {
+ let mut result = NsAvailability::empty();
+ result.set(NsAvailability::TYPES, self.types.is_some());
+ result.set(NsAvailability::VALUES, self.values.is_some());
+ result.set(NsAvailability::MACROS, self.macros.is_some());
+ result
+ }
+
pub fn none() -> PerNs {
PerNs { types: None, values: None, macros: None }
}