aboutsummaryrefslogtreecommitdiff
path: root/crates/hir_ty
diff options
context:
space:
mode:
authorcynecx <[email protected]>2021-03-24 22:03:30 +0000
committercynecx <[email protected]>2021-03-24 22:03:38 +0000
commit7155f815b96fbc1de5816e3954c4c03c43e709c9 (patch)
treea5f97cab5b73ff0c9895d4d957f2a7bfc7026cb7 /crates/hir_ty
parent96c88680b2d680f42809f838e79213e087d1fa1c (diff)
hir_ty: don't call write_field_resolution when field candidate isn't visible
Diffstat (limited to 'crates/hir_ty')
-rw-r--r--crates/hir_ty/src/infer/expr.rs10
1 files changed, 4 insertions, 6 deletions
diff --git a/crates/hir_ty/src/infer/expr.rs b/crates/hir_ty/src/infer/expr.rs
index b08880cdf..46d713a7b 100644
--- a/crates/hir_ty/src/infer/expr.rs
+++ b/crates/hir_ty/src/infer/expr.rs
@@ -459,9 +459,8 @@ impl<'a> InferenceContext<'a> {
459 TyKind::Adt(AdtId(hir_def::AdtId::StructId(s)), parameters) => { 459 TyKind::Adt(AdtId(hir_def::AdtId::StructId(s)), parameters) => {
460 let local_id = self.db.struct_data(*s).variant_data.field(name)?; 460 let local_id = self.db.struct_data(*s).variant_data.field(name)?;
461 let field = FieldId { parent: (*s).into(), local_id }; 461 let field = FieldId { parent: (*s).into(), local_id };
462 let is_visible_in_ctx = is_visible(&field); 462 if is_visible(&field) {
463 self.write_field_resolution(tgt_expr, field); 463 self.write_field_resolution(tgt_expr, field);
464 if is_visible_in_ctx {
465 Some( 464 Some(
466 self.db.field_types((*s).into())[field.local_id] 465 self.db.field_types((*s).into())[field.local_id]
467 .clone() 466 .clone()
@@ -474,9 +473,8 @@ impl<'a> InferenceContext<'a> {
474 TyKind::Adt(AdtId(hir_def::AdtId::UnionId(u)), parameters) => { 473 TyKind::Adt(AdtId(hir_def::AdtId::UnionId(u)), parameters) => {
475 let local_id = self.db.union_data(*u).variant_data.field(name)?; 474 let local_id = self.db.union_data(*u).variant_data.field(name)?;
476 let field = FieldId { parent: (*u).into(), local_id }; 475 let field = FieldId { parent: (*u).into(), local_id };
477 let is_visible_in_ctx = is_visible(&field); 476 if is_visible(&field) {
478 self.write_field_resolution(tgt_expr, field); 477 self.write_field_resolution(tgt_expr, field);
479 if is_visible_in_ctx {
480 Some( 478 Some(
481 self.db.field_types((*u).into())[field.local_id] 479 self.db.field_types((*u).into())[field.local_id]
482 .clone() 480 .clone()