Skip to content

Commit c093db0

Browse files
committed
Remove has_default from FieldId
1 parent e4e7c95 commit c093db0

File tree

11 files changed

+35
-64
lines changed

11 files changed

+35
-64
lines changed

src/tools/rust-analyzer/crates/hir-def/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,6 @@ pub type LocalModuleId = Idx<nameres::ModuleData>;
519519
pub struct FieldId {
520520
pub parent: VariantId,
521521
pub local_id: LocalFieldId,
522-
pub has_default: bool,
523522
}
524523

525524
impl FieldId {

src/tools/rust-analyzer/crates/hir-ty/src/infer/closure.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,11 +1167,9 @@ impl InferenceContext<'_> {
11671167
};
11681168
let mut p = place.clone();
11691169
self.current_capture_span_stack.push(MirSpan::PatId(arg));
1170-
let has_default = vd.fields()[local_id].has_default;
11711170
p.projections.push(ProjectionElem::Field(Either::Left(FieldId {
11721171
parent: variant,
11731172
local_id,
1174-
has_default,
11751173
})));
11761174
self.consume_with_pat(p, arg);
11771175
self.current_capture_span_stack.pop();
@@ -1221,13 +1219,12 @@ impl InferenceContext<'_> {
12211219
.iter()
12221220
.zip(fields.clone())
12231221
.chain(ar.iter().rev().zip(fields.rev()));
1224-
for (&arg, (i, d)) in it {
1222+
for (&arg, (i, _)) in it {
12251223
let mut p = place.clone();
12261224
self.current_capture_span_stack.push(MirSpan::PatId(arg));
12271225
p.projections.push(ProjectionElem::Field(Either::Left(FieldId {
12281226
parent: variant,
12291227
local_id: i,
1230-
has_default: d.has_default,
12311228
})));
12321229
self.consume_with_pat(p, arg);
12331230
self.current_capture_span_stack.pop();

src/tools/rust-analyzer/crates/hir-ty/src/infer/expr.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1748,15 +1748,13 @@ impl InferenceContext<'_> {
17481748
TyKind::Adt(AdtId(hir_def::AdtId::StructId(s)), parameters) => {
17491749
let vd = &self.db.struct_data(*s).variant_data;
17501750
let local_id = vd.field(name)?;
1751-
let has_default = vd.fields()[local_id].has_default;
1752-
let field = FieldId { parent: (*s).into(), local_id, has_default };
1751+
let field = FieldId { parent: (*s).into(), local_id };
17531752
(field, parameters.clone())
17541753
}
17551754
TyKind::Adt(AdtId(hir_def::AdtId::UnionId(u)), parameters) => {
17561755
let vd = &self.db.union_data(*u).variant_data;
17571756
let local_id = vd.field(name)?;
1758-
let has_default = vd.fields()[local_id].has_default;
1759-
let field = FieldId { parent: (*u).into(), local_id, has_default };
1757+
let field = FieldId { parent: (*u).into(), local_id };
17601758
(field, parameters.clone())
17611759
}
17621760
_ => return None,

src/tools/rust-analyzer/crates/hir-ty/src/mir/lower.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -872,13 +872,10 @@ impl<'ctx> MirLowerCtx<'ctx> {
872872
None => {
873873
let local_id =
874874
LocalFieldId::from_raw(RawIdx::from(i as u32));
875-
let has_default =
876-
variant_data.fields()[local_id].has_default;
877875
let p = sp.project(
878876
ProjectionElem::Field(Either::Left(FieldId {
879877
parent: variant_id,
880878
local_id,
881-
has_default,
882879
})),
883880
&mut self.result.projection_store,
884881
);
@@ -900,12 +897,10 @@ impl<'ctx> MirLowerCtx<'ctx> {
900897
};
901898
let local_id =
902899
variant_data.field(name).ok_or(MirLowerError::UnresolvedField)?;
903-
let has_default = variant_data.fields()[local_id].has_default;
904900
let place = place.project(
905901
PlaceElem::Field(Either::Left(FieldId {
906902
parent: union_id.into(),
907903
local_id,
908-
has_default,
909904
})),
910905
&mut self.result.projection_store,
911906
);

src/tools/rust-analyzer/crates/hir-ty/src/mir/lower/pattern_matching.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -632,12 +632,10 @@ impl MirLowerCtx<'_> {
632632
.map(|x| {
633633
let field_id =
634634
variant_data.field(&x.name).ok_or(MirLowerError::UnresolvedField)?;
635-
let has_default = variant_data.fields()[field_id].has_default;
636635
Ok((
637636
PlaceElem::Field(Either::Left(FieldId {
638637
parent: v,
639638
local_id: field_id,
640-
has_default,
641639
})),
642640
x.pat,
643641
))
@@ -646,12 +644,8 @@ impl MirLowerCtx<'_> {
646644
self.pattern_match_adt(current, current_else, it.into_iter(), cond_place, mode)?
647645
}
648646
AdtPatternShape::Tuple { args, ellipsis } => {
649-
let fields = variant_data.fields().iter().map(|(x, d)| {
650-
PlaceElem::Field(Either::Left(FieldId {
651-
parent: v,
652-
local_id: x,
653-
has_default: d.has_default,
654-
}))
647+
let fields = variant_data.fields().iter().map(|(x, _)| {
648+
PlaceElem::Field(Either::Left(FieldId { parent: v, local_id: x }))
655649
});
656650
self.pattern_match_tuple_like(
657651
current,

src/tools/rust-analyzer/crates/hir-ty/src/tests.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ fn check_impl(
143143
let vd = db.variant_data(variant_id);
144144
defs.extend(vd.fields().iter().filter_map(|(local_id, fd)| {
145145
if fd.has_default {
146-
let field = FieldId { parent: variant_id, local_id, has_default: true };
146+
let field = FieldId { parent: variant_id, local_id };
147147
Some(DefWithBodyId::FieldId(field))
148148
} else {
149149
None
@@ -161,7 +161,7 @@ fn check_impl(
161161
let vd = db.variant_data(variant_id);
162162
defs.extend(vd.fields().iter().filter_map(|(local_id, fd)| {
163163
if fd.has_default {
164-
let field = FieldId { parent: variant_id, local_id, has_default: true };
164+
let field = FieldId { parent: variant_id, local_id };
165165
Some(DefWithBodyId::FieldId(field))
166166
} else {
167167
None
@@ -433,7 +433,7 @@ fn infer_with_mismatches(content: &str, include_mismatches: bool) -> String {
433433
let vd = db.variant_data(variant_id);
434434
defs.extend(vd.fields().iter().filter_map(|(local_id, fd)| {
435435
if fd.has_default {
436-
let field = FieldId { parent: variant_id, local_id, has_default: true };
436+
let field = FieldId { parent: variant_id, local_id };
437437
Some(DefWithBodyId::FieldId(field))
438438
} else {
439439
None
@@ -451,7 +451,7 @@ fn infer_with_mismatches(content: &str, include_mismatches: bool) -> String {
451451
let vd = db.variant_data(variant_id);
452452
defs.extend(vd.fields().iter().filter_map(|(local_id, fd)| {
453453
if fd.has_default {
454-
let field = FieldId { parent: variant_id, local_id, has_default: true };
454+
let field = FieldId { parent: variant_id, local_id };
455455
Some(DefWithBodyId::FieldId(field))
456456
} else {
457457
None

src/tools/rust-analyzer/crates/hir/src/display.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,8 @@ impl HirDisplay for Struct {
252252
f.write_char('(')?;
253253
let mut it = variant_data.fields().iter().peekable();
254254

255-
while let Some((id, d)) = it.next() {
256-
let field = Field { parent: (*self).into(), id, has_default: d.has_default };
255+
while let Some((id, _)) = it.next() {
256+
let field = Field { parent: (*self).into(), id };
257257
write_visibility(module_id, field.visibility(f.db), f)?;
258258
field.ty(f.db).hir_fmt(f)?;
259259
if it.peek().is_some() {

src/tools/rust-analyzer/crates/hir/src/from_id.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,13 +237,13 @@ impl From<VariantDef> for VariantId {
237237

238238
impl From<Field> for FieldId {
239239
fn from(def: Field) -> Self {
240-
FieldId { parent: def.parent.into(), local_id: def.id, has_default: def.has_default }
240+
FieldId { parent: def.parent.into(), local_id: def.id }
241241
}
242242
}
243243

244244
impl From<FieldId> for Field {
245245
fn from(def: FieldId) -> Self {
246-
Field { parent: def.parent.into(), id: def.local_id, has_default: def.has_default }
246+
Field { parent: def.parent.into(), id: def.local_id }
247247
}
248248
}
249249

src/tools/rust-analyzer/crates/hir/src/lib.rs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -415,18 +415,24 @@ impl ModuleDef {
415415
def.diagnostics(db, &mut acc);
416416
}
417417

418-
let fields = match self {
419-
ModuleDef::Adt(Adt::Struct(it)) => Some(it.fields(db)),
420-
ModuleDef::Adt(Adt::Union(it)) => Some(it.fields(db)),
421-
ModuleDef::Variant(it) => Some(it.fields(db)),
418+
let vd: Option<(VariantDef, Arc<VariantData>)> = match self {
419+
ModuleDef::Adt(Adt::Struct(it)) => {
420+
Some((it.into(), db.struct_data(it.id).variant_data.clone()))
421+
}
422+
ModuleDef::Adt(Adt::Union(it)) => {
423+
Some((it.into(), db.union_data(it.id).variant_data.clone()))
424+
}
425+
ModuleDef::Variant(it) => {
426+
Some((it.into(), db.enum_variant_data(it.id).variant_data.clone()))
427+
}
422428
_ => None,
423429
};
424-
if let Some(fields) = fields {
425-
for field in fields {
426-
if !field.has_default {
430+
if let Some((parent, vd)) = vd {
431+
for (id, fd) in vd.fields().iter() {
432+
if !fd.has_default {
427433
continue;
428434
}
429-
let def: DefWithBody = field.into();
435+
let def: DefWithBody = DefWithBody::Field(Field { parent, id });
430436
def.diagnostics(db, &mut acc, style_lints);
431437
}
432438
}
@@ -1252,7 +1258,6 @@ impl From<&Field> for DefWithBodyId {
12521258
pub struct Field {
12531259
pub(crate) parent: VariantDef,
12541260
pub(crate) id: LocalFieldId,
1255-
pub(crate) has_default: bool,
12561261
}
12571262

12581263
#[derive(Debug, PartialEq, Eq, Copy, Clone, Hash)]
@@ -1418,7 +1423,7 @@ impl Struct {
14181423
.variant_data
14191424
.fields()
14201425
.iter()
1421-
.map(|(id, d)| Field { parent: self.into(), id, has_default: d.has_default })
1426+
.map(|(id, _)| Field { parent: self.into(), id })
14221427
.collect()
14231428
}
14241429

@@ -1480,7 +1485,7 @@ impl Union {
14801485
.variant_data
14811486
.fields()
14821487
.iter()
1483-
.map(|(id, d)| Field { parent: self.into(), id, has_default: d.has_default })
1488+
.map(|(id, _)| Field { parent: self.into(), id })
14841489
.collect()
14851490
}
14861491

@@ -1610,7 +1615,7 @@ impl Variant {
16101615
self.variant_data(db)
16111616
.fields()
16121617
.iter()
1613-
.map(|(id, d)| Field { parent: self.into(), id, has_default: d.has_default })
1618+
.map(|(id, _)| Field { parent: self.into(), id })
16141619
.collect()
16151620
}
16161621

@@ -5166,13 +5171,10 @@ impl Type {
51665171
_ => return Vec::new(),
51675172
};
51685173

5169-
let var_data = db.variant_data(variant_id);
5170-
let fields = var_data.fields();
51715174
db.field_types(variant_id)
51725175
.iter()
51735176
.map(|(local_id, ty)| {
5174-
let has_default = fields[local_id].has_default;
5175-
let def = Field { parent: variant_id.into(), id: local_id, has_default };
5177+
let def = Field { parent: variant_id.into(), id: local_id };
51765178
let ty = ty.clone().substitute(Interner, substs);
51775179
(def, self.derived(ty))
51785180
})

src/tools/rust-analyzer/crates/hir/src/semantics/child_by_source.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -160,11 +160,7 @@ impl ChildBySource for VariantId {
160160
let arena_map = arena_map.as_ref();
161161
let parent = *self;
162162
for (local_id, source) in arena_map.value.iter() {
163-
let has_default = match source {
164-
Either::Left(_) => false,
165-
Either::Right(rec) => rec.expr().is_some(),
166-
};
167-
let id = FieldId { parent, local_id, has_default };
163+
let id = FieldId { parent, local_id };
168164
match source.clone() {
169165
Either::Left(source) => res[keys::TUPLE_FIELD].insert(AstPtr::new(&source), id),
170166
Either::Right(source) => res[keys::RECORD_FIELD].insert(AstPtr::new(&source), id),

src/tools/rust-analyzer/crates/hir/src/source_analyzer.rs

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -630,10 +630,8 @@ impl SourceAnalyzer {
630630
let (adt, subst) = self.infer.as_ref()?.type_of_expr_or_pat(expr_id)?.as_adt()?;
631631
let variant = self.infer.as_ref()?.variant_resolution_for_expr_or_pat(expr_id)?;
632632
let variant_data = variant.variant_data(db.upcast());
633-
let fields = variant_data.fields();
634633
let local_id = variant_data.field(&local_name)?;
635-
let field =
636-
FieldId { parent: variant, local_id, has_default: fields[local_id].has_default };
634+
let field = FieldId { parent: variant, local_id };
637635
let field_ty =
638636
db.field_types(variant).get(field.local_id)?.clone().substitute(Interner, subst);
639637
Some((
@@ -654,10 +652,8 @@ impl SourceAnalyzer {
654652
let pat_id = self.pat_id(&record_pat.into())?;
655653
let variant = self.infer.as_ref()?.variant_resolution_for_pat(pat_id)?;
656654
let variant_data = variant.variant_data(db.upcast());
657-
let fields = variant_data.fields();
658655
let local_id = variant_data.field(&field_name)?;
659-
let field =
660-
FieldId { parent: variant, local_id, has_default: fields[local_id].has_default };
656+
let field = FieldId { parent: variant, local_id };
661657
let (adt, subst) = self.infer.as_ref()?.type_of_pat.get(pat_id)?.as_adt()?;
662658
let field_ty =
663659
db.field_types(variant).get(field.local_id)?.clone().substitute(Interner, subst);
@@ -1066,17 +1062,11 @@ impl SourceAnalyzer {
10661062
missing_fields: Vec<LocalFieldId>,
10671063
) -> Vec<(Field, Type)> {
10681064
let field_types = db.field_types(variant);
1069-
let var_data = db.variant_data(variant);
1070-
let fields = var_data.fields();
10711065

10721066
missing_fields
10731067
.into_iter()
10741068
.map(|local_id| {
1075-
let field = FieldId {
1076-
parent: variant,
1077-
local_id,
1078-
has_default: fields[local_id].has_default,
1079-
};
1069+
let field = FieldId { parent: variant, local_id };
10801070
let ty = field_types[local_id].clone().substitute(Interner, substs);
10811071
(field.into(), Type::new_with_resolver_inner(db, &self.resolver, ty))
10821072
})

0 commit comments

Comments
 (0)