From 759f8c83e53bb72804cb4c578a01b09fc2dcf4fa Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Sat, 13 Mar 2021 00:34:01 +0100 Subject: Make `ItemTreeId` its own type --- crates/hir_def/src/item_tree.rs | 42 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'crates/hir_def/src/item_tree.rs') diff --git a/crates/hir_def/src/item_tree.rs b/crates/hir_def/src/item_tree.rs index 90df3d929..8383780e0 100644 --- a/crates/hir_def/src/item_tree.rs +++ b/crates/hir_def/src/item_tree.rs @@ -401,7 +401,47 @@ impl fmt::Debug for FileItemTreeId { } } -pub type ItemTreeId = InFile>; +#[derive(Debug)] +pub struct ItemTreeId { + file: HirFileId, + pub value: FileItemTreeId, +} + +impl ItemTreeId { + pub fn new(file: HirFileId, idx: FileItemTreeId) -> Self { + Self { file, value: idx } + } + + pub fn file_id(self) -> HirFileId { + self.file + } + + pub fn item_tree(self, db: &dyn DefDatabase) -> Arc { + db.item_tree(self.file) + } +} + +impl Copy for ItemTreeId {} +impl Clone for ItemTreeId { + fn clone(&self) -> Self { + *self + } +} + +impl PartialEq for ItemTreeId { + fn eq(&self, other: &Self) -> bool { + self.file == other.file && self.value == other.value + } +} + +impl Eq for ItemTreeId {} + +impl Hash for ItemTreeId { + fn hash(&self, state: &mut H) { + self.file.hash(state); + self.value.hash(state); + } +} macro_rules! mod_items { ( $( $typ:ident in $fld:ident -> $ast:ty ),+ $(,)? ) => { -- cgit v1.2.3