Remove token::Lit from ast::MetaItemLit.

`token::Lit` contains a `kind` field that indicates what kind of literal
it is. `ast::MetaItemLit` currently wraps a `token::Lit` but also has
its own `kind` field. This means that `ast::MetaItemLit` encodes the
literal kind in two different ways.

This commit changes `ast::MetaItemLit` so it no longer wraps
`token::Lit`. It now contains the `symbol` and `suffix` fields from
`token::Lit`, but not the `kind` field, eliminating the redundancy.
This commit is contained in:
Nicholas Nethercote 2022-11-29 13:36:00 +11:00
parent c7e4abd444
commit c91dd22870

View File

@ -260,7 +260,9 @@ impl Rewrite for ast::NestedMetaItem {
fn rewrite(&self, context: &RewriteContext<'_>, shape: Shape) -> Option<String> { fn rewrite(&self, context: &RewriteContext<'_>, shape: Shape) -> Option<String> {
match self { match self {
ast::NestedMetaItem::MetaItem(ref meta_item) => meta_item.rewrite(context, shape), ast::NestedMetaItem::MetaItem(ref meta_item) => meta_item.rewrite(context, shape),
ast::NestedMetaItem::Lit(ref l) => rewrite_literal(context, l.token_lit, l.span, shape), ast::NestedMetaItem::Lit(ref l) => {
rewrite_literal(context, l.as_token_lit(), l.span, shape)
}
} }
} }
} }
@ -308,18 +310,18 @@ impl Rewrite for ast::MetaItem {
}), }),
)? )?
} }
ast::MetaItemKind::NameValue(ref literal) => { ast::MetaItemKind::NameValue(ref lit) => {
let path = rewrite_path(context, PathContext::Type, &None, &self.path, shape)?; let path = rewrite_path(context, PathContext::Type, &None, &self.path, shape)?;
// 3 = ` = ` // 3 = ` = `
let lit_shape = shape.shrink_left(path.len() + 3)?; let lit_shape = shape.shrink_left(path.len() + 3)?;
// `rewrite_literal` returns `None` when `literal` exceeds max // `rewrite_literal` returns `None` when `lit` exceeds max
// width. Since a literal is basically unformattable unless it // width. Since a literal is basically unformattable unless it
// is a string literal (and only if `format_strings` is set), // is a string literal (and only if `format_strings` is set),
// we might be better off ignoring the fact that the attribute // we might be better off ignoring the fact that the attribute
// is longer than the max width and continue on formatting. // is longer than the max width and continue on formatting.
// See #2479 for example. // See #2479 for example.
let value = rewrite_literal(context, literal.token_lit, literal.span, lit_shape) let value = rewrite_literal(context, lit.as_token_lit(), lit.span, lit_shape)
.unwrap_or_else(|| context.snippet(literal.span).to_owned()); .unwrap_or_else(|| context.snippet(lit.span).to_owned());
format!("{} = {}", path, value) format!("{} = {}", path, value)
} }
}) })