From 0145d06515d990f8b7bf45e261674c265c52d858 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 17:47:24 +0300 Subject: use Source for module, part 1 --- crates/ra_hir/src/code_model.rs | 13 +++++-------- crates/ra_hir/src/impl_block.rs | 14 +++++++------- crates/ra_hir/src/lang_item.rs | 2 +- crates/ra_hir/src/source_binder.rs | 6 +++--- 4 files changed, 16 insertions(+), 19 deletions(-) (limited to 'crates/ra_hir/src') 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 { } /// Returns a node which defines this module. That is, a file or a `mod foo {}` with items. - pub fn definition_source( - self, - db: &(impl DefDatabase + AstDatabase), - ) -> (HirFileId, ModuleSource) { + pub fn definition_source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { let def_map = db.crate_def_map(self.krate); let decl_id = def_map[self.module_id].declaration; let file_id = def_map[self.module_id].definition; let module_source = ModuleSource::new(db, file_id, decl_id); let file_id = file_id.map(HirFileId::from).unwrap_or_else(|| decl_id.unwrap().file_id()); - (file_id, module_source) + (file_id, module_source).into() } /// Returns a node which declares this module, either a `mod foo;` or a `mod foo {}`. @@ -226,9 +223,9 @@ impl Module { db: &impl HirDatabase, import: ImportId, ) -> Either, TreeArc> { - let (file_id, source) = self.definition_source(db); - let (_, source_map) = db.raw_items_with_source_map(file_id); - source_map.get(&source, import) + let src = self.definition_source(db); + let (_, source_map) = db.raw_items_with_source_map(src.file_id); + source_map.get(&src.ast, import) } /// Returns the crate this module is part of. diff --git a/crates/ra_hir/src/impl_block.rs b/crates/ra_hir/src/impl_block.rs index 8194f38d4..646b603d3 100644 --- a/crates/ra_hir/src/impl_block.rs +++ b/crates/ra_hir/src/impl_block.rs @@ -48,8 +48,8 @@ impl HasSource for ImplBlock { type Ast = TreeArc; fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source> { let source_map = db.impls_in_module_with_source_map(self.module).1; - let (file_id, source) = self.module.definition_source(db); - (file_id, source_map.get(&source, self.impl_id)).into() + let src = self.module.definition_source(db); + (src.file_id, source_map.get(&src.ast, self.impl_id)).into() } } @@ -69,8 +69,8 @@ impl ImplBlock { /// Returns the syntax of the impl block pub fn source(&self, db: &(impl DefDatabase + AstDatabase)) -> Source> { let source_map = db.impls_in_module_with_source_map(self.module).1; - let (file_id, source) = self.module.definition_source(db); - (file_id, source_map.get(&source, self.impl_id)).into() + let src = self.module.definition_source(db); + (src.file_id, source_map.get(&src.ast, self.impl_id)).into() } pub fn id(&self) -> ImplId { @@ -207,8 +207,8 @@ impl ModuleImplBlocks { impls_by_def: FxHashMap::default(), }; - let (file_id, module_source) = m.module.definition_source(db); - let node = match &module_source { + let src = m.module.definition_source(db); + let node = match &src.ast { ModuleSource::SourceFile(node) => node.syntax(), ModuleSource::Module(node) => { node.item_list().expect("inline module should have item list").syntax() @@ -216,7 +216,7 @@ impl ModuleImplBlocks { }; for impl_block_ast in node.children().filter_map(ast::ImplBlock::cast) { - let impl_block = ImplData::from_ast(db, file_id, m.module, impl_block_ast); + let impl_block = ImplData::from_ast(db, src.file_id, m.module, impl_block_ast); let id = m.impls.alloc(impl_block); for &impl_item in &m.impls[id].items { m.impls_by_def.insert(impl_item, id); diff --git a/crates/ra_hir/src/lang_item.rs b/crates/ra_hir/src/lang_item.rs index 684fbc068..cdc9182d6 100644 --- a/crates/ra_hir/src/lang_item.rs +++ b/crates/ra_hir/src/lang_item.rs @@ -84,7 +84,7 @@ impl LangItems { ) { // Look for impl targets let (impl_blocks, source_map) = db.impls_in_module_with_source_map(module.clone()); - let source = module.definition_source(db).1; + let source = module.definition_source(db).ast; for (impl_id, _) in impl_blocks.impls.iter() { let impl_block = source_map.get(&source, impl_id); let lang_item_name = impl_block diff --git a/crates/ra_hir/src/source_binder.rs b/crates/ra_hir/src/source_binder.rs index 876ebe0e3..4f9e8c5a9 100644 --- a/crates/ra_hir/src/source_binder.rs +++ b/crates/ra_hir/src/source_binder.rs @@ -97,13 +97,13 @@ pub fn struct_from_module( module: Module, struct_def: &ast::StructDef, ) -> Struct { - let (file_id, _) = module.definition_source(db); + let file_id = module.definition_source(db).file_id; let ctx = LocationCtx::new(db, module, file_id); Struct { id: ctx.to_def(struct_def) } } pub fn enum_from_module(db: &impl HirDatabase, module: Module, enum_def: &ast::EnumDef) -> Enum { - let (file_id, _) = module.definition_source(db); + let file_id = module.definition_source(db).file_id; let ctx = LocationCtx::new(db, module, file_id); Enum { id: ctx.to_def(enum_def) } } @@ -113,7 +113,7 @@ pub fn trait_from_module( module: Module, trait_def: &ast::TraitDef, ) -> Trait { - let (file_id, _) = module.definition_source(db); + let file_id = module.definition_source(db).file_id; let ctx = LocationCtx::new(db, module, file_id); Trait { id: ctx.to_def(trait_def) } } -- cgit v1.2.3