From a6e339e822bcba4d81f1ab3912ca9612be9b6a0a Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 17:36:52 +0300 Subject: use Source for impl block --- crates/ra_hir/src/code_model.rs | 7 ++----- crates/ra_hir/src/docs.rs | 2 +- crates/ra_hir/src/generics.rs | 4 ++-- crates/ra_hir/src/impl_block.rs | 18 ++++++++++++------ crates/ra_ide_api/src/display/navigation_target.rs | 6 +++--- 5 files changed, 20 insertions(+), 17 deletions(-) (limited to 'crates') diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index 0a750b590..5b56f890e 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs @@ -442,11 +442,8 @@ impl HasSource for Union { } impl Union { - pub fn source( - self, - db: &(impl DefDatabase + AstDatabase), - ) -> (HirFileId, TreeArc) { - self.id.source(db) + pub fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source> { + self.id.source(db).into() } pub fn name(self, db: &impl DefDatabase) -> Option { diff --git a/crates/ra_hir/src/docs.rs b/crates/ra_hir/src/docs.rs index 0cb0c0db8..f736f3875 100644 --- a/crates/ra_hir/src/docs.rs +++ b/crates/ra_hir/src/docs.rs @@ -82,7 +82,7 @@ pub(crate) fn documentation_query( DocDef::Static(it) => docs_from_ast(&*it.source(db).ast), DocDef::Const(it) => docs_from_ast(&*it.source(db).ast), DocDef::Function(it) => docs_from_ast(&*it.source(db).ast), - DocDef::Union(it) => docs_from_ast(&*it.source(db).1), + DocDef::Union(it) => docs_from_ast(&*it.source(db).ast), DocDef::Trait(it) => docs_from_ast(&*it.source(db).ast), DocDef::TypeAlias(it) => docs_from_ast(&*it.source(db).ast), DocDef::MacroDef(it) => docs_from_ast(&*it.source(db).1), diff --git a/crates/ra_hir/src/generics.rs b/crates/ra_hir/src/generics.rs index 08d711754..0b8bd5700 100644 --- a/crates/ra_hir/src/generics.rs +++ b/crates/ra_hir/src/generics.rs @@ -70,7 +70,7 @@ impl GenericParams { match def { GenericDef::Function(it) => generics.fill(&*it.source(db).ast, start), GenericDef::Struct(it) => generics.fill(&*it.source(db).ast, start), - GenericDef::Union(it) => generics.fill(&*it.source(db).1, start), + GenericDef::Union(it) => generics.fill(&*it.source(db).ast, start), GenericDef::Enum(it) => generics.fill(&*it.source(db).ast, start), GenericDef::Trait(it) => { // traits get the Self type as an implicit first type parameter @@ -82,7 +82,7 @@ impl GenericParams { generics.fill(&*it.source(db).ast, start + 1); } GenericDef::TypeAlias(it) => generics.fill(&*it.source(db).ast, start), - GenericDef::ImplBlock(it) => generics.fill(&*it.source(db).1, start), + GenericDef::ImplBlock(it) => generics.fill(&*it.source(db).ast, start), } Arc::new(generics) diff --git a/crates/ra_hir/src/impl_block.rs b/crates/ra_hir/src/impl_block.rs index a0d3b33fe..8194f38d4 100644 --- a/crates/ra_hir/src/impl_block.rs +++ b/crates/ra_hir/src/impl_block.rs @@ -8,7 +8,7 @@ use ra_syntax::{ }; use crate::{ - Const, TypeAlias, Function, HirFileId, AstDatabase, + Const, TypeAlias, Function, HirFileId, AstDatabase, HasSource, Source, HirDatabase, DefDatabase, TraitRef, type_ref::TypeRef, ids::LocationCtx, @@ -44,6 +44,15 @@ pub struct ImplBlock { impl_id: ImplId, } +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() + } +} + impl ImplBlock { pub(crate) fn containing( module_impl_blocks: Arc, @@ -58,13 +67,10 @@ impl ImplBlock { } /// Returns the syntax of the impl block - pub fn source( - &self, - db: &(impl DefDatabase + AstDatabase), - ) -> (HirFileId, TreeArc) { + 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)) + (file_id, source_map.get(&source, self.impl_id)).into() } pub fn id(&self) -> ImplId { diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index 2e3e3863a..640d68544 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -228,12 +228,12 @@ impl NavigationTarget { db: &RootDatabase, impl_block: hir::ImplBlock, ) -> NavigationTarget { - let (file_id, node) = impl_block.source(db); + let src = impl_block.source(db); NavigationTarget::from_syntax( - file_id.as_original_file(), + src.file_id.as_original_file(), "impl".into(), None, - node.syntax(), + src.ast.syntax(), None, None, ) -- cgit v1.2.3