mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-30 11:37:31 +00:00
Salsa idiomize VariantFields query
This commit is contained in:
parent
332434aecd
commit
889d84a1be
33 changed files with 201 additions and 131 deletions
|
|
@ -156,14 +156,14 @@ impl<'db> SourceAnalyzer<'db> {
|
|||
InFile { file_id, .. }: InFile<&SyntaxNode>,
|
||||
_offset: Option<TextSize>,
|
||||
) -> SourceAnalyzer<'db> {
|
||||
let (fields, source_map) = db.variant_fields_with_source_map(def);
|
||||
let (fields, source_map) = def.fields_with_source_map(db);
|
||||
let resolver = def.resolver(db);
|
||||
SourceAnalyzer {
|
||||
resolver,
|
||||
body_or_sig: Some(BodyOrSig::VariantFields {
|
||||
def,
|
||||
store: fields.store.clone(),
|
||||
source_map,
|
||||
source_map: source_map.clone(),
|
||||
}),
|
||||
file_id,
|
||||
}
|
||||
|
|
@ -713,7 +713,7 @@ impl<'db> SourceAnalyzer<'db> {
|
|||
};
|
||||
let (adt, subst) = self.infer()?.type_of_expr_or_pat(expr_id)?.as_adt()?;
|
||||
let variant = self.infer()?.variant_resolution_for_expr_or_pat(expr_id)?;
|
||||
let variant_data = variant.variant_data(db);
|
||||
let variant_data = variant.fields(db);
|
||||
let field = FieldId { parent: variant, local_id: variant_data.field(&local_name)? };
|
||||
let field_ty =
|
||||
db.field_types(variant).get(field.local_id)?.clone().substitute(Interner, subst);
|
||||
|
|
@ -734,7 +734,7 @@ impl<'db> SourceAnalyzer<'db> {
|
|||
let record_pat = ast::RecordPat::cast(field.syntax().parent().and_then(|p| p.parent())?)?;
|
||||
let pat_id = self.pat_id(&record_pat.into())?;
|
||||
let variant = self.infer()?.variant_resolution_for_pat(pat_id.as_pat()?)?;
|
||||
let variant_data = variant.variant_data(db);
|
||||
let variant_data = variant.fields(db);
|
||||
let field = FieldId { parent: variant, local_id: variant_data.field(&field_name)? };
|
||||
let (adt, subst) = self.infer()?.type_of_pat.get(pat_id.as_pat()?)?.as_adt()?;
|
||||
let field_ty =
|
||||
|
|
@ -803,8 +803,8 @@ impl<'db> SourceAnalyzer<'db> {
|
|||
};
|
||||
container = Either::Right(db.normalize_projection(projection, trait_env.clone()));
|
||||
}
|
||||
let handle_variants = |variant, subst: &Substitution, container: &mut _| {
|
||||
let fields = db.variant_fields(variant);
|
||||
let handle_variants = |variant: VariantId, subst: &Substitution, container: &mut _| {
|
||||
let fields = variant.fields(db);
|
||||
let field = fields.field(&field_name.as_name())?;
|
||||
let field_types = db.field_types(variant);
|
||||
*container = Either::Right(field_types[field].clone().substitute(Interner, subst));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue