diff options
author | Aleksey Kladov <[email protected]> | 2019-01-25 17:32:34 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-01-25 17:38:03 +0000 |
commit | 9f2574c97e55e2af1d1b93f60307aa9d41f55f42 (patch) | |
tree | 78e2eb10ef2046c4aa03b8d486325f1691b81342 /crates/ra_hir/src/ty.rs | |
parent | 0044514a4e5fe2484071dc81ae59fc291626c05a (diff) |
add ability to get strcut field source
Diffstat (limited to 'crates/ra_hir/src/ty.rs')
-rw-r--r-- | crates/ra_hir/src/ty.rs | 27 |
1 files changed, 4 insertions, 23 deletions
diff --git a/crates/ra_hir/src/ty.rs b/crates/ra_hir/src/ty.rs index 97a876da8..714eaaae5 100644 --- a/crates/ra_hir/src/ty.rs +++ b/crates/ra_hir/src/ty.rs | |||
@@ -38,7 +38,7 @@ use crate::{ | |||
38 | expr::{Body, Expr, BindingAnnotation, Literal, ExprId, Pat, PatId, UnaryOp, BinaryOp, Statement, FieldPat}, | 38 | expr::{Body, Expr, BindingAnnotation, Literal, ExprId, Pat, PatId, UnaryOp, BinaryOp, Statement, FieldPat}, |
39 | generics::GenericParams, | 39 | generics::GenericParams, |
40 | path::GenericArg, | 40 | path::GenericArg, |
41 | adt::VariantData, | 41 | adt::VariantDef, |
42 | }; | 42 | }; |
43 | 43 | ||
44 | /// The ID of a type variable. | 44 | /// The ID of a type variable. |
@@ -696,28 +696,6 @@ pub(super) fn type_for_def(db: &impl HirDatabase, def: TypableDef) -> Ty { | |||
696 | } | 696 | } |
697 | } | 697 | } |
698 | 698 | ||
699 | #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] | ||
700 | pub enum VariantDef { | ||
701 | Struct(Struct), | ||
702 | EnumVariant(EnumVariant), | ||
703 | } | ||
704 | impl_froms!(VariantDef: Struct, EnumVariant); | ||
705 | |||
706 | impl VariantDef { | ||
707 | pub(crate) fn field(self, db: &impl HirDatabase, name: &Name) -> Option<StructField> { | ||
708 | match self { | ||
709 | VariantDef::Struct(it) => it.field(db, name), | ||
710 | VariantDef::EnumVariant(it) => it.field(db, name), | ||
711 | } | ||
712 | } | ||
713 | pub(crate) fn variant_data(self, db: &impl HirDatabase) -> Arc<VariantData> { | ||
714 | match self { | ||
715 | VariantDef::Struct(it) => it.variant_data(db), | ||
716 | VariantDef::EnumVariant(it) => it.variant_data(db), | ||
717 | } | ||
718 | } | ||
719 | } | ||
720 | |||
721 | pub(super) fn type_for_field(db: &impl HirDatabase, field: StructField) -> Ty { | 699 | pub(super) fn type_for_field(db: &impl HirDatabase, field: StructField) -> Ty { |
722 | let parent_def = field.parent_def(db); | 700 | let parent_def = field.parent_def(db); |
723 | let (generics, module) = match parent_def { | 701 | let (generics, module) = match parent_def { |
@@ -744,6 +722,9 @@ impl InferenceResult { | |||
744 | pub fn method_resolution(&self, expr: ExprId) -> Option<Function> { | 722 | pub fn method_resolution(&self, expr: ExprId) -> Option<Function> { |
745 | self.method_resolutions.get(&expr).map(|it| *it) | 723 | self.method_resolutions.get(&expr).map(|it| *it) |
746 | } | 724 | } |
725 | pub fn field_resolution(&self, expr: ExprId) -> Option<StructField> { | ||
726 | self.field_resolutions.get(&expr).map(|it| *it) | ||
727 | } | ||
747 | } | 728 | } |
748 | 729 | ||
749 | impl Index<ExprId> for InferenceResult { | 730 | impl Index<ExprId> for InferenceResult { |