aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/item_tree.rs
diff options
context:
space:
mode:
authorJonas Schievink <[email protected]>2020-06-23 19:20:30 +0100
committerJonas Schievink <[email protected]>2020-06-24 15:53:56 +0100
commit16fd4dabb754b017237127e70ef1e2b409c4f9b6 (patch)
tree2743ebecc714b27f75a9dfe0a488437e475010ba /crates/ra_hir_def/src/item_tree.rs
parentc019002d17185f4e8be54a978ab5d67bc632f518 (diff)
Remove file id from item tree
It's not needed, and `source` is only used by tests anyways
Diffstat (limited to 'crates/ra_hir_def/src/item_tree.rs')
-rw-r--r--crates/ra_hir_def/src/item_tree.rs21
1 files changed, 7 insertions, 14 deletions
diff --git a/crates/ra_hir_def/src/item_tree.rs b/crates/ra_hir_def/src/item_tree.rs
index d55b3f777..40bb78b57 100644
--- a/crates/ra_hir_def/src/item_tree.rs
+++ b/crates/ra_hir_def/src/item_tree.rs
@@ -67,7 +67,6 @@ enum AttrOwner {
67/// The item tree of a source file. 67/// The item tree of a source file.
68#[derive(Debug, Eq, PartialEq)] 68#[derive(Debug, Eq, PartialEq)]
69pub struct ItemTree { 69pub struct ItemTree {
70 file_id: HirFileId,
71 top_level: SmallVec<[ModItem; 1]>, 70 top_level: SmallVec<[ModItem; 1]>,
72 attrs: FxHashMap<AttrOwner, Attrs>, 71 attrs: FxHashMap<AttrOwner, Attrs>,
73 inner_items: FxHashMap<FileAstId<ast::ModuleItem>, SmallVec<[ModItem; 1]>>, 72 inner_items: FxHashMap<FileAstId<ast::ModuleItem>, SmallVec<[ModItem; 1]>>,
@@ -81,7 +80,7 @@ impl ItemTree {
81 let syntax = if let Some(node) = db.parse_or_expand(file_id) { 80 let syntax = if let Some(node) = db.parse_or_expand(file_id) {
82 node 81 node
83 } else { 82 } else {
84 return Arc::new(Self::empty(file_id)); 83 return Arc::new(Self::empty());
85 }; 84 };
86 85
87 let hygiene = Hygiene::new(db.upcast(), file_id); 86 let hygiene = Hygiene::new(db.upcast(), file_id);
@@ -113,9 +112,8 @@ impl ItemTree {
113 Arc::new(item_tree) 112 Arc::new(item_tree)
114 } 113 }
115 114
116 fn empty(file_id: HirFileId) -> Self { 115 fn empty() -> Self {
117 Self { 116 Self {
118 file_id,
119 top_level: Default::default(), 117 top_level: Default::default(),
120 attrs: Default::default(), 118 attrs: Default::default(),
121 inner_items: Default::default(), 119 inner_items: Default::default(),
@@ -150,19 +148,14 @@ impl ItemTree {
150 self.inner_items.values().flatten().copied() 148 self.inner_items.values().flatten().copied()
151 } 149 }
152 150
153 pub fn source<S: ItemTreeNode>( 151 pub fn source<S: ItemTreeNode>(&self, db: &dyn DefDatabase, of: ItemTreeId<S>) -> S::Source {
154 &self,
155 db: &dyn DefDatabase,
156 of: FileItemTreeId<S>,
157 ) -> S::Source {
158 // This unwrap cannot fail, since it has either succeeded above, or resulted in an empty 152 // This unwrap cannot fail, since it has either succeeded above, or resulted in an empty
159 // ItemTree (in which case there is no valid `FileItemTreeId` to call this method with). 153 // ItemTree (in which case there is no valid `FileItemTreeId` to call this method with).
160 let root = db 154 let root =
161 .parse_or_expand(self.file_id) 155 db.parse_or_expand(of.file_id).expect("parse_or_expand failed on constructed ItemTree");
162 .expect("parse_or_expand failed on constructed ItemTree");
163 156
164 let id = self[of].ast_id(); 157 let id = self[of.value].ast_id();
165 let map = db.ast_id_map(self.file_id); 158 let map = db.ast_id_map(of.file_id);
166 let ptr = map.get(id); 159 let ptr = map.get(id);
167 ptr.to_node(&root) 160 ptr.to_node(&root)
168 } 161 }