Skip to content

Commit 52c0ecb

Browse files
Merge #8380
8380: infer: remove `record_pat_field_resolutions` field r=jonas-schievink a=jonas-schievink Same as #8376, this can be computed from other data bors r+ Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
2 parents e6a1c9c + 230c763 commit 52c0ecb

File tree

3 files changed

+9
-15
lines changed

3 files changed

+9
-15
lines changed

crates/hir/src/source_analyzer.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,12 +185,16 @@ impl SourceAnalyzer {
185185

186186
pub(crate) fn resolve_record_pat_field(
187187
&self,
188-
_db: &dyn HirDatabase,
188+
db: &dyn HirDatabase,
189189
field: &ast::RecordPatField,
190190
) -> Option<Field> {
191-
let pat_id = self.pat_id(&field.pat()?)?;
192-
let struct_field = self.infer.as_ref()?.record_pat_field_resolution(pat_id)?;
193-
Some(struct_field.into())
191+
let field_name = field.field_name()?.as_name();
192+
let record_pat = ast::RecordPat::cast(field.syntax().parent().and_then(|p| p.parent())?)?;
193+
let pat_id = self.pat_id(&record_pat.into())?;
194+
let variant = self.infer.as_ref()?.variant_resolution_for_pat(pat_id)?;
195+
let variant_data = variant.variant_data(db.upcast());
196+
let field = FieldId { parent: variant, local_id: variant_data.field(&field_name)? };
197+
Some(field.into())
194198
}
195199

196200
pub(crate) fn resolve_macro_call(

crates/hir_ty/src/infer.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,7 @@ pub struct InferenceResult {
131131
method_resolutions: FxHashMap<ExprId, FunctionId>,
132132
/// For each field access expr, records the field it resolves to.
133133
field_resolutions: FxHashMap<ExprId, FieldId>,
134-
record_pat_field_resolutions: FxHashMap<PatId, FieldId>,
135-
/// For each struct literal, records the variant it resolves to.
134+
/// For each struct literal or pattern, records the variant it resolves to.
136135
variant_resolutions: FxHashMap<ExprOrPatId, VariantId>,
137136
/// For each associated item record what it resolves to
138137
assoc_resolutions: FxHashMap<ExprOrPatId, AssocItemId>,
@@ -151,9 +150,6 @@ impl InferenceResult {
151150
pub fn field_resolution(&self, expr: ExprId) -> Option<FieldId> {
152151
self.field_resolutions.get(&expr).copied()
153152
}
154-
pub fn record_pat_field_resolution(&self, pat: PatId) -> Option<FieldId> {
155-
self.record_pat_field_resolutions.get(&pat).copied()
156-
}
157153
pub fn variant_resolution_for_expr(&self, id: ExprId) -> Option<VariantId> {
158154
self.variant_resolutions.get(&id.into()).copied()
159155
}

crates/hir_ty/src/infer/pat.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ use chalk_ir::Mutability;
77
use hir_def::{
88
expr::{BindingAnnotation, Expr, Literal, Pat, PatId, RecordFieldPat},
99
path::Path,
10-
FieldId,
1110
};
1211
use hir_expand::name::Name;
1312

@@ -80,11 +79,6 @@ impl<'a> InferenceContext<'a> {
8079
let field_tys = def.map(|it| self.db.field_types(it)).unwrap_or_default();
8180
for subpat in subpats {
8281
let matching_field = var_data.as_ref().and_then(|it| it.field(&subpat.name));
83-
if let Some(local_id) = matching_field {
84-
let field_def = FieldId { parent: def.unwrap(), local_id };
85-
self.result.record_pat_field_resolutions.insert(subpat.pat, field_def);
86-
}
87-
8882
let expected_ty = matching_field.map_or(self.err_ty(), |field| {
8983
field_tys[field].clone().substitute(&Interner, &substs)
9084
});

0 commit comments

Comments
 (0)