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

2 files changed

Lines changed: 41 additions & 30 deletions

File tree

‎src/tools/rustfmt/src/items.rs‎

Lines changed: 24 additions & 18 deletions
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
usecrate::attr::filter_inline_attrs;
@@ -1679,11 +1679,12 @@ fn format_tuple_struct(
16791679
Some(result)
16801680
}
16811681

1682-
pub(crate)enumItemVisitorKind<'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)enumItemVisitorKind{
1684+
Item,
1685+
AssocTraitItem,
1686+
AssocImplItem,
1687+
ForeignItem,
16871688
}
16881689

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

1698-
pub(crate)fnrewrite_type_alias<'a,'b>(
1699+
pub(crate)fnrewrite_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
useItemVisitorKind::*;
@@ -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 = ifletSome(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‎

Lines changed: 17 additions & 12 deletions
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
usecrate::attr::*;
@@ -573,7 +573,7 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
573573
}
574574
ast::ItemKind::TyAlias(ref ty_alias) => {
575575
useItemVisitorKind::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
fnvisit_ty_alias_kind(
606606
&mutself,
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-
fnvisit_assoc_item(&mutself,visitor_kind:&ItemVisitorKind<'_>){
626+
fnvisit_assoc_item(&mutself,ai:&ast::AssocItem,visitor_kind:ItemVisitorKind){
623627
useItemVisitorKind::*;
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
ifself.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)fnvisit_trait_item(&mutself,ti:&ast::AssocItem){
683-
self.visit_assoc_item(&ItemVisitorKind::AssocTraitItem(ti));
688+
self.visit_assoc_item(ti,ItemVisitorKind::AssocTraitItem);
684689
}
685690

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

690695
fnvisit_mac(&mutself,mac:&ast::MacCall,ident:Option<symbol::Ident>,pos:MacroPosition){

0 commit comments

Comments
 (0)