diff --git a/compiler/rustc_resolve/src/late.rs b/compiler/rustc_resolve/src/late.rs index 543817f5c06..de6e121c79b 100644 --- a/compiler/rustc_resolve/src/late.rs +++ b/compiler/rustc_resolve/src/late.rs @@ -581,7 +581,7 @@ impl MaybeExported<'_> { } #[derive(Default)] -struct DiagnosticMetadata<'ast> { +struct DiagMetadata<'ast> { /// The current trait's associated items' ident, used for diagnostic suggestions. current_trait_assoc_items: Option<&'ast [P]>, @@ -674,7 +674,7 @@ struct LateResolutionVisitor<'a, 'b, 'ast, 'tcx> { current_trait_ref: Option<(Module<'a>, TraitRef)>, /// Fields used to add information to diagnostic errors. - diagnostic_metadata: Box>, + diag_metadata: Box>, /// State used to know whether to ignore resolution errors for function bodies. /// @@ -694,12 +694,12 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast, // as they do not correspond to actual code. } fn visit_item(&mut self, item: &'ast Item) { - let prev = replace(&mut self.diagnostic_metadata.current_item, Some(item)); + let prev = replace(&mut self.diag_metadata.current_item, Some(item)); // Always report errors in items we just entered. let old_ignore = replace(&mut self.in_func_body, false); self.with_lifetime_rib(LifetimeRibKind::Item, |this| this.resolve_item(item)); self.in_func_body = old_ignore; - self.diagnostic_metadata.current_item = prev; + self.diag_metadata.current_item = prev; } fn visit_arm(&mut self, arm: &'ast Arm) { self.resolve_arm(arm); @@ -716,10 +716,10 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast, self.resolve_expr(expr, None); } fn visit_pat(&mut self, p: &'ast Pat) { - let prev = self.diagnostic_metadata.current_pat; - self.diagnostic_metadata.current_pat = Some(p); + let prev = self.diag_metadata.current_pat; + self.diag_metadata.current_pat = Some(p); visit::walk_pat(self, p); - self.diagnostic_metadata.current_pat = prev; + self.diag_metadata.current_pat = prev; } fn visit_local(&mut self, local: &'ast Local) { let local_spans = match local.pat.kind { @@ -731,13 +731,13 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast, local.kind.init().map(|init| init.span), )), }; - let original = replace(&mut self.diagnostic_metadata.current_let_binding, local_spans); + let original = replace(&mut self.diag_metadata.current_let_binding, local_spans); self.resolve_local(local); - self.diagnostic_metadata.current_let_binding = original; + self.diag_metadata.current_let_binding = original; } fn visit_ty(&mut self, ty: &'ast Ty) { - let prev = self.diagnostic_metadata.current_trait_object; - let prev_ty = self.diagnostic_metadata.current_type_path; + let prev = self.diag_metadata.current_trait_object; + let prev_ty = self.diag_metadata.current_type_path; match &ty.kind { TyKind::Ref(None, _) => { // Elided lifetime in reference: we resolve as if there was some lifetime `'_` with @@ -748,7 +748,7 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast, visit::walk_ty(self, ty); } TyKind::Path(qself, path) => { - self.diagnostic_metadata.current_type_path = Some(ty); + self.diag_metadata.current_type_path = Some(ty); self.smart_resolve_path(ty.id, qself, path, PathSource::Type); // Check whether we should interpret this as a bare trait object. @@ -795,7 +795,7 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast, self.lifetime_elision_candidates = candidates; } TyKind::TraitObject(bounds, ..) => { - self.diagnostic_metadata.current_trait_object = Some(&bounds[..]); + self.diag_metadata.current_trait_object = Some(&bounds[..]); visit::walk_ty(self, ty) } TyKind::BareFn(bare_fn) => { @@ -842,8 +842,8 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast, } _ => visit::walk_ty(self, ty), } - self.diagnostic_metadata.current_trait_object = prev; - self.diagnostic_metadata.current_type_path = prev_ty; + self.diag_metadata.current_trait_object = prev; + self.diag_metadata.current_type_path = prev_ty; } fn visit_poly_trait_ref(&mut self, tref: &'ast PolyTraitRef) { let span = tref.span.shrink_to_lo().to(tref.trait_ref.path.span.shrink_to_lo()); @@ -906,7 +906,7 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast, } } fn visit_fn(&mut self, fn_kind: FnKind<'ast>, sp: Span, fn_id: NodeId) { - let previous_value = self.diagnostic_metadata.current_function; + let previous_value = self.diag_metadata.current_function; match fn_kind { // Bail if the function is foreign, and thus cannot validly have // a body, or if there's no body for some other reason. @@ -939,7 +939,7 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast, return; } FnKind::Fn(..) => { - self.diagnostic_metadata.current_function = Some((fn_kind, sp)); + self.diag_metadata.current_function = Some((fn_kind, sp)); } // Do not update `current_function` for closures: it suggests `self` parameters. FnKind::Closure(..) => {} @@ -1040,17 +1040,14 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast, } }) }); - self.diagnostic_metadata.current_function = previous_value; + self.diag_metadata.current_function = previous_value; } fn visit_lifetime(&mut self, lifetime: &'ast Lifetime, use_ctxt: visit::LifetimeCtxt) { self.resolve_lifetime(lifetime, use_ctxt) } fn visit_generics(&mut self, generics: &'ast Generics) { - self.visit_generic_params( - &generics.params, - self.diagnostic_metadata.current_self_item.is_some(), - ); + self.visit_generic_params(&generics.params, self.diag_metadata.current_self_item.is_some()); for p in &generics.where_clause.predicates { self.visit_where_predicate(p); } @@ -1062,7 +1059,7 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast, ClosureBinder::For { generic_params, .. } => { self.visit_generic_params( generic_params, - self.diagnostic_metadata.current_self_item.is_some(), + self.diag_metadata.current_self_item.is_some(), ); } } @@ -1070,7 +1067,7 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast, fn visit_generic_arg(&mut self, arg: &'ast GenericArg) { debug!("visit_generic_arg({:?})", arg); - let prev = replace(&mut self.diagnostic_metadata.currently_processing_generic_args, true); + let prev = replace(&mut self.diag_metadata.currently_processing_generic_args, true); match arg { GenericArg::Type(ref ty) => { // We parse const arguments as path types as we cannot distinguish them during @@ -1101,7 +1098,7 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast, }, ); - self.diagnostic_metadata.currently_processing_generic_args = prev; + self.diag_metadata.currently_processing_generic_args = prev; return; } } @@ -1114,7 +1111,7 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast, self.resolve_anon_const(ct, AnonConstKind::ConstArg(IsRepeatExpr::No)) } } - self.diagnostic_metadata.currently_processing_generic_args = prev; + self.diag_metadata.currently_processing_generic_args = prev; } fn visit_assoc_constraint(&mut self, constraint: &'ast AssocConstraint) { @@ -1192,8 +1189,7 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast, fn visit_where_predicate(&mut self, p: &'ast WherePredicate) { debug!("visit_where_predicate {:?}", p); - let previous_value = - replace(&mut self.diagnostic_metadata.current_where_predicate, Some(p)); + let previous_value = replace(&mut self.diag_metadata.current_where_predicate, Some(p)); self.with_lifetime_rib(LifetimeRibKind::AnonymousReportError, |this| { if let WherePredicate::BoundPredicate(WhereBoundPredicate { ref bounded_ty, @@ -1224,7 +1220,7 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast, visit::walk_where_predicate(this, p); } }); - self.diagnostic_metadata.current_where_predicate = previous_value; + self.diag_metadata.current_where_predicate = previous_value; } fn visit_inline_asm(&mut self, asm: &'ast InlineAsm) { @@ -1297,7 +1293,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> { lifetime_ribs: Vec::new(), lifetime_elision_candidates: None, current_trait_ref: None, - diagnostic_metadata: Default::default(), + diag_metadata: Default::default(), // errors at module scope should always be reported in_func_body: false, lifetime_uses: Default::default(), @@ -1707,7 +1703,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> { return; } LifetimeRibKind::ElisionFailure => { - self.diagnostic_metadata.current_elision_failures.push(missing_lifetime); + self.diag_metadata.current_elision_failures.push(missing_lifetime); self.record_lifetime_res(lifetime.id, LifetimeRes::Error, elision_candidate); return; } @@ -1911,7 +1907,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> { break; } LifetimeRibKind::ElisionFailure => { - self.diagnostic_metadata.current_elision_failures.push(missing_lifetime); + self.diag_metadata.current_elision_failures.push(missing_lifetime); for id in node_ids { self.record_lifetime_res( id, @@ -2003,7 +1999,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> { let elision_lifetime = self.resolve_fn_params(has_self, inputs); debug!(?elision_lifetime); - let outer_failures = take(&mut self.diagnostic_metadata.current_elision_failures); + let outer_failures = take(&mut self.diag_metadata.current_elision_failures); let output_rib = if let Ok(res) = elision_lifetime.as_ref() { self.r.lifetime_elision_allowed.insert(fn_id); LifetimeRibKind::Elided(*res) @@ -2012,7 +2008,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> { }; self.with_lifetime_rib(output_rib, |this| visit::walk_fn_ret_ty(this, output_ty)); let elision_failures = - replace(&mut self.diagnostic_metadata.current_elision_failures, outer_failures); + replace(&mut self.diag_metadata.current_elision_failures, outer_failures); if !elision_failures.is_empty() { let Err(failure_info) = elision_lifetime else { bug!() }; self.report_missing_lifetime_specifiers(elision_failures, Some(failure_info)); @@ -2187,7 +2183,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> { } let impl_self = self - .diagnostic_metadata + .diag_metadata .current_self_type .as_ref() .and_then(|ty| { @@ -2385,7 +2381,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> { items: ref impl_items, .. }) => { - self.diagnostic_metadata.current_impl_items = Some(impl_items); + self.diag_metadata.current_impl_items = Some(impl_items); self.resolve_implementation( &item.attrs, generics, @@ -2394,7 +2390,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> { item.id, impl_items, ); - self.diagnostic_metadata.current_impl_items = None; + self.diag_metadata.current_impl_items = None; } ItemKind::Trait(box Trait { ref generics, ref bounds, ref items, .. }) => { @@ -2744,24 +2740,23 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> { fn with_current_self_type(&mut self, self_type: &Ty, f: impl FnOnce(&mut Self) -> T) -> T { // Handle nested impls (inside fn bodies) let previous_value = - replace(&mut self.diagnostic_metadata.current_self_type, Some(self_type.clone())); + replace(&mut self.diag_metadata.current_self_type, Some(self_type.clone())); let result = f(self); - self.diagnostic_metadata.current_self_type = previous_value; + self.diag_metadata.current_self_type = previous_value; result } fn with_current_self_item(&mut self, self_item: &Item, f: impl FnOnce(&mut Self) -> T) -> T { - let previous_value = - replace(&mut self.diagnostic_metadata.current_self_item, Some(self_item.id)); + let previous_value = replace(&mut self.diag_metadata.current_self_item, Some(self_item.id)); let result = f(self); - self.diagnostic_metadata.current_self_item = previous_value; + self.diag_metadata.current_self_item = previous_value; result } /// When evaluating a `trait` use its associated types' idents for suggestions in E0412. fn resolve_trait_items(&mut self, trait_items: &'ast [P]) { let trait_assoc_items = - replace(&mut self.diagnostic_metadata.current_trait_assoc_items, Some(trait_items)); + replace(&mut self.diag_metadata.current_trait_assoc_items, Some(trait_items)); let walk_assoc_item = |this: &mut Self, generics: &Generics, kind, item: &'ast AssocItem| { @@ -2818,7 +2813,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> { }; } - self.diagnostic_metadata.current_trait_assoc_items = trait_assoc_items; + self.diag_metadata.current_trait_assoc_items = trait_assoc_items; } /// This is called to resolve a trait reference from an `impl` (i.e., `impl Trait for Foo`). @@ -2832,7 +2827,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> { let mut new_id = None; if let Some(trait_ref) = opt_trait_ref { let path: Vec<_> = Segment::from_path(&trait_ref.path); - self.diagnostic_metadata.currently_processing_impl_trait = + self.diag_metadata.currently_processing_impl_trait = Some((trait_ref.clone(), self_type.clone())); let res = self.smart_resolve_path_fragment( &None, @@ -2841,7 +2836,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> { Finalize::new(trait_ref.ref_id, trait_ref.path.span), RecordPartialRes::Yes, ); - self.diagnostic_metadata.currently_processing_impl_trait = None; + self.diag_metadata.currently_processing_impl_trait = None; if let Some(def_id) = res.expect_full_res().opt_def_id() { new_id = Some(def_id); new_val = Some((self.r.expect_module(def_id), trait_ref.clone())); @@ -3737,7 +3732,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> { let def_id = this.parent_scope.module.nearest_parent_mod(); let instead = res.is_some(); - let suggestion = if let Some((start, end)) = this.diagnostic_metadata.in_range + let suggestion = if let Some((start, end)) = this.diag_metadata.in_range && path[0].ident.span.lo() == end.span.lo() { let mut sugg = "."; @@ -3890,7 +3885,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> { ) { Ok(Some(partial_res)) if let Some(res) = partial_res.full_res() => { // if we also have an associated type that matches the ident, stash a suggestion - if let Some(items) = self.diagnostic_metadata.current_trait_assoc_items + if let Some(items) = self.diag_metadata.current_trait_assoc_items && let [Segment { ident, .. }] = path && items.iter().any(|item| { item.ident == *ident && matches!(item.kind, AssocItemKind::Type(_)) @@ -4189,7 +4184,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> { fn with_resolved_label(&mut self, label: Option