From 5af9e475f4acce54f8383ed22febc412cf2541d0 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 1 Jun 2019 21:17:57 +0300 Subject: add AstDatabase --- crates/ra_hir/src/code_model.rs | 70 +++++++++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 20 deletions(-) (limited to 'crates/ra_hir/src/code_model.rs') diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index e3c765674..9c02b3995 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs @@ -5,7 +5,7 @@ use ra_syntax::{ast::{self, NameOwner, TypeAscriptionOwner}, TreeArc}; use crate::{ Name, AsName, AstId, Ty, HirFileId, Either, KnownName, - HirDatabase, DefDatabase, + HirDatabase, DefDatabase, AstDatabase, type_ref::TypeRef, nameres::{ModuleScope, Namespace, ImportId, CrateModuleId}, expr::{Body, BodySourceMap, validation::ExprValidator}, @@ -147,7 +147,7 @@ pub enum ModuleSource { impl ModuleSource { pub(crate) fn new( - db: &impl DefDatabase, + db: &(impl DefDatabase + AstDatabase), file_id: Option, decl_id: Option>, ) -> ModuleSource { @@ -168,7 +168,7 @@ impl ModuleSource { impl Module { /// Name of this module. - pub fn name(self, db: &impl HirDatabase) -> Option { + pub fn name(self, db: &impl DefDatabase) -> Option { let def_map = db.crate_def_map(self.krate); let parent = def_map[self.module_id].parent?; def_map[parent].children.iter().find_map(|(name, module_id)| { @@ -181,7 +181,10 @@ 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) -> (HirFileId, ModuleSource) { + pub fn definition_source( + self, + db: &(impl DefDatabase + AstDatabase), + ) -> (HirFileId, ModuleSource) { 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; @@ -340,7 +343,7 @@ impl StructField { self.parent.variant_data(db).fields().unwrap()[self.id].name.clone() } - pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, FieldSource) { + pub fn source(&self, db: &(impl DefDatabase + AstDatabase)) -> (HirFileId, FieldSource) { self.source_impl(db) } @@ -368,7 +371,10 @@ pub struct Struct { } impl Struct { - pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc) { + pub fn source( + self, + db: &(impl DefDatabase + AstDatabase), + ) -> (HirFileId, TreeArc) { self.id.source(db) } @@ -376,7 +382,7 @@ impl Struct { self.id.module(db) } - pub fn name(self, db: &impl HirDatabase) -> Option { + pub fn name(self, db: &impl DefDatabase) -> Option { db.struct_data(self).name.clone() } @@ -432,11 +438,14 @@ pub struct Union { } impl Union { - pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc) { + pub fn source( + self, + db: &(impl DefDatabase + AstDatabase), + ) -> (HirFileId, TreeArc) { self.id.source(db) } - pub fn name(self, db: &impl HirDatabase) -> Option { + pub fn name(self, db: &impl DefDatabase) -> Option { db.struct_data(Struct { id: self.id }).name.clone() } @@ -468,7 +477,10 @@ pub struct Enum { } impl Enum { - pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc) { + pub fn source( + self, + db: &(impl DefDatabase + AstDatabase), + ) -> (HirFileId, TreeArc) { self.id.source(db) } @@ -476,7 +488,7 @@ impl Enum { self.id.module(db) } - pub fn name(self, db: &impl HirDatabase) -> Option { + pub fn name(self, db: &impl DefDatabase) -> Option { db.enum_data(self).name.clone() } @@ -521,7 +533,10 @@ pub struct EnumVariant { } impl EnumVariant { - pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc) { + pub fn source( + &self, + db: &(impl DefDatabase + AstDatabase), + ) -> (HirFileId, TreeArc) { self.source_impl(db) } pub fn module(&self, db: &impl HirDatabase) -> Module { @@ -610,7 +625,10 @@ pub struct FnSignature { } impl FnSignature { - pub(crate) fn fn_signature_query(db: &impl DefDatabase, func: Function) -> Arc { + pub(crate) fn fn_signature_query( + db: &(impl DefDatabase + AstDatabase), + func: Function, + ) -> Arc { let (_, node) = func.source(db); let name = node.name().map(|n| n.as_name()).unwrap_or_else(Name::missing); let mut params = Vec::new(); @@ -668,7 +686,7 @@ impl FnSignature { } impl Function { - pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc) { + pub fn source(self, db: &(impl DefDatabase + AstDatabase)) -> (HirFileId, TreeArc) { self.id.source(db) } @@ -752,7 +770,10 @@ pub struct Const { } impl Const { - pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc) { + pub fn source( + self, + db: &(impl DefDatabase + AstDatabase), + ) -> (HirFileId, TreeArc) { self.id.source(db) } @@ -809,7 +830,7 @@ impl ConstSignature { } pub(crate) fn const_signature_query( - db: &impl DefDatabase, + db: &(impl DefDatabase + AstDatabase), konst: Const, ) -> Arc { let (_, node) = konst.source(db); @@ -817,7 +838,7 @@ impl ConstSignature { } pub(crate) fn static_signature_query( - db: &impl DefDatabase, + db: &(impl DefDatabase + AstDatabase), konst: Static, ) -> Arc { let (_, node) = konst.source(db); @@ -838,7 +859,10 @@ pub struct Static { } impl Static { - pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc) { + pub fn source( + self, + db: &(impl DefDatabase + AstDatabase), + ) -> (HirFileId, TreeArc) { self.id.source(db) } @@ -873,7 +897,10 @@ pub struct Trait { } impl Trait { - pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc) { + pub fn source( + self, + db: &(impl DefDatabase + AstDatabase), + ) -> (HirFileId, TreeArc) { self.id.source(db) } @@ -922,7 +949,10 @@ pub struct TypeAlias { } impl TypeAlias { - pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc) { + pub fn source( + self, + db: &(impl DefDatabase + AstDatabase), + ) -> (HirFileId, TreeArc) { self.id.source(db) } -- cgit v1.2.3