Skip to content

Commit 8ca8228

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 04f6f54 commit 8ca8228

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,14 +623,15 @@ 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),
627-
AssocImplItem(ai) => (*ai, ai.span, visit::AssocCtxt::Impl),
629+
let assoc_ctxt = match visitor_kind {
630+
AssocTraitItem => visit::AssocCtxt::Trait,
631+
AssocImplItem => visit::AssocCtxt::Impl,
628632
_ => unreachable!(),
629633
};
634+
let skip_span = ai.span;
630635
skip_out_of_file_lines_range_visitor!(self, ai.span);
631636

632637
if self.visit_attrs(&ai.attrs, ast::AttrStyle::Outer) {
@@ -636,10 +641,10 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
636641

637642
// TODO(calebcartwright): consider enabling box_patterns feature gate
638643
match (&ai.kind, visitor_kind) {
639-
(ast::AssocItemKind::Const(..), AssocTraitItem(_)) => {
644+
(ast::AssocItemKind::Const(..), AssocTraitItem) => {
640645
self.visit_static(&StaticParts::from_trait_item(ai))
641646
}
642-
(ast::AssocItemKind::Const(..), AssocImplItem(_)) => {
647+
(ast::AssocItemKind::Const(..), AssocImplItem) => {
643648
self.visit_static(&StaticParts::from_impl_item(ai))
644649
}
645650
(ast::AssocItemKind::Fn(ref fn_kind), _) => {
@@ -669,7 +674,7 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
669674
}
670675
}
671676
(ast::AssocItemKind::Type(ref ty_alias), _) => {
672-
self.visit_ty_alias_kind(ty_alias, visitor_kind, ai.span);
677+
self.visit_ty_alias_kind(ty_alias, &ai.vis, ai.ident, visitor_kind, ai.span);
673678
}
674679
(ast::AssocItemKind::MacCall(ref mac), _) => {
675680
self.visit_mac(mac, Some(ai.ident), MacroPosition::Item);
@@ -679,11 +684,11 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
679684
}
680685

681686
pub(crate) fn visit_trait_item(&mut self, ti: &ast::AssocItem) {
682-
self.visit_assoc_item(&ItemVisitorKind::AssocTraitItem(ti));
687+
self.visit_assoc_item(ti, ItemVisitorKind::AssocTraitItem);
683688
}
684689

685690
pub(crate) fn visit_impl_item(&mut self, ii: &ast::AssocItem) {
686-
self.visit_assoc_item(&ItemVisitorKind::AssocImplItem(ii));
691+
self.visit_assoc_item(ii, ItemVisitorKind::AssocImplItem);
687692
}
688693

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

0 commit comments

Comments
 (0)