From 338ff052c2fe658d6fcf88888918b2e372129e21 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 23 Nov 2019 16:41:04 +0300 Subject: Simplify HasSource --- crates/ra_hir/src/code_model/src.rs | 39 +++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 21 deletions(-) (limited to 'crates/ra_hir/src') diff --git a/crates/ra_hir/src/code_model/src.rs b/crates/ra_hir/src/code_model/src.rs index ceb3daa27..402f821bf 100644 --- a/crates/ra_hir/src/code_model/src.rs +++ b/crates/ra_hir/src/code_model/src.rs @@ -5,24 +5,24 @@ use hir_expand::either::Either; use ra_syntax::ast::{self, AstNode}; use crate::{ - db::{AstDatabase, DefDatabase, HirDatabase}, + db::{DefDatabase, HirDatabase}, ids::AstItemDef, - Const, Enum, EnumVariant, FieldSource, Function, HasBody, MacroDef, Module, ModuleSource, - Static, Struct, StructField, Trait, TypeAlias, Union, Import + Const, Enum, EnumVariant, FieldSource, Function, HasBody, Import, MacroDef, Module, + ModuleSource, Static, Struct, StructField, Trait, TypeAlias, Union, }; pub use hir_expand::Source; pub trait HasSource { type Ast; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source; + fn source(self, db: &impl DefDatabase) -> Source; } /// NB: Module is !HasSource, because it has two source nodes at the same time: /// definition and declaration. 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)) -> Source { + pub fn definition_source(self, db: &impl DefDatabase) -> Source { let def_map = db.crate_def_map(self.id.krate); let src = def_map[self.id.module_id].definition_source(db); src.map(|it| match it { @@ -33,10 +33,7 @@ impl Module { /// Returns a node which declares this module, either a `mod foo;` or a `mod foo {}`. /// `None` for the crate root. - pub fn declaration_source( - self, - db: &(impl DefDatabase + AstDatabase), - ) -> Option> { + pub fn declaration_source(self, db: &impl DefDatabase) -> Option> { let def_map = db.crate_def_map(self.id.krate); def_map[self.id.module_id].declaration_source(db) } @@ -44,7 +41,7 @@ impl Module { impl HasSource for StructField { type Ast = FieldSource; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { let var = VariantId::from(self.parent); let src = var.child_source(db); src.map(|it| match it[self.id].clone() { @@ -55,61 +52,61 @@ impl HasSource for StructField { } impl HasSource for Struct { type Ast = ast::StructDef; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { self.id.0.source(db) } } impl HasSource for Union { type Ast = ast::StructDef; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { self.id.0.source(db) } } impl HasSource for Enum { type Ast = ast::EnumDef; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { self.id.source(db) } } impl HasSource for EnumVariant { type Ast = ast::EnumVariant; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { self.parent.id.child_source(db).map(|map| map[self.id].clone()) } } impl HasSource for Function { type Ast = ast::FnDef; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { self.id.lookup(db).source(db) } } impl HasSource for Const { type Ast = ast::ConstDef; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { self.id.lookup(db).source(db) } } impl HasSource for Static { type Ast = ast::StaticDef; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { self.id.source(db) } } impl HasSource for Trait { type Ast = ast::TraitDef; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { self.id.source(db) } } impl HasSource for TypeAlias { type Ast = ast::TypeAliasDef; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { self.id.lookup(db).source(db) } } impl HasSource for MacroDef { type Ast = ast::MacroCall; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { Source { file_id: self.id.ast_id.file_id(), value: self.id.ast_id.to_node(db) } } } @@ -117,7 +114,7 @@ impl HasSource for Import { type Ast = Either; /// Returns the syntax of the last path segment corresponding to this import - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { let src = self.parent.definition_source(db); let (_, source_map) = db.raw_items_with_source_map(src.file_id); src.with_value(source_map.get(&src.value, self.id)) -- cgit v1.2.3