From ab0b63992be0cec4999810096a53b40f63f90349 Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Tue, 25 Dec 2018 15:15:40 +0100 Subject: Implement basic completion for fields --- crates/ra_hir/src/adt.rs | 14 +++++++++++++- crates/ra_hir/src/lib.rs | 1 + crates/ra_hir/src/ty.rs | 5 +++-- 3 files changed, 17 insertions(+), 3 deletions(-) (limited to 'crates/ra_hir/src') diff --git a/crates/ra_hir/src/adt.rs b/crates/ra_hir/src/adt.rs index 03770ed7d..e65f8deb8 100644 --- a/crates/ra_hir/src/adt.rs +++ b/crates/ra_hir/src/adt.rs @@ -124,6 +124,15 @@ pub struct StructField { ty: Ty, } +impl StructField { + pub fn name(&self) -> SmolStr { + self.name.clone() + } + pub fn ty(&self) -> Ty { + self.ty.clone() + } +} + /// Fields of an enum variant or struct #[derive(Debug, Clone, PartialEq, Eq)] pub enum VariantData { @@ -168,7 +177,10 @@ impl VariantData { } pub(crate) fn get_field_ty(&self, field_name: &str) -> Option { - self.fields().iter().find(|f| f.name == field_name).map(|f| f.ty.clone()) + self.fields() + .iter() + .find(|f| f.name == field_name) + .map(|f| f.ty.clone()) } pub fn fields(&self) -> &[StructField] { diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs index 796970d8a..68fdbb7ea 100644 --- a/crates/ra_hir/src/lib.rs +++ b/crates/ra_hir/src/lib.rs @@ -44,6 +44,7 @@ pub use self::{ module::{Module, ModuleId, Problem, nameres::{ItemMap, PerNs, Namespace}, ModuleScope, Resolution}, function::{Function, FnScopes}, adt::{Struct, Enum}, + ty::Ty, }; pub use self::function::FnSignatureInfo; diff --git a/crates/ra_hir/src/ty.rs b/crates/ra_hir/src/ty.rs index f931f3c87..83da13f1a 100644 --- a/crates/ra_hir/src/ty.rs +++ b/crates/ra_hir/src/ty.rs @@ -574,7 +574,8 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { match receiver_ty { Ty::Tuple(fields) => { let i = text.parse::().ok(); - i.and_then(|i| fields.get(i).cloned()).unwrap_or(Ty::Unknown) + i.and_then(|i| fields.get(i).cloned()) + .unwrap_or(Ty::Unknown) } Ty::Adt { def_id, .. } => { let field_ty = match def_id.resolve(self.db)? { @@ -589,7 +590,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { } else { Ty::Unknown } - }, + } ast::Expr::TryExpr(e) => { let _inner_ty = if let Some(e) = e.expr() { self.infer_expr(e)? -- cgit v1.2.3