aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/item_tree.rs
diff options
context:
space:
mode:
authorJonas Schievink <[email protected]>2020-06-23 17:46:08 +0100
committerJonas Schievink <[email protected]>2020-06-24 15:53:56 +0100
commitf9a1a9cd3c7757ca3f8ba59287b5d36645008b9b (patch)
treeaf7502e953fd01422db014cbc5b30685f9369480 /crates/ra_hir_def/src/item_tree.rs
parentb5fd02d93cdfafeba23f50ca9c414053aaa548ae (diff)
Merge item tree traits
The Source trait isn't needed anymore since we no longer merge extern crate items with use items.
Diffstat (limited to 'crates/ra_hir_def/src/item_tree.rs')
-rw-r--r--crates/ra_hir_def/src/item_tree.rs27
1 files changed, 11 insertions, 16 deletions
diff --git a/crates/ra_hir_def/src/item_tree.rs b/crates/ra_hir_def/src/item_tree.rs
index 5beb11df7..a75271703 100644
--- a/crates/ra_hir_def/src/item_tree.rs
+++ b/crates/ra_hir_def/src/item_tree.rs
@@ -153,7 +153,7 @@ impl ItemTree {
153 self.inner_items.values().flatten().copied() 153 self.inner_items.values().flatten().copied()
154 } 154 }
155 155
156 pub fn source<S: ItemTreeSource>( 156 pub fn source<S: ItemTreeNode>(
157 &self, 157 &self,
158 db: &dyn DefDatabase, 158 db: &dyn DefDatabase,
159 of: FileItemTreeId<S>, 159 of: FileItemTreeId<S>,
@@ -173,6 +173,10 @@ impl ItemTree {
173 173
174/// Trait implemented by all nodes in the item tree. 174/// Trait implemented by all nodes in the item tree.
175pub trait ItemTreeNode: Clone { 175pub trait ItemTreeNode: Clone {
176 type Source: AstNode + Into<ast::ModuleItem>;
177
178 fn ast_id(&self) -> FileAstId<Self::Source>;
179
176 /// Looks up an instance of `Self` in an item tree. 180 /// Looks up an instance of `Self` in an item tree.
177 fn lookup(tree: &ItemTree, index: Idx<Self>) -> &Self; 181 fn lookup(tree: &ItemTree, index: Idx<Self>) -> &Self;
178 182
@@ -183,13 +187,6 @@ pub trait ItemTreeNode: Clone {
183 fn id_to_mod_item(id: FileItemTreeId<Self>) -> ModItem; 187 fn id_to_mod_item(id: FileItemTreeId<Self>) -> ModItem;
184} 188}
185 189
186/// Trait for item tree nodes that allow accessing the original AST node.
187pub trait ItemTreeSource: ItemTreeNode {
188 type Source: AstNode + Into<ast::ModuleItem>;
189
190 fn ast_id(&self) -> FileAstId<Self::Source>;
191}
192
193pub struct FileItemTreeId<N: ItemTreeNode> { 190pub struct FileItemTreeId<N: ItemTreeNode> {
194 index: Idx<N>, 191 index: Idx<N>,
195 _p: PhantomData<N>, 192 _p: PhantomData<N>,
@@ -242,6 +239,12 @@ macro_rules! mod_items {
242 239
243 $( 240 $(
244 impl ItemTreeNode for $typ { 241 impl ItemTreeNode for $typ {
242 type Source = $ast;
243
244 fn ast_id(&self) -> FileAstId<Self::Source> {
245 self.ast_id
246 }
247
245 fn lookup(tree: &ItemTree, index: Idx<Self>) -> &Self { 248 fn lookup(tree: &ItemTree, index: Idx<Self>) -> &Self {
246 &tree.$fld[index] 249 &tree.$fld[index]
247 } 250 }
@@ -259,14 +262,6 @@ macro_rules! mod_items {
259 } 262 }
260 } 263 }
261 264
262 impl ItemTreeSource for $typ {
263 type Source = $ast;
264
265 fn ast_id(&self) -> FileAstId<Self::Source> {
266 self.ast_id
267 }
268 }
269
270 impl Index<Idx<$typ>> for ItemTree { 265 impl Index<Idx<$typ>> for ItemTree {
271 type Output = $typ; 266 type Output = $typ;
272 267