aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/code_model.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-11-20 15:00:01 +0000
committerAleksey Kladov <[email protected]>2019-11-20 15:41:23 +0000
commit111891dc2dc1d2c7ea87144e8e3ddefe23fc7b6d (patch)
tree7e96d773620a3b03254d00386711cdc7c909e3ee /crates/ra_hir/src/code_model.rs
parentee95a35664e6fe9153f6324cfc57872ca365887c (diff)
Move constants to new ID
This allows us to get rid of trait item index
Diffstat (limited to 'crates/ra_hir/src/code_model.rs')
-rw-r--r--crates/ra_hir/src/code_model.rs25
1 files changed, 15 insertions, 10 deletions
diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs
index 669666989..920899dce 100644
--- a/crates/ra_hir/src/code_model.rs
+++ b/crates/ra_hir/src/code_model.rs
@@ -729,7 +729,7 @@ pub struct Const {
729 729
730impl Const { 730impl Const {
731 pub fn module(self, db: &impl DefDatabase) -> Module { 731 pub fn module(self, db: &impl DefDatabase) -> Module {
732 Module { id: self.id.module(db) } 732 Module { id: self.id.lookup(db).module(db) }
733 } 733 }
734 734
735 pub fn krate(self, db: &impl DefDatabase) -> Option<Crate> { 735 pub fn krate(self, db: &impl DefDatabase) -> Option<Crate> {
@@ -748,22 +748,27 @@ impl Const {
748 db.infer(self.into()) 748 db.infer(self.into())
749 } 749 }
750 750
751 /// The containing impl block, if this is a method. 751 /// The containing impl block, if this is a type alias.
752 pub fn impl_block(self, db: &impl DefDatabase) -> Option<ImplBlock> { 752 pub fn impl_block(self, db: &impl DefDatabase) -> Option<ImplBlock> {
753 ImplBlock::containing(db, self.into()) 753 match self.container(db) {
754 Some(Container::ImplBlock(it)) => Some(it),
755 _ => None,
756 }
754 } 757 }
755 758
759 /// The containing trait, if this is a trait type alias definition.
756 pub fn parent_trait(self, db: &impl DefDatabase) -> Option<Trait> { 760 pub fn parent_trait(self, db: &impl DefDatabase) -> Option<Trait> {
757 db.trait_items_index(self.module(db).id).get_parent_trait(self.id.into()).map(Trait::from) 761 match self.container(db) {
762 Some(Container::Trait(it)) => Some(it),
763 _ => None,
764 }
758 } 765 }
759 766
760 pub fn container(self, db: &impl DefDatabase) -> Option<Container> { 767 pub fn container(self, db: &impl DefDatabase) -> Option<Container> {
761 if let Some(impl_block) = self.impl_block(db) { 768 match self.id.lookup(db).container {
762 Some(impl_block.into()) 769 ContainerId::TraitId(it) => Some(Container::Trait(it.into())),
763 } else if let Some(trait_) = self.parent_trait(db) { 770 ContainerId::ImplId(it) => Some(Container::ImplBlock(it.into())),
764 Some(trait_.into()) 771 ContainerId::ModuleId(_) => None,
765 } else {
766 None
767 } 772 }
768 } 773 }
769 774