Use cfg_attr as a name more.

In various functions where the attribute being processed is known to be
a `#[cfg_attr(...)]` attribute. I find this a helpful reminder.
This commit is contained in:
Nicholas Nethercote 2024-07-10 15:11:57 +10:00
parent fee152556f
commit d8b6aa6d0d
2 changed files with 14 additions and 14 deletions

View File

@ -253,9 +253,9 @@ impl<'a> StripUnconfigured<'a> {
/// Gives a compiler warning when the `cfg_attr` contains no attributes and /// Gives a compiler warning when the `cfg_attr` contains no attributes and
/// is in the original source file. Gives a compiler error if the syntax of /// is in the original source file. Gives a compiler error if the syntax of
/// the attribute is incorrect. /// the attribute is incorrect.
pub(crate) fn expand_cfg_attr(&self, attr: &Attribute, recursive: bool) -> Vec<Attribute> { pub(crate) fn expand_cfg_attr(&self, cfg_attr: &Attribute, recursive: bool) -> Vec<Attribute> {
let Some((cfg_predicate, expanded_attrs)) = let Some((cfg_predicate, expanded_attrs)) =
rustc_parse::parse_cfg_attr(attr, &self.sess.psess) rustc_parse::parse_cfg_attr(cfg_attr, &self.sess.psess)
else { else {
return vec![]; return vec![];
}; };
@ -264,7 +264,7 @@ impl<'a> StripUnconfigured<'a> {
if expanded_attrs.is_empty() { if expanded_attrs.is_empty() {
self.sess.psess.buffer_lint( self.sess.psess.buffer_lint(
rustc_lint_defs::builtin::UNUSED_ATTRIBUTES, rustc_lint_defs::builtin::UNUSED_ATTRIBUTES,
attr.span, cfg_attr.span,
ast::CRATE_NODE_ID, ast::CRATE_NODE_ID,
BuiltinLintDiag::CfgAttrNoAttributes, BuiltinLintDiag::CfgAttrNoAttributes,
); );
@ -280,16 +280,16 @@ impl<'a> StripUnconfigured<'a> {
// `#[cfg_attr(false, cfg_attr(true, some_attr))]`. // `#[cfg_attr(false, cfg_attr(true, some_attr))]`.
expanded_attrs expanded_attrs
.into_iter() .into_iter()
.flat_map(|item| self.process_cfg_attr(&self.expand_cfg_attr_item(attr, item))) .flat_map(|item| self.process_cfg_attr(&self.expand_cfg_attr_item(cfg_attr, item)))
.collect() .collect()
} else { } else {
expanded_attrs.into_iter().map(|item| self.expand_cfg_attr_item(attr, item)).collect() expanded_attrs.into_iter().map(|item| self.expand_cfg_attr_item(cfg_attr, item)).collect()
} }
} }
fn expand_cfg_attr_item( fn expand_cfg_attr_item(
&self, &self,
attr: &Attribute, cfg_attr: &Attribute,
(item, item_span): (ast::AttrItem, Span), (item, item_span): (ast::AttrItem, Span),
) -> Attribute { ) -> Attribute {
// We are taking an attribute of the form `#[cfg_attr(pred, attr)]` // We are taking an attribute of the form `#[cfg_attr(pred, attr)]`
@ -300,11 +300,11 @@ impl<'a> StripUnconfigured<'a> {
// Use the `#` in `#[cfg_attr(pred, attr)]` as the `#` token // Use the `#` in `#[cfg_attr(pred, attr)]` as the `#` token
// for `attr` when we expand it to `#[attr]` // for `attr` when we expand it to `#[attr]`
let mut orig_trees = attr.token_trees().into_iter(); let mut orig_trees = cfg_attr.token_trees().into_iter();
let TokenTree::Token(pound_token @ Token { kind: TokenKind::Pound, .. }, _) = let TokenTree::Token(pound_token @ Token { kind: TokenKind::Pound, .. }, _) =
orig_trees.next().unwrap().clone() orig_trees.next().unwrap().clone()
else { else {
panic!("Bad tokens for attribute {attr:?}"); panic!("Bad tokens for attribute {cfg_attr:?}");
}; };
// We don't really have a good span to use for the synthesized `[]` // We don't really have a good span to use for the synthesized `[]`
@ -318,12 +318,12 @@ impl<'a> StripUnconfigured<'a> {
.unwrap_or_else(|| panic!("Missing tokens for {item:?}")) .unwrap_or_else(|| panic!("Missing tokens for {item:?}"))
.to_attr_token_stream(), .to_attr_token_stream(),
); );
let trees = if attr.style == AttrStyle::Inner { let trees = if cfg_attr.style == AttrStyle::Inner {
// For inner attributes, we do the same thing for the `!` in `#![some_attr]` // For inner attributes, we do the same thing for the `!` in `#![some_attr]`
let TokenTree::Token(bang_token @ Token { kind: TokenKind::Not, .. }, _) = let TokenTree::Token(bang_token @ Token { kind: TokenKind::Not, .. }, _) =
orig_trees.next().unwrap().clone() orig_trees.next().unwrap().clone()
else { else {
panic!("Bad tokens for attribute {attr:?}"); panic!("Bad tokens for attribute {cfg_attr:?}");
}; };
vec![ vec![
AttrTokenTree::Token(pound_token, Spacing::Joint), AttrTokenTree::Token(pound_token, Spacing::Joint),
@ -338,7 +338,7 @@ impl<'a> StripUnconfigured<'a> {
&self.sess.psess.attr_id_generator, &self.sess.psess.attr_id_generator,
item, item,
tokens, tokens,
attr.style, cfg_attr.style,
item_span, item_span,
); );
if attr.has_name(sym::crate_type) { if attr.has_name(sym::crate_type) {

View File

@ -157,14 +157,14 @@ pub fn fake_token_stream_for_crate(psess: &ParseSess, krate: &ast::Crate) -> Tok
} }
pub fn parse_cfg_attr( pub fn parse_cfg_attr(
attr: &Attribute, cfg_attr: &Attribute,
psess: &ParseSess, psess: &ParseSess,
) -> Option<(MetaItem, Vec<(AttrItem, Span)>)> { ) -> Option<(MetaItem, Vec<(AttrItem, Span)>)> {
const CFG_ATTR_GRAMMAR_HELP: &str = "#[cfg_attr(condition, attribute, other_attribute, ...)]"; const CFG_ATTR_GRAMMAR_HELP: &str = "#[cfg_attr(condition, attribute, other_attribute, ...)]";
const CFG_ATTR_NOTE_REF: &str = "for more information, visit \ const CFG_ATTR_NOTE_REF: &str = "for more information, visit \
<https://doc.rust-lang.org/reference/conditional-compilation.html#the-cfg_attr-attribute>"; <https://doc.rust-lang.org/reference/conditional-compilation.html#the-cfg_attr-attribute>";
match attr.get_normal_item().args { match cfg_attr.get_normal_item().args {
ast::AttrArgs::Delimited(ast::DelimArgs { dspan, delim, ref tokens }) ast::AttrArgs::Delimited(ast::DelimArgs { dspan, delim, ref tokens })
if !tokens.is_empty() => if !tokens.is_empty() =>
{ {
@ -180,7 +180,7 @@ pub fn parse_cfg_attr(
} }
_ => { _ => {
psess.dcx().emit_err(errors::MalformedCfgAttr { psess.dcx().emit_err(errors::MalformedCfgAttr {
span: attr.span, span: cfg_attr.span,
sugg: CFG_ATTR_GRAMMAR_HELP, sugg: CFG_ATTR_GRAMMAR_HELP,
}); });
} }