[] impl_item_ref: rustc::hir::ImplItemRef,
[] macro_def: rustc::hir::MacroDef<$tcx>,
[] path: rustc::hir::Path,
- [] struct_field: rustc::hir::StructField,
+ [] struct_field: rustc::hir::StructField<$tcx>,
[] trait_item_ref: rustc::hir::TraitItemRef,
[] ty: rustc::hir::Ty,
[] variant: rustc::hir::Variant<$tcx>,
_: Span) {
walk_struct_def(self, s)
}
- fn visit_struct_field(&mut self, s: &'v StructField) {
+ fn visit_struct_field(&mut self, s: &'v StructField<'v>) {
walk_struct_field(self, s)
}
fn visit_enum_def(&mut self,
walk_list!(visitor, visit_struct_field, struct_definition.fields());
}
-pub fn walk_struct_field<'v, V: Visitor<'v>>(visitor: &mut V, struct_field: &'v StructField) {
+pub fn walk_struct_field<'v, V: Visitor<'v>>(visitor: &mut V, struct_field: &'v StructField<'v>) {
visitor.visit_id(struct_field.hir_id);
visitor.visit_vis(&struct_field.vis);
visitor.visit_ident(struct_field.ident);
visitor.visit_ty(&struct_field.ty);
- walk_list!(visitor, visit_attribute, &struct_field.attrs);
+ walk_list!(visitor, visit_attribute, struct_field.attrs);
}
pub fn walk_block<'v, V: Visitor<'v>>(visitor: &mut V, block: &'v Block) {
}
}
- fn lower_struct_field(&mut self, (index, f): (usize, &StructField)) -> hir::StructField {
+ fn lower_struct_field(&mut self, (index, f): (usize, &StructField)) -> hir::StructField<'hir> {
let ty = if let TyKind::Path(ref qself, ref path) = f.ty.kind {
let t = self.lower_path_ty(
&f.ty,
ParamMode::ExplicitNamed, // no `'_` in declarations (Issue #61124)
ImplTraitContext::disallowed()
);
- P(t)
+ self.arena.alloc(t)
} else {
- self.lower_ty(&f.ty, ImplTraitContext::disallowed())
+ let t = self.lower_ty(&f.ty, ImplTraitContext::disallowed());
+ self.arena.alloc(t.into_inner())
};
hir::StructField {
span: f.span,
},
vis: self.lower_visibility(&f.vis, None),
ty,
- attrs: self.lower_attrs(&f.attrs),
+ attrs: self.lower_attrs_arena(&f.attrs),
}
}
});
}
- fn visit_struct_field(&mut self, field: &'hir StructField) {
+ fn visit_struct_field(&mut self, field: &'hir StructField<'hir>) {
self.insert(field.span, field.hir_id, Node::Field(field));
self.with_parent(field.hir_id, |this| {
intravisit::walk_struct_field(this, field);
impl Named for Item<'_> { fn name(&self) -> Name { self.ident.name } }
impl Named for ForeignItem<'_> { fn name(&self) -> Name { self.ident.name } }
impl Named for Variant<'_> { fn name(&self) -> Name { self.ident.name } }
-impl Named for StructField { fn name(&self) -> Name { self.ident.name } }
+impl Named for StructField<'_> { fn name(&self) -> Name { self.ident.name } }
impl Named for TraitItem<'_> { fn name(&self) -> Name { self.ident.name } }
impl Named for ImplItem<'_> { fn name(&self) -> Name { self.ident.name } }
}
#[derive(RustcEncodable, RustcDecodable, Debug, HashStable)]
-pub struct StructField {
+pub struct StructField<'hir> {
pub span: Span,
#[stable_hasher(project(name))]
pub ident: Ident,
pub vis: Visibility,
pub hir_id: HirId,
- pub ty: P<Ty>,
- pub attrs: HirVec<Attribute>,
+ pub ty: &'hir Ty,
+ pub attrs: &'hir [Attribute],
}
-impl StructField {
+impl StructField<'_> {
// Still necessary in couple of places
pub fn is_positional(&self) -> bool {
let first = self.ident.as_str().as_bytes()[0];
/// A struct variant.
///
/// E.g., `Bar { .. }` as in `enum Foo { Bar { .. } }`.
- Struct(&'hir [StructField], /* recovered */ bool),
+ Struct(&'hir [StructField<'hir>], /* recovered */ bool),
/// A tuple variant.
///
/// E.g., `Bar(..)` as in `enum Foo { Bar(..) }`.
- Tuple(&'hir [StructField], HirId),
+ Tuple(&'hir [StructField<'hir>], HirId),
/// A unit variant.
///
/// E.g., `Bar = ..` as in `enum Foo { Bar = .. }`.
impl VariantData<'hir> {
/// Return the fields of this variant.
- pub fn fields(&self) -> &'hir [StructField] {
+ pub fn fields(&self) -> &'hir [StructField<'hir>] {
match *self {
VariantData::Struct(ref fields, ..) | VariantData::Tuple(ref fields, ..) => fields,
_ => &[],
TraitItem(&'hir TraitItem<'hir>),
ImplItem(&'hir ImplItem<'hir>),
Variant(&'hir Variant<'hir>),
- Field(&'hir StructField),
+ Field(&'hir StructField<'hir>),
AnonConst(&'hir AnonConst),
Expr(&'hir Expr),
Stmt(&'hir Stmt),
lint_callback!(self, check_struct_def_post, s);
}
- fn visit_struct_field(&mut self, s: &'tcx hir::StructField) {
+ fn visit_struct_field(&mut self, s: &'tcx hir::StructField<'tcx>) {
self.with_lint_attrs(s.hir_id, &s.attrs, |cx| {
lint_callback!(cx, check_struct_field, s);
hir_visit::walk_struct_field(cx, s);
fn check_impl_item_post(a: &$hir hir::ImplItem<$hir>);
fn check_struct_def(a: &$hir hir::VariantData<$hir>);
fn check_struct_def_post(a: &$hir hir::VariantData<$hir>);
- fn check_struct_field(a: &$hir hir::StructField);
+ fn check_struct_field(a: &$hir hir::StructField<$hir>);
fn check_variant(a: &$hir hir::Variant<$hir>);
fn check_variant_post(a: &$hir hir::Variant<$hir>);
fn check_lifetime(a: &$hir hir::Lifetime);
})
}
- fn visit_struct_field(&mut self, s: &'tcx hir::StructField) {
+ fn visit_struct_field(&mut self, s: &'tcx hir::StructField<'tcx>) {
self.with_lint_attrs(s.hir_id, &s.attrs, |builder| {
intravisit::walk_struct_field(builder, s);
})
})
}
- fn visit_struct_field(&mut self, s: &'tcx StructField) {
+ fn visit_struct_field(&mut self, s: &'tcx StructField<'tcx>) {
self.annotate(s.hir_id, &s.attrs, s.span, AnnotationKind::Required, |v| {
intravisit::walk_struct_field(v, s);
});
intravisit::walk_variant(self, var, g, item_id);
}
- fn visit_struct_field(&mut self, s: &'tcx StructField) {
+ fn visit_struct_field(&mut self, s: &'tcx StructField<'tcx>) {
self.check_missing_stability(s.hir_id, s.span, "field");
intravisit::walk_struct_field(self, s);
}
intravisit::walk_impl_item(self, impl_item);
}
- fn visit_struct_field(&mut self, s: &'tcx hir::StructField) {
+ fn visit_struct_field(&mut self, s: &'tcx hir::StructField<'tcx>) {
self.process_attrs(s.hir_id, &s.attrs);
intravisit::walk_struct_field(self, s);
}
desc);
}
- fn check_struct_field(&mut self, cx: &LateContext<'_, '_>, sf: &hir::StructField) {
+ fn check_struct_field(&mut self, cx: &LateContext<'_, '_>, sf: &hir::StructField<'_>) {
if !sf.is_positional() {
self.check_missing_docs_attrs(cx,
Some(sf.hir_id),
foreign_item.span, true);
}
- fn check_struct_field(&mut self, cx: &LateContext<'_, '_>, field: &hir::StructField) {
+ fn check_struct_field(&mut self, cx: &LateContext<'_, '_>, field: &hir::StructField<'_>) {
self.perform_lint(cx, "field", field.hir_id, &field.vis, field.span, false);
}
record!(self.per_def.kind[def_id] <- EntryKind::Field);
record!(self.per_def.visibility[def_id] <- field.vis);
record!(self.per_def.span[def_id] <- self.tcx.def_span(def_id));
- record!(self.per_def.attributes[def_id] <- &variant_data.fields()[field_index].attrs);
+ record!(self.per_def.attributes[def_id] <- variant_data.fields()[field_index].attrs);
self.encode_stability(def_id);
self.encode_deprecation(def_id);
self.encode_item_type(def_id);
should_warn && !self.symbol_is_live(item.hir_id)
}
- fn should_warn_about_field(&mut self, field: &hir::StructField) -> bool {
+ fn should_warn_about_field(&mut self, field: &hir::StructField<'_>) -> bool {
let field_type = self.tcx.type_of(self.tcx.hir().local_def_id(field.hir_id));
!field.is_positional()
&& !self.symbol_is_live(field.hir_id)
intravisit::walk_foreign_item(self, fi);
}
- fn visit_struct_field(&mut self, field: &'tcx hir::StructField) {
+ fn visit_struct_field(&mut self, field: &'tcx hir::StructField<'tcx>) {
if self.should_warn_about_field(&field) {
self.warn_dead_code(field.hir_id, field.span, field.ident.name, "field", "read");
}
hir_visit::walk_param_bound(self, bounds)
}
- fn visit_struct_field(&mut self, s: &'v hir::StructField) {
+ fn visit_struct_field(&mut self, s: &'v hir::StructField<'v>) {
self.record("StructField", Id::Node(s.hir_id), s);
hir_visit::walk_struct_field(self, s)
}
}
}
- fn visit_struct_field(&mut self, s: &'tcx hir::StructField) {
+ fn visit_struct_field(&mut self, s: &'tcx hir::StructField<'tcx>) {
if s.vis.node.is_pub() || self.in_variant {
intravisit::walk_struct_field(self, s);
}
intravisit::walk_impl_item(self, impl_item);
}
- fn visit_struct_field(&mut self, s: &'tcx hir::StructField) {
+ fn visit_struct_field(&mut self, s: &'tcx hir::StructField<'tcx>) {
self.process_attrs(s.hir_id, &s.attrs);
intravisit::walk_struct_field(self, s);
}
}
}
-impl Clean<Item> for hir::StructField {
+impl Clean<Item> for hir::StructField<'_> {
fn clean(&self, cx: &DocContext<'_>) -> Item {
let local_did = cx.tcx.hir().local_def_id(self.hir_id);
pub name: Name,
pub generics: &'hir hir::Generics,
pub attrs: &'hir [ast::Attribute],
- pub fields: &'hir [hir::StructField],
+ pub fields: &'hir [hir::StructField<'hir>],
pub whence: Span,
}
pub name: Name,
pub generics: &'hir hir::Generics,
pub attrs: &'hir [ast::Attribute],
- pub fields: &'hir [hir::StructField],
+ pub fields: &'hir [hir::StructField<'hir>],
pub whence: Span,
}