Skip to content

Commit 297f7db

Browse files
refactor: switch to AssocItem
TraitItem/ImplItem were combined to `AssocItem`, along with their respecitve `*Kind`'s, the `Method` variant was also renamed to `Fn` in the new `AssocItemKind` rust-lang/rust#67131
1 parent c73348a commit 297f7db

File tree

3 files changed

+51
-49
lines changed

3 files changed

+51
-49
lines changed

rustfmt-core/rustfmt-lib/src/items.rs

+11-15
Original file line numberDiff line numberDiff line change
@@ -633,7 +633,7 @@ impl<'a> FmtVisitor<'a> {
633633
combine_strs_with_missing_comments(&context, &attrs_str, &variant_body, span, shape, false)
634634
}
635635

636-
fn visit_impl_items(&mut self, items: &[ast::ImplItem]) {
636+
fn visit_impl_items(&mut self, items: &[ast::AssocItem]) {
637637
if self.get_context().config.reorder_impl_items() {
638638
// Create visitor for each items, then reorder them.
639639
let mut buffer = vec![];
@@ -643,26 +643,22 @@ impl<'a> FmtVisitor<'a> {
643643
self.buffer.clear();
644644
}
645645
// type -> opaque -> const -> macro -> method
646-
use crate::ast::ImplItemKind::*;
647-
fn need_empty_line(a: &ast::ImplItemKind, b: &ast::ImplItemKind) -> bool {
646+
use crate::ast::AssocItemKind::*;
647+
fn need_empty_line(a: &ast::AssocItemKind, b: &ast::AssocItemKind) -> bool {
648648
match (a, b) {
649649
(TyAlias(..), TyAlias(..))
650-
| (Const(..), Const(..))
651-
| (OpaqueTy(..), OpaqueTy(..)) => false,
650+
| (Const(..), Const(..)) => false,
652651
_ => true,
653652
}
654653
}
655654

656655
buffer.sort_by(|(_, a), (_, b)| match (&a.kind, &b.kind) {
657656
(TyAlias(..), TyAlias(..))
658657
| (Const(..), Const(..))
659-
| (Macro(..), Macro(..))
660-
| (OpaqueTy(..), OpaqueTy(..)) => a.ident.as_str().cmp(&b.ident.as_str()),
661-
(Method(..), Method(..)) => a.span.lo().cmp(&b.span.lo()),
658+
| (Macro(..), Macro(..)) => a.ident.as_str().cmp(&b.ident.as_str()),
659+
(Fn(..), Fn(..)) => a.span.lo().cmp(&b.span.lo()),
662660
(TyAlias(..), _) => Ordering::Less,
663661
(_, TyAlias(..)) => Ordering::Greater,
664-
(OpaqueTy(..), _) => Ordering::Less,
665-
(_, OpaqueTy(..)) => Ordering::Greater,
666662
(Const(..), _) => Ordering::Less,
667663
(_, Const(..)) => Ordering::Greater,
668664
(Macro(..), _) => Ordering::Less,
@@ -822,7 +818,7 @@ pub(crate) fn format_impl(
822818

823819
fn is_impl_single_line(
824820
context: &RewriteContext<'_>,
825-
items: &[ast::ImplItem],
821+
items: &[ast::AssocItem],
826822
result: &str,
827823
where_clause_str: &str,
828824
item: &ast::Item,
@@ -1729,9 +1725,9 @@ impl<'a> StaticParts<'a> {
17291725
}
17301726
}
17311727

1732-
pub(crate) fn from_trait_item(ti: &'a ast::TraitItem) -> Self {
1728+
pub(crate) fn from_trait_item(ti: &'a ast::AssocItem) -> Self {
17331729
let (ty, expr_opt) = match ti.kind {
1734-
ast::TraitItemKind::Const(ref ty, ref expr_opt) => (ty, expr_opt),
1730+
ast::AssocItemKind::Const(ref ty, ref expr_opt) => (ty, expr_opt),
17351731
_ => unreachable!(),
17361732
};
17371733
StaticParts {
@@ -1746,9 +1742,9 @@ impl<'a> StaticParts<'a> {
17461742
}
17471743
}
17481744

1749-
pub(crate) fn from_impl_item(ii: &'a ast::ImplItem) -> Self {
1745+
pub(crate) fn from_impl_item(ii: &'a ast::AssocItem) -> Self {
17501746
let (ty, expr) = match ii.kind {
1751-
ast::ImplItemKind::Const(ref ty, ref expr) => (ty, expr),
1747+
ast::AssocItemKind::Const(ref ty, ref expr) => (ty, expr),
17521748
_ => unreachable!(),
17531749
};
17541750
StaticParts {

rustfmt-core/rustfmt-lib/src/spanned.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,12 @@ macro_rules! implement_spanned {
5656
}
5757

5858
// Implement `Spanned` for structs with `attrs` field.
59+
implement_spanned!(ast::AssocItem);
5960
implement_spanned!(ast::Expr);
6061
implement_spanned!(ast::Field);
6162
implement_spanned!(ast::ForeignItem);
6263
implement_spanned!(ast::Item);
6364
implement_spanned!(ast::Local);
64-
implement_spanned!(ast::TraitItem);
65-
implement_spanned!(ast::ImplItem);
6665

6766
impl Spanned for ast::Stmt {
6867
fn span(&self) -> Span {

rustfmt-core/rustfmt-lib/src/visitor.rs

+39-32
Original file line numberDiff line numberDiff line change
@@ -556,23 +556,23 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
556556
self.skip_context = skip_context_saved;
557557
}
558558

559-
pub(crate) fn visit_trait_item(&mut self, ti: &ast::TraitItem) {
559+
pub(crate) fn visit_trait_item(&mut self, ti: &ast::AssocItem) {
560560
skip_out_of_file_lines_range_visitor!(self, ti.span);
561561

562562
if self.visit_attrs(&ti.attrs, ast::AttrStyle::Outer) {
563-
self.push_skipped_with_span(ti.attrs.as_slice(), ti.span(), ti.span());
563+
self.push_skipped_with_span(ti.attrs.as_slice(), ti.span, ti.span);
564564
return;
565565
}
566566

567567
match ti.kind {
568-
ast::TraitItemKind::Const(..) => self.visit_static(&StaticParts::from_trait_item(ti)),
569-
ast::TraitItemKind::Method(ref sig, None) => {
568+
ast::AssocItemKind::Const(..) => self.visit_static(&StaticParts::from_trait_item(ti)),
569+
ast::AssocItemKind::Fn(ref sig, None) => {
570570
let indent = self.block_indent;
571571
let rewrite =
572572
self.rewrite_required_fn(indent, ti.ident, sig, &ti.generics, ti.span);
573573
self.push_rewrite(ti.span, rewrite);
574574
}
575-
ast::TraitItemKind::Method(ref sig, Some(ref body)) => {
575+
ast::AssocItemKind::Fn(ref sig, Some(ref body)) => {
576576
let inner_attrs = inner_attributes(&ti.attrs);
577577
self.visit_fn(
578578
visit::FnKind::Method(ti.ident, sig, None, body),
@@ -583,7 +583,7 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
583583
Some(&inner_attrs),
584584
);
585585
}
586-
ast::TraitItemKind::Type(ref generic_bounds, ref type_default) => {
586+
ast::AssocItemKind::TyAlias(ref generic_bounds, ref type_default) => {
587587
let rewrite = rewrite_associated_type(
588588
ti.ident,
589589
type_default.as_ref(),
@@ -594,55 +594,62 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
594594
);
595595
self.push_rewrite(ti.span, rewrite);
596596
}
597-
ast::TraitItemKind::Macro(ref mac) => {
597+
ast::AssocItemKind::Macro(ref mac) => {
598598
self.visit_mac(mac, Some(ti.ident), MacroPosition::Item);
599599
}
600600
}
601601
}
602602

603-
pub(crate) fn visit_impl_item(&mut self, ii: &ast::ImplItem) {
603+
pub(crate) fn visit_impl_item(&mut self, ii: &ast::AssocItem) {
604604
skip_out_of_file_lines_range_visitor!(self, ii.span);
605605

606606
if self.visit_attrs(&ii.attrs, ast::AttrStyle::Outer) {
607-
self.push_skipped_with_span(ii.attrs.as_slice(), ii.span(), ii.span());
607+
self.push_skipped_with_span(ii.attrs.as_slice(), ii.span, ii.span);
608608
return;
609609
}
610610

611611
match ii.kind {
612-
ast::ImplItemKind::Method(ref sig, ref body) => {
612+
ast::AssocItemKind::Fn(ref sig, Some(ref body)) => {
613613
let inner_attrs = inner_attributes(&ii.attrs);
614614
self.visit_fn(
615-
visit::FnKind::Method(ii.ident, sig, Some(&ii.vis), body),
615+
visit::FnKind::Fn(ii.ident, sig, Some(&ii.vis), body),
616616
&ii.generics,
617617
&sig.decl,
618618
ii.span,
619619
ii.defaultness,
620620
Some(&inner_attrs),
621621
);
622622
}
623-
ast::ImplItemKind::Const(..) => self.visit_static(&StaticParts::from_impl_item(ii)),
624-
ast::ImplItemKind::TyAlias(ref ty) => {
625-
let rewrite = rewrite_associated_impl_type(
626-
ii.ident,
627-
ii.defaultness,
628-
Some(ty),
629-
&ii.generics,
630-
&self.get_context(),
631-
self.block_indent,
632-
);
633-
self.push_rewrite(ii.span, rewrite);
634-
}
635-
ast::ImplItemKind::OpaqueTy(ref generic_bounds) => {
636-
let rewrite = rewrite_opaque_impl_type(
637-
&self.get_context(),
638-
ii.ident,
639-
&ii.generics,
640-
generic_bounds,
641-
self.block_indent,
642-
);
623+
ast::AssocItemKind::Const(..) => self.visit_static(&StaticParts::from_impl_item(ii)),
624+
ast::AssocItemKind::TyAlias(ref generic_bounds, ref ty) => {
625+
let rewrite_associated = || {
626+
rewrite_associated_impl_type(
627+
ii.ident,
628+
ii.defaultness,
629+
ty.as_ref(),
630+
&ii.generics,
631+
&self.get_context(),
632+
self.block_indent,
633+
)
634+
};
635+
let rewrite = match ty {
636+
None => rewrite_associated(),
637+
Some(ty) => match ty.kind.opaque_top_hack() {
638+
Some(_) => {
639+
rewrite_opaque_impl_type(
640+
&self.get_context(),
641+
ii.ident,
642+
&ii.generics,
643+
generic_bounds,
644+
self.block_indent,
645+
)
646+
},
647+
None => rewrite_associated()
648+
}
649+
};
643650
self.push_rewrite(ii.span, rewrite);
644651
}
645-
ast::ImplItemKind::Macro(ref mac) => {
652+
ast::AssocItemKind::Macro(ref mac) => {
646653
self.visit_mac(mac, Some(ii.ident), MacroPosition::Item);
647654
}
648655
}

0 commit comments

Comments
 (0)