Unnamed repository; edit this file 'description' to name the repository.
Remove `ItemTreeId`
| -rw-r--r-- | crates/hir-def/src/attr.rs | 19 | ||||
| -rw-r--r-- | crates/hir-def/src/item_tree.rs | 53 | ||||
| -rw-r--r-- | crates/hir-def/src/nameres.rs | 34 | ||||
| -rw-r--r-- | crates/hir-def/src/nameres/collector.rs | 32 |
4 files changed, 52 insertions, 86 deletions
diff --git a/crates/hir-def/src/attr.rs b/crates/hir-def/src/attr.rs index a7328809a8..cc9a2fdf4c 100644 --- a/crates/hir-def/src/attr.rs +++ b/crates/hir-def/src/attr.rs @@ -523,10 +523,15 @@ impl AttrsWithOwner { let mod_data = &def_map[module.local_id]; let raw_attrs = match mod_data.origin { - ModuleOrigin::File { definition, declaration_tree_id, .. } => { + ModuleOrigin::File { + definition, + declaration_tree_id, + file_item_tree_id, + .. + } => { let decl_attrs = declaration_tree_id .item_tree(db) - .raw_attrs(AttrOwner::ModItem(declaration_tree_id.value.into())) + .raw_attrs(AttrOwner::ModItem(file_item_tree_id.into())) .clone(); let tree = db.file_item_tree(definition.into()); let def_attrs = tree.raw_attrs(AttrOwner::TopLevel).clone(); @@ -536,10 +541,12 @@ impl AttrsWithOwner { let tree = db.file_item_tree(definition.into()); tree.raw_attrs(AttrOwner::TopLevel).clone() } - ModuleOrigin::Inline { definition_tree_id, .. } => definition_tree_id - .item_tree(db) - .raw_attrs(AttrOwner::ModItem(definition_tree_id.value.into())) - .clone(), + ModuleOrigin::Inline { definition_tree_id, file_item_tree_id, .. } => { + definition_tree_id + .item_tree(db) + .raw_attrs(AttrOwner::ModItem(file_item_tree_id.into())) + .clone() + } ModuleOrigin::BlockExpr { id, .. } => { let tree = db.block_item_tree(id); tree.raw_attrs(AttrOwner::TopLevel).clone() diff --git a/crates/hir-def/src/item_tree.rs b/crates/hir-def/src/item_tree.rs index 81c8f56456..ec2b65c9c0 100644 --- a/crates/hir-def/src/item_tree.rs +++ b/crates/hir-def/src/item_tree.rs @@ -404,59 +404,6 @@ impl TreeId { } } -#[derive(Debug)] -pub struct ItemTreeId<N> { - tree: TreeId, - pub value: FileItemTreeId<N>, -} - -impl<N> ItemTreeId<N> { - pub fn new(tree: TreeId, idx: FileItemTreeId<N>) -> Self { - Self { tree, value: idx } - } - - pub fn file_id(self) -> HirFileId { - self.tree.file - } - - pub fn tree_id(self) -> TreeId { - self.tree - } - - pub fn item_tree(self, db: &dyn DefDatabase) -> Arc<ItemTree> { - self.tree.item_tree(db) - } - - pub fn resolved<R>(self, db: &dyn DefDatabase, cb: impl FnOnce(&N) -> R) -> R - where - ItemTree: Index<FileItemTreeId<N>, Output = N>, - { - cb(&self.tree.item_tree(db)[self.value]) - } -} - -impl<N> Copy for ItemTreeId<N> {} -impl<N> Clone for ItemTreeId<N> { - fn clone(&self) -> Self { - *self - } -} - -impl<N> PartialEq for ItemTreeId<N> { - fn eq(&self, other: &Self) -> bool { - self.tree == other.tree && self.value == other.value - } -} - -impl<N> Eq for ItemTreeId<N> {} - -impl<N> Hash for ItemTreeId<N> { - fn hash<H: Hasher>(&self, state: &mut H) { - self.tree.hash(state); - self.value.hash(state); - } -} - macro_rules! mod_items { ( $( $typ:ident in $fld:ident -> $ast:ty ),+ $(,)? ) => { #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] diff --git a/crates/hir-def/src/nameres.rs b/crates/hir-def/src/nameres.rs index c908e45754..e62fd3dab7 100644 --- a/crates/hir-def/src/nameres.rs +++ b/crates/hir-def/src/nameres.rs @@ -80,7 +80,7 @@ use crate::{ LocalModuleId, Lookup, MacroExpander, MacroId, ModuleId, ProcMacroId, UseId, db::DefDatabase, item_scope::{BuiltinShadowMode, ItemScope}, - item_tree::{ItemTreeId, Mod, TreeId}, + item_tree::{FileItemTreeId, Mod, TreeId}, nameres::{diagnostics::DefDiagnostic, path_resolution::ResolveMode}, per_ns::PerNs, visibility::{Visibility, VisibilityExplicitness}, @@ -289,11 +289,13 @@ pub enum ModuleOrigin { File { is_mod_rs: bool, declaration: FileAstId<ast::Module>, - declaration_tree_id: ItemTreeId<Mod>, + declaration_tree_id: TreeId, + file_item_tree_id: FileItemTreeId<Mod>, definition: EditionedFileId, }, Inline { - definition_tree_id: ItemTreeId<Mod>, + definition_tree_id: TreeId, + file_item_tree_id: FileItemTreeId<Mod>, definition: FileAstId<ast::Module>, }, /// Pseudo-module introduced by a block scope (contains only inner items). @@ -309,7 +311,7 @@ impl ModuleOrigin { &ModuleOrigin::File { declaration, declaration_tree_id, .. } => { Some(AstId::new(declaration_tree_id.file_id(), declaration)) } - &ModuleOrigin::Inline { definition, definition_tree_id } => { + &ModuleOrigin::Inline { definition, definition_tree_id, file_item_tree_id: _ } => { Some(AstId::new(definition_tree_id.file_id(), definition)) } ModuleOrigin::CrateRoot { .. } | ModuleOrigin::BlockExpr { .. } => None, @@ -341,12 +343,14 @@ impl ModuleOrigin { let sf = db.parse(editioned_file_id).tree(); InFile::new(editioned_file_id.into(), ModuleSource::SourceFile(sf)) } - &ModuleOrigin::Inline { definition, definition_tree_id } => InFile::new( - definition_tree_id.file_id(), - ModuleSource::Module( - AstId::new(definition_tree_id.file_id(), definition).to_node(db), - ), - ), + &ModuleOrigin::Inline { definition, definition_tree_id, file_item_tree_id: _ } => { + InFile::new( + definition_tree_id.file_id(), + ModuleSource::Module( + AstId::new(definition_tree_id.file_id(), definition).to_node(db), + ), + ) + } ModuleOrigin::BlockExpr { block, .. } => { InFile::new(block.file_id, ModuleSource::BlockExpr(block.to_node(db))) } @@ -773,10 +777,12 @@ impl ModuleData { ErasedAstId::new(definition.into(), ROOT_ERASED_FILE_AST_ID).to_range(db), ) } - &ModuleOrigin::Inline { definition, definition_tree_id } => InFile::new( - definition_tree_id.file_id(), - AstId::new(definition_tree_id.file_id(), definition).to_range(db), - ), + &ModuleOrigin::Inline { definition, definition_tree_id, file_item_tree_id: _ } => { + InFile::new( + definition_tree_id.file_id(), + AstId::new(definition_tree_id.file_id(), definition).to_range(db), + ) + } ModuleOrigin::BlockExpr { block, .. } => InFile::new(block.file_id, block.to_range(db)), } } diff --git a/crates/hir-def/src/nameres/collector.rs b/crates/hir-def/src/nameres/collector.rs index 34a129a88e..e2231857fd 100644 --- a/crates/hir-def/src/nameres/collector.rs +++ b/crates/hir-def/src/nameres/collector.rs @@ -35,8 +35,8 @@ use crate::{ db::DefDatabase, item_scope::{GlobId, ImportId, ImportOrExternCrate, PerNsGlobImports}, item_tree::{ - self, FieldsShape, FileItemTreeId, ImportAlias, ImportKind, ItemTree, ItemTreeId, - ItemTreeNode, Macro2, MacroCall, MacroRules, Mod, ModItem, ModKind, TreeId, UseTreeKind, + self, FieldsShape, FileItemTreeId, ImportAlias, ImportKind, ItemTree, ItemTreeNode, Macro2, + MacroCall, MacroRules, Mod, ModItem, ModKind, TreeId, UseTreeKind, }, macro_call_as_call_id, nameres::{ @@ -140,7 +140,8 @@ struct ImportSource { id: UseId, is_prelude: bool, kind: ImportKind, - item_tree_id: ItemTreeId<item_tree::Use>, + tree: TreeId, + item: FileItemTreeId<item_tree::Use>, } #[derive(Debug, Eq, PartialEq)] @@ -154,19 +155,20 @@ struct Import { impl Import { fn from_use( tree: &ItemTree, - item_tree_id: ItemTreeId<item_tree::Use>, + tree_id: TreeId, + item: FileItemTreeId<item_tree::Use>, id: UseId, is_prelude: bool, mut cb: impl FnMut(Self), ) { - let it = &tree[item_tree_id.value]; + let it = &tree[item]; let visibility = &tree[it.visibility]; it.use_tree.expand(|idx, path, kind, alias| { cb(Self { path, alias, visibility: visibility.clone(), - source: ImportSource { use_tree: idx, id, is_prelude, kind, item_tree_id }, + source: ImportSource { use_tree: idx, id, is_prelude, kind, tree: tree_id, item }, }); }); } @@ -860,7 +862,8 @@ impl DefCollector<'_> { kind: kind @ (ImportKind::Plain | ImportKind::TypeOnly), id, use_tree, - item_tree_id, + tree, + item, .. } => { let name = match &import.alias { @@ -893,8 +896,8 @@ impl DefCollector<'_> { let Some(ImportOrExternCrate::ExternCrate(_)) = def.import else { return false; }; - let item_tree = item_tree_id.item_tree(self.db); - let use_kind = item_tree[item_tree_id.value].use_tree.kind(); + let item_tree = tree.item_tree(self.db); + let use_kind = item_tree[item].use_tree.kind(); let UseTreeKind::Single { path, .. } = use_kind else { return false; }; @@ -1643,7 +1646,7 @@ impl DefCollector<'_> { Import { ref path, source: - ImportSource { use_tree, id, is_prelude: _, kind: _, item_tree_id: _ }, + ImportSource { use_tree, id, is_prelude: _, kind: _, tree: _, item: _ }, .. }, .. @@ -1771,7 +1774,8 @@ impl ModCollector<'_, '_> { let is_prelude = attrs.by_key(sym::prelude_import).exists(); Import::from_use( self.item_tree, - ItemTreeId::new(self.tree_id, item_tree_id), + self.tree_id, + item_tree_id, id, is_prelude, |import| { @@ -2207,13 +2211,15 @@ impl ModCollector<'_, '_> { let origin = match definition { None => ModuleOrigin::Inline { definition: declaration, - definition_tree_id: ItemTreeId::new(self.tree_id, mod_tree_id), + definition_tree_id: self.tree_id, + file_item_tree_id: mod_tree_id, }, Some((definition, is_mod_rs)) => ModuleOrigin::File { declaration, definition, is_mod_rs, - declaration_tree_id: ItemTreeId::new(self.tree_id, mod_tree_id), + declaration_tree_id: self.tree_id, + file_item_tree_id: mod_tree_id, }, }; |