Rollup merge of #138376 - nnethercote:hir-ItemKind-ident-precursors, r=compiler-errors

Item-related cleanups

I have been looking at `hir::Item` closely and found a few minor cleanup opportunities.

r? ```@spastorino```
This commit is contained in:
Matthias Krüger 2025-03-12 08:06:51 +01:00 committed by GitHub
commit 4c6edb1df8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 24 additions and 56 deletions

View file

@ -4332,16 +4332,6 @@ pub enum OwnerNode<'hir> {
} }
impl<'hir> OwnerNode<'hir> { impl<'hir> OwnerNode<'hir> {
pub fn ident(&self) -> Option<Ident> {
match self {
OwnerNode::Item(Item { ident, .. })
| OwnerNode::ForeignItem(ForeignItem { ident, .. })
| OwnerNode::ImplItem(ImplItem { ident, .. })
| OwnerNode::TraitItem(TraitItem { ident, .. }) => Some(*ident),
OwnerNode::Crate(..) | OwnerNode::Synthetic => None,
}
}
pub fn span(&self) -> Span { pub fn span(&self) -> Span {
match self { match self {
OwnerNode::Item(Item { span, .. }) OwnerNode::Item(Item { span, .. })

View file

@ -553,24 +553,6 @@ impl<'a> State<'a> {
self.word(";") self.word(";")
} }
fn print_item_type(
&mut self,
item: &hir::Item<'_>,
generics: &hir::Generics<'_>,
inner: impl Fn(&mut Self),
) {
self.head("type");
self.print_ident(item.ident);
self.print_generic_params(generics.params);
self.end(); // end the inner ibox
self.print_where_clause(generics);
self.space();
inner(self);
self.word(";");
self.end(); // end the outer ibox
}
fn print_item(&mut self, item: &hir::Item<'_>) { fn print_item(&mut self, item: &hir::Item<'_>) {
self.hardbreak_if_not_bol(); self.hardbreak_if_not_bol();
self.maybe_print_comment(item.span.lo()); self.maybe_print_comment(item.span.lo());
@ -683,10 +665,17 @@ impl<'a> State<'a> {
self.end() self.end()
} }
hir::ItemKind::TyAlias(ty, generics) => { hir::ItemKind::TyAlias(ty, generics) => {
self.print_item_type(item, generics, |state| { self.head("type");
state.word_space("="); self.print_ident(item.ident);
state.print_type(ty); self.print_generic_params(generics.params);
}); self.end(); // end the inner ibox
self.print_where_clause(generics);
self.space();
self.word_space("=");
self.print_type(ty);
self.word(";");
self.end(); // end the outer ibox
} }
hir::ItemKind::Enum(ref enum_definition, params) => { hir::ItemKind::Enum(ref enum_definition, params) => {
self.print_enum_def(enum_definition, params, item.ident.name, item.span); self.print_enum_def(enum_definition, params, item.ident.name, item.span);

View file

@ -646,7 +646,7 @@ impl<'a> Parser<'a> {
let impl_items = self.parse_item_list(attrs, |p| p.parse_impl_item(ForceCollect::No))?; let impl_items = self.parse_item_list(attrs, |p| p.parse_impl_item(ForceCollect::No))?;
let item_kind = match ty_second { let (of_trait, self_ty) = match ty_second {
Some(ty_second) => { Some(ty_second) => {
// impl Trait for Type // impl Trait for Type
if !has_for { if !has_for {
@ -679,31 +679,20 @@ impl<'a> Parser<'a> {
}; };
let trait_ref = TraitRef { path, ref_id: ty_first.id }; let trait_ref = TraitRef { path, ref_id: ty_first.id };
ItemKind::Impl(Box::new(Impl { (Some(trait_ref), ty_second)
safety,
polarity,
defaultness,
constness,
generics,
of_trait: Some(trait_ref),
self_ty: ty_second,
items: impl_items,
}))
}
None => {
// impl Type
ItemKind::Impl(Box::new(Impl {
safety,
polarity,
defaultness,
constness,
generics,
of_trait: None,
self_ty: ty_first,
items: impl_items,
}))
} }
None => (None, ty_first), // impl Type
}; };
let item_kind = ItemKind::Impl(Box::new(Impl {
safety,
polarity,
defaultness,
constness,
generics,
of_trait,
self_ty,
items: impl_items,
}));
Ok((Ident::empty(), item_kind)) Ok((Ident::empty(), item_kind))
} }