aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src')
-rw-r--r--crates/ra_hir/src/code_model.rs7
-rw-r--r--crates/ra_hir/src/from_source.rs6
-rw-r--r--crates/ra_hir/src/has_source.rs2
3 files changed, 10 insertions, 5 deletions
diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs
index c013ff99b..117ca2fe3 100644
--- a/crates/ra_hir/src/code_model.rs
+++ b/crates/ra_hir/src/code_model.rs
@@ -809,7 +809,10 @@ impl ImplBlock {
809 let resolver = self.id.resolver(db); 809 let resolver = self.id.resolver(db);
810 let environment = TraitEnvironment::lower(db, &resolver); 810 let environment = TraitEnvironment::lower(db, &resolver);
811 let ty = Ty::from_hir(db, &resolver, &impl_data.target_type); 811 let ty = Ty::from_hir(db, &resolver, &impl_data.target_type);
812 Type { krate: self.id.module(db).krate, ty: InEnvironment { value: ty, environment } } 812 Type {
813 krate: self.id.lookup(db).container.krate,
814 ty: InEnvironment { value: ty, environment },
815 }
813 } 816 }
814 817
815 pub fn items(&self, db: &impl DefDatabase) -> Vec<AssocItem> { 818 pub fn items(&self, db: &impl DefDatabase) -> Vec<AssocItem> {
@@ -821,7 +824,7 @@ impl ImplBlock {
821 } 824 }
822 825
823 pub fn module(&self, db: &impl DefDatabase) -> Module { 826 pub fn module(&self, db: &impl DefDatabase) -> Module {
824 self.id.module(db).into() 827 self.id.lookup(db).container.into()
825 } 828 }
826 829
827 pub fn krate(&self, db: &impl DefDatabase) -> Crate { 830 pub fn krate(&self, db: &impl DefDatabase) -> Crate {
diff --git a/crates/ra_hir/src/from_source.rs b/crates/ra_hir/src/from_source.rs
index 307f3d5bf..b35188a21 100644
--- a/crates/ra_hir/src/from_source.rs
+++ b/crates/ra_hir/src/from_source.rs
@@ -107,8 +107,10 @@ impl FromSource for MacroDef {
107impl FromSource for ImplBlock { 107impl FromSource for ImplBlock {
108 type Ast = ast::ImplBlock; 108 type Ast = ast::ImplBlock;
109 fn from_source(db: &(impl DefDatabase + AstDatabase), src: InFile<Self::Ast>) -> Option<Self> { 109 fn from_source(db: &(impl DefDatabase + AstDatabase), src: InFile<Self::Ast>) -> Option<Self> {
110 let id = from_source(db, src)?; 110 // XXX: use `.parent()` to avoid finding ourselves
111 Some(ImplBlock { id }) 111 let parent = src.value.syntax().parent()?;
112 let container = Container::find(db, src.with_value(parent).as_ref())?;
113 container.child_by_source(db)[keys::IMPL].get(&src).copied().map(ImplBlock::from)
112 } 114 }
113} 115}
114 116
diff --git a/crates/ra_hir/src/has_source.rs b/crates/ra_hir/src/has_source.rs
index b09582f93..a888fe995 100644
--- a/crates/ra_hir/src/has_source.rs
+++ b/crates/ra_hir/src/has_source.rs
@@ -114,7 +114,7 @@ impl HasSource for MacroDef {
114impl HasSource for ImplBlock { 114impl HasSource for ImplBlock {
115 type Ast = ast::ImplBlock; 115 type Ast = ast::ImplBlock;
116 fn source(self, db: &impl DefDatabase) -> InFile<ast::ImplBlock> { 116 fn source(self, db: &impl DefDatabase) -> InFile<ast::ImplBlock> {
117 self.id.source(db) 117 self.id.lookup(db).source(db)
118 } 118 }
119} 119}
120impl HasSource for Import { 120impl HasSource for Import {