diff options
Diffstat (limited to 'crates/ra_hir/src/code_model.rs')
-rw-r--r-- | crates/ra_hir/src/code_model.rs | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index 4c121503e..e920256e5 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs | |||
@@ -196,16 +196,13 @@ impl Module { | |||
196 | } | 196 | } |
197 | 197 | ||
198 | /// Returns a node which defines this module. That is, a file or a `mod foo {}` with items. | 198 | /// Returns a node which defines this module. That is, a file or a `mod foo {}` with items. |
199 | pub fn definition_source( | 199 | pub fn definition_source(self, db: &(impl DefDatabase + AstDatabase)) -> Source<ModuleSource> { |
200 | self, | ||
201 | db: &(impl DefDatabase + AstDatabase), | ||
202 | ) -> (HirFileId, ModuleSource) { | ||
203 | let def_map = db.crate_def_map(self.krate); | 200 | let def_map = db.crate_def_map(self.krate); |
204 | let decl_id = def_map[self.module_id].declaration; | 201 | let decl_id = def_map[self.module_id].declaration; |
205 | let file_id = def_map[self.module_id].definition; | 202 | let file_id = def_map[self.module_id].definition; |
206 | let module_source = ModuleSource::new(db, file_id, decl_id); | 203 | let module_source = ModuleSource::new(db, file_id, decl_id); |
207 | let file_id = file_id.map(HirFileId::from).unwrap_or_else(|| decl_id.unwrap().file_id()); | 204 | let file_id = file_id.map(HirFileId::from).unwrap_or_else(|| decl_id.unwrap().file_id()); |
208 | (file_id, module_source) | 205 | (file_id, module_source).into() |
209 | } | 206 | } |
210 | 207 | ||
211 | /// Returns a node which declares this module, either a `mod foo;` or a `mod foo {}`. | 208 | /// Returns a node which declares this module, either a `mod foo;` or a `mod foo {}`. |
@@ -226,9 +223,9 @@ impl Module { | |||
226 | db: &impl HirDatabase, | 223 | db: &impl HirDatabase, |
227 | import: ImportId, | 224 | import: ImportId, |
228 | ) -> Either<TreeArc<ast::UseTree>, TreeArc<ast::ExternCrateItem>> { | 225 | ) -> Either<TreeArc<ast::UseTree>, TreeArc<ast::ExternCrateItem>> { |
229 | let (file_id, source) = self.definition_source(db); | 226 | let src = self.definition_source(db); |
230 | let (_, source_map) = db.raw_items_with_source_map(file_id); | 227 | let (_, source_map) = db.raw_items_with_source_map(src.file_id); |
231 | source_map.get(&source, import) | 228 | source_map.get(&src.ast, import) |
232 | } | 229 | } |
233 | 230 | ||
234 | /// Returns the crate this module is part of. | 231 | /// Returns the crate this module is part of. |