diff options
author | Jonas Schievink <[email protected]> | 2020-06-23 17:46:08 +0100 |
---|---|---|
committer | Jonas Schievink <[email protected]> | 2020-06-24 15:53:56 +0100 |
commit | f9a1a9cd3c7757ca3f8ba59287b5d36645008b9b (patch) | |
tree | af7502e953fd01422db014cbc5b30685f9369480 /crates/ra_hir_def/src/item_tree.rs | |
parent | b5fd02d93cdfafeba23f50ca9c414053aaa548ae (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.rs | 27 |
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. |
175 | pub trait ItemTreeNode: Clone { | 175 | pub 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. | ||
187 | pub trait ItemTreeSource: ItemTreeNode { | ||
188 | type Source: AstNode + Into<ast::ModuleItem>; | ||
189 | |||
190 | fn ast_id(&self) -> FileAstId<Self::Source>; | ||
191 | } | ||
192 | |||
193 | pub struct FileItemTreeId<N: ItemTreeNode> { | 190 | pub 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 | ||