aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/code_model.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-06-11 15:47:24 +0100
committerAleksey Kladov <[email protected]>2019-06-11 16:28:51 +0100
commit0145d06515d990f8b7bf45e261674c265c52d858 (patch)
treebddaf6d176e9d903503fbf2cd406f60f61dce2df /crates/ra_hir/src/code_model.rs
parent178d8e96b5c810f40e7dd282ab06bb25d1fc8a2a (diff)
use Source for module, part 1
Diffstat (limited to 'crates/ra_hir/src/code_model.rs')
-rw-r--r--crates/ra_hir/src/code_model.rs13
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.