mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-30 11:37:31 +00:00
Compute diagnostics of a field body iff it has one
This commit is contained in:
parent
c134b20c9c
commit
b4d4d02db8
10 changed files with 64 additions and 22 deletions
|
|
@ -630,7 +630,10 @@ impl SourceAnalyzer {
|
|||
let (adt, subst) = self.infer.as_ref()?.type_of_expr_or_pat(expr_id)?.as_adt()?;
|
||||
let variant = self.infer.as_ref()?.variant_resolution_for_expr_or_pat(expr_id)?;
|
||||
let variant_data = variant.variant_data(db.upcast());
|
||||
let field = FieldId { parent: variant, local_id: variant_data.field(&local_name)? };
|
||||
let fields = variant_data.fields();
|
||||
let local_id = variant_data.field(&local_name)?;
|
||||
let field =
|
||||
FieldId { parent: variant, local_id, has_default: fields[local_id].has_default };
|
||||
let field_ty =
|
||||
db.field_types(variant).get(field.local_id)?.clone().substitute(Interner, subst);
|
||||
Some((
|
||||
|
|
@ -651,7 +654,10 @@ impl SourceAnalyzer {
|
|||
let pat_id = self.pat_id(&record_pat.into())?;
|
||||
let variant = self.infer.as_ref()?.variant_resolution_for_pat(pat_id)?;
|
||||
let variant_data = variant.variant_data(db.upcast());
|
||||
let field = FieldId { parent: variant, local_id: variant_data.field(&field_name)? };
|
||||
let fields = variant_data.fields();
|
||||
let local_id = variant_data.field(&field_name)?;
|
||||
let field =
|
||||
FieldId { parent: variant, local_id, has_default: fields[local_id].has_default };
|
||||
let (adt, subst) = self.infer.as_ref()?.type_of_pat.get(pat_id)?.as_adt()?;
|
||||
let field_ty =
|
||||
db.field_types(variant).get(field.local_id)?.clone().substitute(Interner, subst);
|
||||
|
|
@ -1060,11 +1066,17 @@ impl SourceAnalyzer {
|
|||
missing_fields: Vec<LocalFieldId>,
|
||||
) -> Vec<(Field, Type)> {
|
||||
let field_types = db.field_types(variant);
|
||||
let var_data = db.variant_data(variant);
|
||||
let fields = var_data.fields();
|
||||
|
||||
missing_fields
|
||||
.into_iter()
|
||||
.map(|local_id| {
|
||||
let field = FieldId { parent: variant, local_id };
|
||||
let field = FieldId {
|
||||
parent: variant,
|
||||
local_id,
|
||||
has_default: fields[local_id].has_default,
|
||||
};
|
||||
let ty = field_types[local_id].clone().substitute(Interner, substs);
|
||||
(field.into(), Type::new_with_resolver_inner(db, &self.resolver, ty))
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue