From 4b03b39d5b4b00daffb120a4d2d9ea4a55a9a7ac Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Mon, 22 Jun 2020 15:07:06 +0200 Subject: draw the rest of the owl --- crates/ra_hir_def/src/src.rs | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) (limited to 'crates/ra_hir_def/src/src.rs') diff --git a/crates/ra_hir_def/src/src.rs b/crates/ra_hir_def/src/src.rs index 46e90da70..10e21d48e 100644 --- a/crates/ra_hir_def/src/src.rs +++ b/crates/ra_hir_def/src/src.rs @@ -2,30 +2,37 @@ use hir_expand::InFile; use ra_arena::map::ArenaMap; -use ra_syntax::AstNode; -use crate::{db::DefDatabase, AssocItemLoc, ItemLoc}; +use crate::{db::DefDatabase, item_tree::ItemTreeSource, AssocItemLoc, ItemLoc}; pub trait HasSource { type Value; fn source(&self, db: &dyn DefDatabase) -> InFile; } -impl HasSource for AssocItemLoc { - type Value = N; +impl HasSource for AssocItemLoc { + type Value = N::Source; - fn source(&self, db: &dyn DefDatabase) -> InFile { - let node = self.ast_id.to_node(db.upcast()); - InFile::new(self.ast_id.file_id, node) + fn source(&self, db: &dyn DefDatabase) -> InFile { + let tree = db.item_tree(self.id.file_id); + let ast_id_map = db.ast_id_map(self.id.file_id); + let root = db.parse_or_expand(self.id.file_id).unwrap(); + let node = &tree[self.id.value]; + + InFile::new(self.id.file_id, ast_id_map.get(node.ast_id()).to_node(&root)) } } -impl HasSource for ItemLoc { - type Value = N; +impl HasSource for ItemLoc { + type Value = N::Source; + + fn source(&self, db: &dyn DefDatabase) -> InFile { + let tree = db.item_tree(self.id.file_id); + let ast_id_map = db.ast_id_map(self.id.file_id); + let root = db.parse_or_expand(self.id.file_id).unwrap(); + let node = &tree[self.id.value]; - fn source(&self, db: &dyn DefDatabase) -> InFile { - let node = self.ast_id.to_node(db.upcast()); - InFile::new(self.ast_id.file_id, node) + InFile::new(self.id.file_id, ast_id_map.get(node.ast_id()).to_node(&root)) } } -- cgit v1.2.3 From f9a1a9cd3c7757ca3f8ba59287b5d36645008b9b Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Tue, 23 Jun 2020 18:46:08 +0200 Subject: Merge item tree traits The Source trait isn't needed anymore since we no longer merge extern crate items with use items. --- crates/ra_hir_def/src/src.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'crates/ra_hir_def/src/src.rs') diff --git a/crates/ra_hir_def/src/src.rs b/crates/ra_hir_def/src/src.rs index 10e21d48e..043b93fad 100644 --- a/crates/ra_hir_def/src/src.rs +++ b/crates/ra_hir_def/src/src.rs @@ -3,14 +3,14 @@ use hir_expand::InFile; use ra_arena::map::ArenaMap; -use crate::{db::DefDatabase, item_tree::ItemTreeSource, AssocItemLoc, ItemLoc}; +use crate::{db::DefDatabase, item_tree::ItemTreeNode, AssocItemLoc, ItemLoc}; pub trait HasSource { type Value; fn source(&self, db: &dyn DefDatabase) -> InFile; } -impl HasSource for AssocItemLoc { +impl HasSource for AssocItemLoc { type Value = N::Source; fn source(&self, db: &dyn DefDatabase) -> InFile { @@ -23,7 +23,7 @@ impl HasSource for AssocItemLoc { } } -impl HasSource for ItemLoc { +impl HasSource for ItemLoc { type Value = N::Source; fn source(&self, db: &dyn DefDatabase) -> InFile { -- cgit v1.2.3