diff options
Diffstat (limited to 'crates/ra_hir/src/code_model.rs')
-rw-r--r-- | crates/ra_hir/src/code_model.rs | 70 |
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 | ||
6 | use crate::{ | 6 | use 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 | ||
148 | impl ModuleSource { | 148 | impl 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 | ||
169 | impl Module { | 169 | impl 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 | ||
370 | impl Struct { | 373 | impl 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 | ||
434 | impl Union { | 440 | impl 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 | ||
470 | impl Enum { | 479 | impl 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 | ||
523 | impl EnumVariant { | 535 | impl 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 | ||
612 | impl FnSignature { | 627 | impl 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 | ||
670 | impl Function { | 688 | impl 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 | ||
754 | impl Const { | 772 | impl 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 | ||
840 | impl Static { | 861 | impl 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 | ||
875 | impl Trait { | 899 | impl 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 | ||
924 | impl TypeAlias { | 951 | impl 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 | ||