Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/lib.rs')
-rw-r--r--crates/hir-def/src/lib.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/crates/hir-def/src/lib.rs b/crates/hir-def/src/lib.rs
index 88d4572196..682d169adb 100644
--- a/crates/hir-def/src/lib.rs
+++ b/crates/hir-def/src/lib.rs
@@ -106,6 +106,18 @@ use crate::{
},
};
+type FxIndexMap<K, V> =
+ indexmap::IndexMap<K, V, std::hash::BuildHasherDefault<rustc_hash::FxHasher>>;
+/// A wrapper around two booleans, [`ImportPathConfig::prefer_no_std`] and [`ImportPathConfig::prefer_prelude`].
+#[derive(Debug, Clone, PartialEq, Eq, Hash, Copy)]
+pub struct ImportPathConfig {
+ /// If true, prefer to unconditionally use imports of the `core` and `alloc` crate
+ /// over the std.
+ pub prefer_no_std: bool,
+ /// If true, prefer import paths containing a prelude module.
+ pub prefer_prelude: bool,
+}
+
#[derive(Debug)]
pub struct ItemLoc<N: ItemTreeNode> {
pub container: ModuleId,
@@ -455,6 +467,26 @@ impl ModuleId {
pub fn is_block_module(self) -> bool {
self.block.is_some() && self.local_id == DefMap::ROOT
}
+
+ pub fn is_within_block(self) -> bool {
+ self.block.is_some()
+ }
+
+ pub fn as_crate_root(&self) -> Option<CrateRootModuleId> {
+ if self.local_id == DefMap::ROOT && self.block.is_none() {
+ Some(CrateRootModuleId { krate: self.krate })
+ } else {
+ None
+ }
+ }
+
+ pub fn derive_crate_root(&self) -> CrateRootModuleId {
+ CrateRootModuleId { krate: self.krate }
+ }
+
+ fn is_crate_root(&self) -> bool {
+ self.local_id == DefMap::ROOT && self.block.is_none()
+ }
}
impl PartialEq<CrateRootModuleId> for ModuleId {