From 46bc8675edd403ffcd8963e4f26447b283e9d09e Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 17:13:20 +0300 Subject: use Source for statics and consts --- crates/ra_hir/src/code_model.rs | 34 ++++++++++++++-------- crates/ra_hir/src/docs.rs | 4 +-- crates/ra_hir/src/expr.rs | 12 ++++---- crates/ra_ide_api/src/completion/presentation.rs | 3 +- crates/ra_ide_api/src/display/navigation_target.rs | 32 +++----------------- crates/ra_ide_api/src/hover.rs | 12 ++++---- 6 files changed, 41 insertions(+), 56 deletions(-) diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index aa6eb741b..a8a0875e0 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs @@ -761,12 +761,17 @@ pub struct Const { pub(crate) id: ConstId, } +impl HasSource for Const { + type Ast = TreeArc; + + fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source> { + self.id.source(db).into() + } +} + impl Const { - 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 module(self, db: &impl DefDatabase) -> Module { @@ -819,7 +824,7 @@ impl ConstSignature { db: &(impl DefDatabase + AstDatabase), konst: Const, ) -> Arc { - let (_, node) = konst.source(db); + let node = konst.source(db).ast; const_signature_for(&*node) } @@ -827,7 +832,7 @@ impl ConstSignature { db: &(impl DefDatabase + AstDatabase), konst: Static, ) -> Arc { - let (_, node) = konst.source(db); + let node = konst.source(db).ast; const_signature_for(&*node) } } @@ -844,12 +849,17 @@ pub struct Static { pub(crate) id: StaticId, } +impl HasSource for Static { + type Ast = TreeArc; + + fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source> { + self.id.source(db).into() + } +} + impl Static { - 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 module(self, db: &impl DefDatabase) -> Module { diff --git a/crates/ra_hir/src/docs.rs b/crates/ra_hir/src/docs.rs index 8d7a5255f..86ca981f4 100644 --- a/crates/ra_hir/src/docs.rs +++ b/crates/ra_hir/src/docs.rs @@ -79,8 +79,8 @@ pub(crate) fn documentation_query( DocDef::Struct(it) => docs_from_ast(&*it.source(db).ast), DocDef::Enum(it) => docs_from_ast(&*it.source(db).ast), DocDef::EnumVariant(it) => docs_from_ast(&*it.source(db).ast), - DocDef::Static(it) => docs_from_ast(&*it.source(db).1), - DocDef::Const(it) => docs_from_ast(&*it.source(db).1), + 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::Trait(it) => docs_from_ast(&*it.source(db).1), diff --git a/crates/ra_hir/src/expr.rs b/crates/ra_hir/src/expr.rs index 46d51e0db..48e597519 100644 --- a/crates/ra_hir/src/expr.rs +++ b/crates/ra_hir/src/expr.rs @@ -1018,9 +1018,9 @@ pub(crate) fn body_with_source_map_query( match def { DefWithBody::Const(ref c) => { - let (file_id, src) = c.source(db); - collector = ExprCollector::new(def, file_id, def.resolver(db), db); - collector.collect_const_body(&src) + let src = c.source(db); + collector = ExprCollector::new(def, src.file_id, def.resolver(db), db); + collector.collect_const_body(&src.ast) } DefWithBody::Function(ref f) => { let src = f.source(db); @@ -1028,9 +1028,9 @@ pub(crate) fn body_with_source_map_query( collector.collect_fn_body(&src.ast) } DefWithBody::Static(ref s) => { - let (file_id, src) = s.source(db); - collector = ExprCollector::new(def, file_id, def.resolver(db), db); - collector.collect_static_body(&src) + let src = s.source(db); + collector = ExprCollector::new(def, src.file_id, def.resolver(db), db); + collector.collect_static_body(&src.ast) } } diff --git a/crates/ra_ide_api/src/completion/presentation.rs b/crates/ra_ide_api/src/completion/presentation.rs index e9ae20225..8c4d7127b 100644 --- a/crates/ra_ide_api/src/completion/presentation.rs +++ b/crates/ra_ide_api/src/completion/presentation.rs @@ -126,12 +126,11 @@ impl Completions { } pub(crate) fn add_const(&mut self, ctx: &CompletionContext, constant: hir::Const) { - let (_file_id, ast_node) = constant.source(ctx.db); + let ast_node = constant.source(ctx.db).ast; let name = match ast_node.name() { Some(name) => name, _ => return, }; - let (_, ast_node) = constant.source(ctx.db); let detail = const_label(&ast_node); CompletionItem::new(CompletionKind::Reference, ctx.source_range(), name.text().to_string()) diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index 3333771ab..a036a3b36 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -212,24 +212,8 @@ impl NavigationTarget { hir::ModuleDef::Struct(it) => NavigationTarget::from_adt_def(db, it.into()), hir::ModuleDef::Enum(it) => NavigationTarget::from_adt_def(db, it.into()), hir::ModuleDef::Union(it) => NavigationTarget::from_adt_def(db, it.into()), - hir::ModuleDef::Const(s) => { - let (file_id, node) = s.source(db); - NavigationTarget::from_named( - file_id.original_file(db), - &*node, - node.doc_comment_text(), - node.short_label(), - ) - } - hir::ModuleDef::Static(s) => { - let (file_id, node) = s.source(db); - NavigationTarget::from_named( - file_id.original_file(db), - &*node, - node.doc_comment_text(), - node.short_label(), - ) - } + hir::ModuleDef::Const(it) => NavigationTarget::from_def_source(db, it), + hir::ModuleDef::Static(it) => NavigationTarget::from_def_source(db, it), hir::ModuleDef::EnumVariant(var) => { let src = var.source(db); NavigationTarget::from_named( @@ -281,16 +265,8 @@ impl NavigationTarget { pub(crate) fn from_impl_item(db: &RootDatabase, impl_item: hir::ImplItem) -> NavigationTarget { match impl_item { - ImplItem::Method(f) => NavigationTarget::from_function(db, f), - ImplItem::Const(c) => { - let (file_id, node) = c.source(db); - NavigationTarget::from_named( - file_id.original_file(db), - &*node, - node.doc_comment_text(), - node.short_label(), - ) - } + 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( diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index 4dd3c1b9f..fe108a589 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -115,8 +115,8 @@ 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())) + let src = it.source(db); + res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label())) } hir::ImplItem::TypeAlias(it) => { let it = it.source(db).1; @@ -152,12 +152,12 @@ 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())) + let src = it.source(db); + res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label())) } hir::ModuleDef::Static(it) => { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), it.short_label())) + let src = it.source(db); + res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label())) } hir::ModuleDef::Trait(it) => { let it = it.source(db).1; -- cgit v1.2.3