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`.
This commit is contained in:
parent
59307fd9fd
commit
4c551bcacd
2 changed files with 41 additions and 30 deletions
|
|
@ -6,7 +6,7 @@ use std::cmp::{Ordering, max, min};
|
|||
use regex::Regex;
|
||||
use rustc_ast::visit;
|
||||
use rustc_ast::{ast, ptr};
|
||||
use rustc_span::{BytePos, DUMMY_SP, Span, symbol};
|
||||
use rustc_span::{BytePos, DUMMY_SP, Ident, Span, symbol};
|
||||
use tracing::debug;
|
||||
|
||||
use crate::attr::filter_inline_attrs;
|
||||
|
|
@ -1679,11 +1679,12 @@ fn format_tuple_struct(
|
|||
Some(result)
|
||||
}
|
||||
|
||||
pub(crate) enum ItemVisitorKind<'a> {
|
||||
Item(&'a ast::Item),
|
||||
AssocTraitItem(&'a ast::AssocItem),
|
||||
AssocImplItem(&'a ast::AssocItem),
|
||||
ForeignItem(&'a ast::ForeignItem),
|
||||
#[derive(Clone, Copy)]
|
||||
pub(crate) enum ItemVisitorKind {
|
||||
Item,
|
||||
AssocTraitItem,
|
||||
AssocImplItem,
|
||||
ForeignItem,
|
||||
}
|
||||
|
||||
struct TyAliasRewriteInfo<'c, 'g>(
|
||||
|
|
@ -1695,11 +1696,13 @@ struct TyAliasRewriteInfo<'c, 'g>(
|
|||
Span,
|
||||
);
|
||||
|
||||
pub(crate) fn rewrite_type_alias<'a, 'b>(
|
||||
pub(crate) fn rewrite_type_alias<'a>(
|
||||
ty_alias_kind: &ast::TyAlias,
|
||||
vis: &ast::Visibility,
|
||||
ident: Ident,
|
||||
context: &RewriteContext<'a>,
|
||||
indent: Indent,
|
||||
visitor_kind: &ItemVisitorKind<'b>,
|
||||
visitor_kind: ItemVisitorKind,
|
||||
span: Span,
|
||||
) -> RewriteResult {
|
||||
use ItemVisitorKind::*;
|
||||
|
|
@ -1715,11 +1718,6 @@ pub(crate) fn rewrite_type_alias<'a, 'b>(
|
|||
let rhs_hi = ty
|
||||
.as_ref()
|
||||
.map_or(where_clauses.before.span.hi(), |ty| ty.span.hi());
|
||||
let (ident, vis) = match visitor_kind {
|
||||
Item(i) => (i.ident, &i.vis),
|
||||
AssocTraitItem(i) | AssocImplItem(i) => (i.ident, &i.vis),
|
||||
ForeignItem(i) => (i.ident, &i.vis),
|
||||
};
|
||||
let rw_info = &TyAliasRewriteInfo(context, indent, generics, where_clauses, ident, span);
|
||||
let op_ty = opaque_ty(ty);
|
||||
// Type Aliases are formatted slightly differently depending on the context
|
||||
|
|
@ -1727,14 +1725,14 @@ pub(crate) fn rewrite_type_alias<'a, 'b>(
|
|||
// https://rustc-dev-guide.rust-lang.org/opaque-types-type-alias-impl-trait.html
|
||||
// https://github.com/rust-dev-tools/fmt-rfcs/blob/master/guide/items.md#type-aliases
|
||||
match (visitor_kind, &op_ty) {
|
||||
(Item(_) | AssocTraitItem(_) | ForeignItem(_), Some(op_bounds)) => {
|
||||
(Item | AssocTraitItem | ForeignItem, Some(op_bounds)) => {
|
||||
let op = OpaqueType { bounds: op_bounds };
|
||||
rewrite_ty(rw_info, Some(bounds), Some(&op), rhs_hi, vis)
|
||||
}
|
||||
(Item(_) | AssocTraitItem(_) | ForeignItem(_), None) => {
|
||||
(Item | AssocTraitItem | ForeignItem, None) => {
|
||||
rewrite_ty(rw_info, Some(bounds), ty_opt, rhs_hi, vis)
|
||||
}
|
||||
(AssocImplItem(_), _) => {
|
||||
(AssocImplItem, _) => {
|
||||
let result = if let Some(op_bounds) = op_ty {
|
||||
let op = OpaqueType { bounds: op_bounds };
|
||||
rewrite_ty(
|
||||
|
|
@ -3498,8 +3496,16 @@ impl Rewrite for ast::ForeignItem {
|
|||
.map(|s| s + ";")
|
||||
}
|
||||
ast::ForeignItemKind::TyAlias(ref ty_alias) => {
|
||||
let (kind, span) = (&ItemVisitorKind::ForeignItem(self), self.span);
|
||||
rewrite_type_alias(ty_alias, context, shape.indent, kind, span)
|
||||
let kind = ItemVisitorKind::ForeignItem;
|
||||
rewrite_type_alias(
|
||||
ty_alias,
|
||||
&self.vis,
|
||||
self.ident,
|
||||
context,
|
||||
shape.indent,
|
||||
kind,
|
||||
self.span,
|
||||
)
|
||||
}
|
||||
ast::ForeignItemKind::MacCall(ref mac) => {
|
||||
rewrite_macro(mac, None, context, shape, MacroPosition::Item)
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ use std::rc::Rc;
|
|||
use std::sync::Arc;
|
||||
|
||||
use rustc_ast::{ast, token::Delimiter, visit};
|
||||
use rustc_span::{BytePos, Pos, Span, symbol};
|
||||
use rustc_span::{BytePos, Ident, Pos, Span, symbol};
|
||||
use tracing::debug;
|
||||
|
||||
use crate::attr::*;
|
||||
|
|
@ -573,7 +573,7 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
|
|||
}
|
||||
ast::ItemKind::TyAlias(ref ty_alias) => {
|
||||
use ItemVisitorKind::Item;
|
||||
self.visit_ty_alias_kind(ty_alias, &Item(item), item.span);
|
||||
self.visit_ty_alias_kind(ty_alias, &item.vis, item.ident, Item, item.span);
|
||||
}
|
||||
ast::ItemKind::GlobalAsm(..) => {
|
||||
let snippet = Some(self.snippet(item.span).to_owned());
|
||||
|
|
@ -605,11 +605,15 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
|
|||
fn visit_ty_alias_kind(
|
||||
&mut self,
|
||||
ty_kind: &ast::TyAlias,
|
||||
visitor_kind: &ItemVisitorKind<'_>,
|
||||
vis: &ast::Visibility,
|
||||
ident: Ident,
|
||||
visitor_kind: ItemVisitorKind,
|
||||
span: Span,
|
||||
) {
|
||||
let rewrite = rewrite_type_alias(
|
||||
ty_kind,
|
||||
vis,
|
||||
ident,
|
||||
&self.get_context(),
|
||||
self.block_indent,
|
||||
visitor_kind,
|
||||
|
|
@ -619,15 +623,16 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
|
|||
self.push_rewrite(span, rewrite);
|
||||
}
|
||||
|
||||
fn visit_assoc_item(&mut self, visitor_kind: &ItemVisitorKind<'_>) {
|
||||
fn visit_assoc_item(&mut self, ai: &ast::AssocItem, visitor_kind: ItemVisitorKind) {
|
||||
use ItemVisitorKind::*;
|
||||
// TODO(calebcartwright): Not sure the skip spans are correct
|
||||
let (ai, skip_span, assoc_ctxt) = match visitor_kind {
|
||||
AssocTraitItem(ai) => (*ai, ai.span(), visit::AssocCtxt::Trait),
|
||||
let assoc_ctxt = match visitor_kind {
|
||||
AssocTraitItem => visit::AssocCtxt::Trait,
|
||||
// There is no difference between trait and inherent assoc item formatting
|
||||
AssocImplItem(ai) => (*ai, ai.span, visit::AssocCtxt::Impl { of_trait: false }),
|
||||
AssocImplItem => visit::AssocCtxt::Impl { of_trait: false },
|
||||
_ => unreachable!(),
|
||||
};
|
||||
let skip_span = ai.span;
|
||||
skip_out_of_file_lines_range_visitor!(self, ai.span);
|
||||
|
||||
if self.visit_attrs(&ai.attrs, ast::AttrStyle::Outer) {
|
||||
|
|
@ -637,10 +642,10 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
|
|||
|
||||
// TODO(calebcartwright): consider enabling box_patterns feature gate
|
||||
match (&ai.kind, visitor_kind) {
|
||||
(ast::AssocItemKind::Const(..), AssocTraitItem(_)) => {
|
||||
(ast::AssocItemKind::Const(..), AssocTraitItem) => {
|
||||
self.visit_static(&StaticParts::from_trait_item(ai))
|
||||
}
|
||||
(ast::AssocItemKind::Const(..), AssocImplItem(_)) => {
|
||||
(ast::AssocItemKind::Const(..), AssocImplItem) => {
|
||||
self.visit_static(&StaticParts::from_impl_item(ai))
|
||||
}
|
||||
(ast::AssocItemKind::Fn(ref fn_kind), _) => {
|
||||
|
|
@ -670,7 +675,7 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
|
|||
}
|
||||
}
|
||||
(ast::AssocItemKind::Type(ref ty_alias), _) => {
|
||||
self.visit_ty_alias_kind(ty_alias, visitor_kind, ai.span);
|
||||
self.visit_ty_alias_kind(ty_alias, &ai.vis, ai.ident, visitor_kind, ai.span);
|
||||
}
|
||||
(ast::AssocItemKind::MacCall(ref mac), _) => {
|
||||
self.visit_mac(mac, Some(ai.ident), MacroPosition::Item);
|
||||
|
|
@ -680,11 +685,11 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
|
|||
}
|
||||
|
||||
pub(crate) fn visit_trait_item(&mut self, ti: &ast::AssocItem) {
|
||||
self.visit_assoc_item(&ItemVisitorKind::AssocTraitItem(ti));
|
||||
self.visit_assoc_item(ti, ItemVisitorKind::AssocTraitItem);
|
||||
}
|
||||
|
||||
pub(crate) fn visit_impl_item(&mut self, ii: &ast::AssocItem) {
|
||||
self.visit_assoc_item(&ItemVisitorKind::AssocImplItem(ii));
|
||||
self.visit_assoc_item(ii, ItemVisitorKind::AssocImplItem);
|
||||
}
|
||||
|
||||
fn visit_mac(&mut self, mac: &ast::MacCall, ident: Option<symbol::Ident>, pos: MacroPosition) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue