Skip to content

Commit 4c551bc

Browse files
committed
Simplify ItemVisitorKind.
Instead of putting the item inside it, just pass the ident and visibility (the only things needed) alongside it where necessary. This helps with the next commit, which will move the ident's location. Specifically, it gets rid of the `match visitor_kind` in `rewrite_type_alias`.
1 parent 59307fd commit 4c551bc

File tree

2 files changed

+41
-30
lines changed

2 files changed

+41
-30
lines changed

src/tools/rustfmt/src/items.rs

+24-18
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use std::cmp::{Ordering, max, min};
66
use regex::Regex;
77
use rustc_ast::visit;
88
use rustc_ast::{ast, ptr};
9-
use rustc_span::{BytePos, DUMMY_SP, Span, symbol};
9+
use rustc_span::{BytePos, DUMMY_SP, Ident, Span, symbol};
1010
use tracing::debug;
1111

1212
use crate::attr::filter_inline_attrs;
@@ -1679,11 +1679,12 @@ fn format_tuple_struct(
16791679
Some(result)
16801680
}
16811681

1682-
pub(crate) enum ItemVisitorKind<'a> {
1683-
Item(&'a ast::Item),
1684-
AssocTraitItem(&'a ast::AssocItem),
1685-
AssocImplItem(&'a ast::AssocItem),
1686-
ForeignItem(&'a ast::ForeignItem),
1682+
#[derive(Clone, Copy)]
1683+
pub(crate) enum ItemVisitorKind {
1684+
Item,
1685+
AssocTraitItem,
1686+
AssocImplItem,
1687+
ForeignItem,
16871688
}
16881689

16891690
struct TyAliasRewriteInfo<'c, 'g>(
@@ -1695,11 +1696,13 @@ struct TyAliasRewriteInfo<'c, 'g>(
16951696
Span,
16961697
);
16971698

1698-
pub(crate) fn rewrite_type_alias<'a, 'b>(
1699+
pub(crate) fn rewrite_type_alias<'a>(
16991700
ty_alias_kind: &ast::TyAlias,
1701+
vis: &ast::Visibility,
1702+
ident: Ident,
17001703
context: &RewriteContext<'a>,
17011704
indent: Indent,
1702-
visitor_kind: &ItemVisitorKind<'b>,
1705+
visitor_kind: ItemVisitorKind,
17031706
span: Span,
17041707
) -> RewriteResult {
17051708
use ItemVisitorKind::*;
@@ -1715,26 +1718,21 @@ pub(crate) fn rewrite_type_alias<'a, 'b>(
17151718
let rhs_hi = ty
17161719
.as_ref()
17171720
.map_or(where_clauses.before.span.hi(), |ty| ty.span.hi());
1718-
let (ident, vis) = match visitor_kind {
1719-
Item(i) => (i.ident, &i.vis),
1720-
AssocTraitItem(i) | AssocImplItem(i) => (i.ident, &i.vis),
1721-
ForeignItem(i) => (i.ident, &i.vis),
1722-
};
17231721
let rw_info = &TyAliasRewriteInfo(context, indent, generics, where_clauses, ident, span);
17241722
let op_ty = opaque_ty(ty);
17251723
// Type Aliases are formatted slightly differently depending on the context
17261724
// in which they appear, whether they are opaque, and whether they are associated.
17271725
// https://rustc-dev-guide.rust-lang.org/opaque-types-type-alias-impl-trait.html
17281726
// https://github.com/rust-dev-tools/fmt-rfcs/blob/master/guide/items.md#type-aliases
17291727
match (visitor_kind, &op_ty) {
1730-
(Item(_) | AssocTraitItem(_) | ForeignItem(_), Some(op_bounds)) => {
1728+
(Item | AssocTraitItem | ForeignItem, Some(op_bounds)) => {
17311729
let op = OpaqueType { bounds: op_bounds };
17321730
rewrite_ty(rw_info, Some(bounds), Some(&op), rhs_hi, vis)
17331731
}
1734-
(Item(_) | AssocTraitItem(_) | ForeignItem(_), None) => {
1732+
(Item | AssocTraitItem | ForeignItem, None) => {
17351733
rewrite_ty(rw_info, Some(bounds), ty_opt, rhs_hi, vis)
17361734
}
1737-
(AssocImplItem(_), _) => {
1735+
(AssocImplItem, _) => {
17381736
let result = if let Some(op_bounds) = op_ty {
17391737
let op = OpaqueType { bounds: op_bounds };
17401738
rewrite_ty(
@@ -3498,8 +3496,16 @@ impl Rewrite for ast::ForeignItem {
34983496
.map(|s| s + ";")
34993497
}
35003498
ast::ForeignItemKind::TyAlias(ref ty_alias) => {
3501-
let (kind, span) = (&ItemVisitorKind::ForeignItem(self), self.span);
3502-
rewrite_type_alias(ty_alias, context, shape.indent, kind, span)
3499+
let kind = ItemVisitorKind::ForeignItem;
3500+
rewrite_type_alias(
3501+
ty_alias,
3502+
&self.vis,
3503+
self.ident,
3504+
context,
3505+
shape.indent,
3506+
kind,
3507+
self.span,
3508+
)
35033509
}
35043510
ast::ForeignItemKind::MacCall(ref mac) => {
35053511
rewrite_macro(mac, None, context, shape, MacroPosition::Item)

src/tools/rustfmt/src/visitor.rs

+17-12
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::rc::Rc;
33
use std::sync::Arc;
44

55
use rustc_ast::{ast, token::Delimiter, visit};
6-
use rustc_span::{BytePos, Pos, Span, symbol};
6+
use rustc_span::{BytePos, Ident, Pos, Span, symbol};
77
use tracing::debug;
88

99
use crate::attr::*;
@@ -573,7 +573,7 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
573573
}
574574
ast::ItemKind::TyAlias(ref ty_alias) => {
575575
use ItemVisitorKind::Item;
576-
self.visit_ty_alias_kind(ty_alias, &Item(item), item.span);
576+
self.visit_ty_alias_kind(ty_alias, &item.vis, item.ident, Item, item.span);
577577
}
578578
ast::ItemKind::GlobalAsm(..) => {
579579
let snippet = Some(self.snippet(item.span).to_owned());
@@ -605,11 +605,15 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
605605
fn visit_ty_alias_kind(
606606
&mut self,
607607
ty_kind: &ast::TyAlias,
608-
visitor_kind: &ItemVisitorKind<'_>,
608+
vis: &ast::Visibility,
609+
ident: Ident,
610+
visitor_kind: ItemVisitorKind,
609611
span: Span,
610612
) {
611613
let rewrite = rewrite_type_alias(
612614
ty_kind,
615+
vis,
616+
ident,
613617
&self.get_context(),
614618
self.block_indent,
615619
visitor_kind,
@@ -619,15 +623,16 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
619623
self.push_rewrite(span, rewrite);
620624
}
621625

622-
fn visit_assoc_item(&mut self, visitor_kind: &ItemVisitorKind<'_>) {
626+
fn visit_assoc_item(&mut self, ai: &ast::AssocItem, visitor_kind: ItemVisitorKind) {
623627
use ItemVisitorKind::*;
624628
// TODO(calebcartwright): Not sure the skip spans are correct
625-
let (ai, skip_span, assoc_ctxt) = match visitor_kind {
626-
AssocTraitItem(ai) => (*ai, ai.span(), visit::AssocCtxt::Trait),
629+
let assoc_ctxt = match visitor_kind {
630+
AssocTraitItem => visit::AssocCtxt::Trait,
627631
// There is no difference between trait and inherent assoc item formatting
628-
AssocImplItem(ai) => (*ai, ai.span, visit::AssocCtxt::Impl { of_trait: false }),
632+
AssocImplItem => visit::AssocCtxt::Impl { of_trait: false },
629633
_ => unreachable!(),
630634
};
635+
let skip_span = ai.span;
631636
skip_out_of_file_lines_range_visitor!(self, ai.span);
632637

633638
if self.visit_attrs(&ai.attrs, ast::AttrStyle::Outer) {
@@ -637,10 +642,10 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
637642

638643
// TODO(calebcartwright): consider enabling box_patterns feature gate
639644
match (&ai.kind, visitor_kind) {
640-
(ast::AssocItemKind::Const(..), AssocTraitItem(_)) => {
645+
(ast::AssocItemKind::Const(..), AssocTraitItem) => {
641646
self.visit_static(&StaticParts::from_trait_item(ai))
642647
}
643-
(ast::AssocItemKind::Const(..), AssocImplItem(_)) => {
648+
(ast::AssocItemKind::Const(..), AssocImplItem) => {
644649
self.visit_static(&StaticParts::from_impl_item(ai))
645650
}
646651
(ast::AssocItemKind::Fn(ref fn_kind), _) => {
@@ -670,7 +675,7 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
670675
}
671676
}
672677
(ast::AssocItemKind::Type(ref ty_alias), _) => {
673-
self.visit_ty_alias_kind(ty_alias, visitor_kind, ai.span);
678+
self.visit_ty_alias_kind(ty_alias, &ai.vis, ai.ident, visitor_kind, ai.span);
674679
}
675680
(ast::AssocItemKind::MacCall(ref mac), _) => {
676681
self.visit_mac(mac, Some(ai.ident), MacroPosition::Item);
@@ -680,11 +685,11 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
680685
}
681686

682687
pub(crate) fn visit_trait_item(&mut self, ti: &ast::AssocItem) {
683-
self.visit_assoc_item(&ItemVisitorKind::AssocTraitItem(ti));
688+
self.visit_assoc_item(ti, ItemVisitorKind::AssocTraitItem);
684689
}
685690

686691
pub(crate) fn visit_impl_item(&mut self, ii: &ast::AssocItem) {
687-
self.visit_assoc_item(&ItemVisitorKind::AssocImplItem(ii));
692+
self.visit_assoc_item(ii, ItemVisitorKind::AssocImplItem);
688693
}
689694

690695
fn visit_mac(&mut self, mac: &ast::MacCall, ident: Option<symbol::Ident>, pos: MacroPosition) {

0 commit comments

Comments
 (0)