aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/code_model.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/code_model.rs')
-rw-r--r--crates/ra_hir/src/code_model.rs70
1 files changed, 50 insertions, 20 deletions
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};
5 5
6use crate::{ 6use crate::{
7 Name, AsName, AstId, Ty, HirFileId, Either, KnownName, 7 Name, AsName, AstId, Ty, HirFileId, Either, KnownName,
8 HirDatabase, DefDatabase, 8 HirDatabase, DefDatabase, AstDatabase,
9 type_ref::TypeRef, 9 type_ref::TypeRef,
10 nameres::{ModuleScope, Namespace, ImportId, CrateModuleId}, 10 nameres::{ModuleScope, Namespace, ImportId, CrateModuleId},
11 expr::{Body, BodySourceMap, validation::ExprValidator}, 11 expr::{Body, BodySourceMap, validation::ExprValidator},
@@ -147,7 +147,7 @@ pub enum ModuleSource {
147 147
148impl ModuleSource { 148impl ModuleSource {
149 pub(crate) fn new( 149 pub(crate) fn new(
150 db: &impl DefDatabase, 150 db: &(impl DefDatabase + AstDatabase),
151 file_id: Option<FileId>, 151 file_id: Option<FileId>,
152 decl_id: Option<AstId<ast::Module>>, 152 decl_id: Option<AstId<ast::Module>>,
153 ) -> ModuleSource { 153 ) -> ModuleSource {
@@ -168,7 +168,7 @@ impl ModuleSource {
168 168
169impl Module { 169impl Module {
170 /// Name of this module. 170 /// Name of this module.
171 pub fn name(self, db: &impl HirDatabase) -> Option<Name> { 171 pub fn name(self, db: &impl DefDatabase) -> Option<Name> {
172 let def_map = db.crate_def_map(self.krate); 172 let def_map = db.crate_def_map(self.krate);
173 let parent = def_map[self.module_id].parent?; 173 let parent = def_map[self.module_id].parent?;
174 def_map[parent].children.iter().find_map(|(name, module_id)| { 174 def_map[parent].children.iter().find_map(|(name, module_id)| {
@@ -181,7 +181,10 @@ impl Module {
181 } 181 }
182 182
183 /// Returns a node which defines this module. That is, a file or a `mod foo {}` with items. 183 /// Returns a node which defines this module. That is, a file or a `mod foo {}` with items.
184 pub fn definition_source(self, db: &impl DefDatabase) -> (HirFileId, ModuleSource) { 184 pub fn definition_source(
185 self,
186 db: &(impl DefDatabase + AstDatabase),
187 ) -> (HirFileId, ModuleSource) {
185 let def_map = db.crate_def_map(self.krate); 188 let def_map = db.crate_def_map(self.krate);
186 let decl_id = def_map[self.module_id].declaration; 189 let decl_id = def_map[self.module_id].declaration;
187 let file_id = def_map[self.module_id].definition; 190 let file_id = def_map[self.module_id].definition;
@@ -340,7 +343,7 @@ impl StructField {
340 self.parent.variant_data(db).fields().unwrap()[self.id].name.clone() 343 self.parent.variant_data(db).fields().unwrap()[self.id].name.clone()
341 } 344 }
342 345
343 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, FieldSource) { 346 pub fn source(&self, db: &(impl DefDatabase + AstDatabase)) -> (HirFileId, FieldSource) {
344 self.source_impl(db) 347 self.source_impl(db)
345 } 348 }
346 349
@@ -368,7 +371,10 @@ pub struct Struct {
368} 371}
369 372
370impl Struct { 373impl Struct {
371 pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::StructDef>) { 374 pub fn source(
375 self,
376 db: &(impl DefDatabase + AstDatabase),
377 ) -> (HirFileId, TreeArc<ast::StructDef>) {
372 self.id.source(db) 378 self.id.source(db)
373 } 379 }
374 380
@@ -376,7 +382,7 @@ impl Struct {
376 self.id.module(db) 382 self.id.module(db)
377 } 383 }
378 384
379 pub fn name(self, db: &impl HirDatabase) -> Option<Name> { 385 pub fn name(self, db: &impl DefDatabase) -> Option<Name> {
380 db.struct_data(self).name.clone() 386 db.struct_data(self).name.clone()
381 } 387 }
382 388
@@ -432,11 +438,14 @@ pub struct Union {
432} 438}
433 439
434impl Union { 440impl Union {
435 pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::StructDef>) { 441 pub fn source(
442 self,
443 db: &(impl DefDatabase + AstDatabase),
444 ) -> (HirFileId, TreeArc<ast::StructDef>) {
436 self.id.source(db) 445 self.id.source(db)
437 } 446 }
438 447
439 pub fn name(self, db: &impl HirDatabase) -> Option<Name> { 448 pub fn name(self, db: &impl DefDatabase) -> Option<Name> {
440 db.struct_data(Struct { id: self.id }).name.clone() 449 db.struct_data(Struct { id: self.id }).name.clone()
441 } 450 }
442 451
@@ -468,7 +477,10 @@ pub struct Enum {
468} 477}
469 478
470impl Enum { 479impl Enum {
471 pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::EnumDef>) { 480 pub fn source(
481 self,
482 db: &(impl DefDatabase + AstDatabase),
483 ) -> (HirFileId, TreeArc<ast::EnumDef>) {
472 self.id.source(db) 484 self.id.source(db)
473 } 485 }
474 486
@@ -476,7 +488,7 @@ impl Enum {
476 self.id.module(db) 488 self.id.module(db)
477 } 489 }
478 490
479 pub fn name(self, db: &impl HirDatabase) -> Option<Name> { 491 pub fn name(self, db: &impl DefDatabase) -> Option<Name> {
480 db.enum_data(self).name.clone() 492 db.enum_data(self).name.clone()
481 } 493 }
482 494
@@ -521,7 +533,10 @@ pub struct EnumVariant {
521} 533}
522 534
523impl EnumVariant { 535impl EnumVariant {
524 pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::EnumVariant>) { 536 pub fn source(
537 &self,
538 db: &(impl DefDatabase + AstDatabase),
539 ) -> (HirFileId, TreeArc<ast::EnumVariant>) {
525 self.source_impl(db) 540 self.source_impl(db)
526 } 541 }
527 pub fn module(&self, db: &impl HirDatabase) -> Module { 542 pub fn module(&self, db: &impl HirDatabase) -> Module {
@@ -610,7 +625,10 @@ pub struct FnSignature {
610} 625}
611 626
612impl FnSignature { 627impl FnSignature {
613 pub(crate) fn fn_signature_query(db: &impl DefDatabase, func: Function) -> Arc<FnSignature> { 628 pub(crate) fn fn_signature_query(
629 db: &(impl DefDatabase + AstDatabase),
630 func: Function,
631 ) -> Arc<FnSignature> {
614 let (_, node) = func.source(db); 632 let (_, node) = func.source(db);
615 let name = node.name().map(|n| n.as_name()).unwrap_or_else(Name::missing); 633 let name = node.name().map(|n| n.as_name()).unwrap_or_else(Name::missing);
616 let mut params = Vec::new(); 634 let mut params = Vec::new();
@@ -668,7 +686,7 @@ impl FnSignature {
668} 686}
669 687
670impl Function { 688impl Function {
671 pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::FnDef>) { 689 pub fn source(self, db: &(impl DefDatabase + AstDatabase)) -> (HirFileId, TreeArc<ast::FnDef>) {
672 self.id.source(db) 690 self.id.source(db)
673 } 691 }
674 692
@@ -752,7 +770,10 @@ pub struct Const {
752} 770}
753 771
754impl Const { 772impl Const {
755 pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::ConstDef>) { 773 pub fn source(
774 self,
775 db: &(impl DefDatabase + AstDatabase),
776 ) -> (HirFileId, TreeArc<ast::ConstDef>) {
756 self.id.source(db) 777 self.id.source(db)
757 } 778 }
758 779
@@ -809,7 +830,7 @@ impl ConstSignature {
809 } 830 }
810 831
811 pub(crate) fn const_signature_query( 832 pub(crate) fn const_signature_query(
812 db: &impl DefDatabase, 833 db: &(impl DefDatabase + AstDatabase),
813 konst: Const, 834 konst: Const,
814 ) -> Arc<ConstSignature> { 835 ) -> Arc<ConstSignature> {
815 let (_, node) = konst.source(db); 836 let (_, node) = konst.source(db);
@@ -817,7 +838,7 @@ impl ConstSignature {
817 } 838 }
818 839
819 pub(crate) fn static_signature_query( 840 pub(crate) fn static_signature_query(
820 db: &impl DefDatabase, 841 db: &(impl DefDatabase + AstDatabase),
821 konst: Static, 842 konst: Static,
822 ) -> Arc<ConstSignature> { 843 ) -> Arc<ConstSignature> {
823 let (_, node) = konst.source(db); 844 let (_, node) = konst.source(db);
@@ -838,7 +859,10 @@ pub struct Static {
838} 859}
839 860
840impl Static { 861impl Static {
841 pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::StaticDef>) { 862 pub fn source(
863 self,
864 db: &(impl DefDatabase + AstDatabase),
865 ) -> (HirFileId, TreeArc<ast::StaticDef>) {
842 self.id.source(db) 866 self.id.source(db)
843 } 867 }
844 868
@@ -873,7 +897,10 @@ pub struct Trait {
873} 897}
874 898
875impl Trait { 899impl Trait {
876 pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::TraitDef>) { 900 pub fn source(
901 self,
902 db: &(impl DefDatabase + AstDatabase),
903 ) -> (HirFileId, TreeArc<ast::TraitDef>) {
877 self.id.source(db) 904 self.id.source(db)
878 } 905 }
879 906
@@ -922,7 +949,10 @@ pub struct TypeAlias {
922} 949}
923 950
924impl TypeAlias { 951impl TypeAlias {
925 pub fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::TypeAliasDef>) { 952 pub fn source(
953 self,
954 db: &(impl DefDatabase + AstDatabase),
955 ) -> (HirFileId, TreeArc<ast::TypeAliasDef>) {
926 self.id.source(db) 956 self.id.source(db)
927 } 957 }
928 958