From f2ccc54468348af96d6167da5971749ef0f4ab5e Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 17:25:55 +0300 Subject: [PATCH] use Source for TypeAlias --- crates/ra_hir/src/code_model.rs | 11 ++++++++-- crates/ra_hir/src/docs.rs | 2 +- crates/ra_hir/src/generics.rs | 2 +- crates/ra_hir/src/type_alias.rs | 2 +- .../ra_ide_api/src/completion/presentation.rs | 5 ++--- .../src/display/navigation_target.rs | 20 ++----------------- crates/ra_ide_api/src/hover.rs | 18 ++++++----------- 7 files changed, 22 insertions(+), 38 deletions(-) diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index a8a0875e03..20a8d7d806 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs @@ -932,12 +932,19 @@ pub struct TypeAlias { pub(crate) id: TypeAliasId, } +impl HasSource for TypeAlias { + type Ast = TreeArc; + fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source> { + self.id.source(db).into() + } +} + impl TypeAlias { pub fn source( self, db: &(impl DefDatabase + AstDatabase), - ) -> (HirFileId, TreeArc) { - self.id.source(db) + ) -> Source> { + self.id.source(db).into() } pub fn module(self, db: &impl DefDatabase) -> Module { diff --git a/crates/ra_hir/src/docs.rs b/crates/ra_hir/src/docs.rs index 86ca981f46..1c6b4f2051 100644 --- a/crates/ra_hir/src/docs.rs +++ b/crates/ra_hir/src/docs.rs @@ -84,7 +84,7 @@ pub(crate) fn documentation_query( DocDef::Function(it) => docs_from_ast(&*it.source(db).ast), DocDef::Union(it) => docs_from_ast(&*it.source(db).1), DocDef::Trait(it) => docs_from_ast(&*it.source(db).1), - DocDef::TypeAlias(it) => docs_from_ast(&*it.source(db).1), + 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 fcccd67c8e..b7e255c175 100644 --- a/crates/ra_hir/src/generics.rs +++ b/crates/ra_hir/src/generics.rs @@ -81,7 +81,7 @@ impl GenericParams { }); generics.fill(&*it.source(db).1, start + 1); } - GenericDef::TypeAlias(it) => generics.fill(&*it.source(db).1, start), + GenericDef::TypeAlias(it) => generics.fill(&*it.source(db).ast, start), GenericDef::ImplBlock(it) => generics.fill(&*it.source(db).1, start), } diff --git a/crates/ra_hir/src/type_alias.rs b/crates/ra_hir/src/type_alias.rs index 970468e3cb..c449d73466 100644 --- a/crates/ra_hir/src/type_alias.rs +++ b/crates/ra_hir/src/type_alias.rs @@ -8,6 +8,6 @@ pub(crate) fn type_alias_ref_query( db: &(impl DefDatabase + AstDatabase), typ: TypeAlias, ) -> Arc { - let (_, node) = typ.source(db); + let node = typ.source(db).ast; Arc::new(TypeRef::from_ast_opt(node.type_ref())) } diff --git a/crates/ra_ide_api/src/completion/presentation.rs b/crates/ra_ide_api/src/completion/presentation.rs index 8c4d7127b6..495899262f 100644 --- a/crates/ra_ide_api/src/completion/presentation.rs +++ b/crates/ra_ide_api/src/completion/presentation.rs @@ -141,13 +141,12 @@ impl Completions { } pub(crate) fn add_type_alias(&mut self, ctx: &CompletionContext, type_alias: hir::TypeAlias) { - let (_file_id, type_def) = type_alias.source(ctx.db); + let type_def = type_alias.source(ctx.db).ast; let name = match type_def.name() { Some(name) => name, _ => return, }; - let (_, ast_node) = type_alias.source(ctx.db); - let detail = type_label(&ast_node); + let detail = type_label(&type_def); CompletionItem::new(CompletionKind::Reference, ctx.source_range(), name.text().to_string()) .kind(CompletionItemKind::TypeAlias) diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index a036a3b361..19a64f3007 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -232,15 +232,7 @@ impl NavigationTarget { node.short_label(), ) } - hir::ModuleDef::TypeAlias(e) => { - let (file_id, node) = e.source(db); - NavigationTarget::from_named( - file_id.original_file(db), - &*node, - node.doc_comment_text(), - node.short_label(), - ) - } + hir::ModuleDef::TypeAlias(it) => NavigationTarget::from_def_source(db, it), hir::ModuleDef::BuiltinType(..) => { return None; } @@ -267,15 +259,7 @@ impl NavigationTarget { match impl_item { ImplItem::Method(it) => NavigationTarget::from_function(db, it), ImplItem::Const(it) => NavigationTarget::from_def_source(db, it), - ImplItem::TypeAlias(a) => { - let (file_id, node) = a.source(db); - NavigationTarget::from_named( - file_id.original_file(db), - &*node, - node.doc_comment_text(), - node.short_label(), - ) - } + ImplItem::TypeAlias(it) => NavigationTarget::from_def_source(db, it), } } diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index 0f68cacca0..c4826e515b 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -107,14 +107,11 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option match it { - hir::ImplItem::Method(it) => res.extend(from_def_source(db, it)), - hir::ImplItem::Const(it) => res.extend(from_def_source(db, it)), - hir::ImplItem::TypeAlias(it) => { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), it.short_label())) - } - }, + Some(AssocItem(it)) => res.extend(match it { + hir::ImplItem::Method(it) => from_def_source(db, it), + hir::ImplItem::Const(it) => from_def_source(db, it), + hir::ImplItem::TypeAlias(it) => from_def_source(db, it), + }), Some(Def(it)) => { match it { hir::ModuleDef::Module(it) => { @@ -137,10 +134,7 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), it.short_label())) - } + hir::ModuleDef::TypeAlias(it) => res.extend(from_def_source(db, it)), hir::ModuleDef::BuiltinType(_) => { // FIXME: hover for builtin Type ? }