diff options
Diffstat (limited to 'crates/ra_hir_def/src/item_tree.rs')
-rw-r--r-- | crates/ra_hir_def/src/item_tree.rs | 21 |
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)] |
69 | pub struct ItemTree { | 69 | pub 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 | } |