diff options
author | Aleksey Kladov <[email protected]> | 2019-11-20 14:39:58 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-11-20 14:43:03 +0000 |
commit | 64c21ed19594b323e72605ba8c5dd4c6eee433f6 (patch) | |
tree | 6b48928149607fa6396357af29abfb4eb3d4d791 /crates/ra_hir/src/code_model.rs | |
parent | b7a36b54431ca5b746af53549a1b6e142570c7f4 (diff) |
Switch type aliases to new sources
Diffstat (limited to 'crates/ra_hir/src/code_model.rs')
-rw-r--r-- | crates/ra_hir/src/code_model.rs | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index c49190a0f..b8d48a500 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs | |||
@@ -13,7 +13,7 @@ use hir_def::{ | |||
13 | traits::TraitData, | 13 | traits::TraitData, |
14 | type_ref::{Mutability, TypeRef}, | 14 | type_ref::{Mutability, TypeRef}, |
15 | AssocItemId, CrateModuleId, FunctionContainerId, HasModule, ImplId, LocalEnumVariantId, | 15 | AssocItemId, CrateModuleId, FunctionContainerId, HasModule, ImplId, LocalEnumVariantId, |
16 | LocalStructFieldId, Lookup, ModuleId, UnionId, | 16 | LocalStructFieldId, Lookup, ModuleId, TypeAliasContainerId, UnionId, |
17 | }; | 17 | }; |
18 | use hir_expand::{ | 18 | use hir_expand::{ |
19 | diagnostics::DiagnosticSink, | 19 | diagnostics::DiagnosticSink, |
@@ -954,30 +954,34 @@ pub struct TypeAlias { | |||
954 | 954 | ||
955 | impl TypeAlias { | 955 | impl TypeAlias { |
956 | pub fn module(self, db: &impl DefDatabase) -> Module { | 956 | pub fn module(self, db: &impl DefDatabase) -> Module { |
957 | Module { id: self.id.module(db) } | 957 | Module { id: self.id.lookup(db).module(db) } |
958 | } | 958 | } |
959 | 959 | ||
960 | pub fn krate(self, db: &impl DefDatabase) -> Option<Crate> { | 960 | pub fn krate(self, db: &impl DefDatabase) -> Option<Crate> { |
961 | Some(self.module(db).krate()) | 961 | Some(self.module(db).krate()) |
962 | } | 962 | } |
963 | 963 | ||
964 | /// The containing impl block, if this is a method. | 964 | /// The containing impl block, if this is a type alias. |
965 | pub fn impl_block(self, db: &impl DefDatabase) -> Option<ImplBlock> { | 965 | pub fn impl_block(self, db: &impl DefDatabase) -> Option<ImplBlock> { |
966 | ImplBlock::containing(db, self.into()) | 966 | match self.container(db) { |
967 | Some(Container::ImplBlock(it)) => Some(it), | ||
968 | _ => None, | ||
969 | } | ||
967 | } | 970 | } |
968 | 971 | ||
969 | /// The containing trait, if this is a trait method definition. | 972 | /// The containing trait, if this is a trait type alias definition. |
970 | pub fn parent_trait(self, db: &impl DefDatabase) -> Option<Trait> { | 973 | pub fn parent_trait(self, db: &impl DefDatabase) -> Option<Trait> { |
971 | db.trait_items_index(self.module(db).id).get_parent_trait(self.id.into()).map(Trait::from) | 974 | match self.container(db) { |
975 | Some(Container::Trait(it)) => Some(it), | ||
976 | _ => None, | ||
977 | } | ||
972 | } | 978 | } |
973 | 979 | ||
974 | pub fn container(self, db: &impl DefDatabase) -> Option<Container> { | 980 | pub fn container(self, db: &impl DefDatabase) -> Option<Container> { |
975 | if let Some(impl_block) = self.impl_block(db) { | 981 | match self.id.lookup(db).container { |
976 | Some(impl_block.into()) | 982 | TypeAliasContainerId::TraitId(it) => Some(Container::Trait(it.into())), |
977 | } else if let Some(trait_) = self.parent_trait(db) { | 983 | TypeAliasContainerId::ImplId(it) => Some(Container::ImplBlock(it.into())), |
978 | Some(trait_.into()) | 984 | TypeAliasContainerId::ModuleId(_) => None, |
979 | } else { | ||
980 | None | ||
981 | } | 985 | } |
982 | } | 986 | } |
983 | 987 | ||