syntax: extract parse_cfg_attr
This commit is contained in:
@@ -260,6 +260,27 @@ impl<'a> Parser<'a> {
|
||||
Ok(lit)
|
||||
}
|
||||
|
||||
/// Parses `cfg_attr(pred, attr_item_list)` where `attr_item_list` is comma-delimited.
|
||||
crate fn parse_cfg_attr(&mut self) -> PResult<'a, (ast::MetaItem, Vec<(ast::AttrItem, Span)>)> {
|
||||
self.expect(&token::OpenDelim(token::Paren))?;
|
||||
|
||||
let cfg_predicate = self.parse_meta_item()?;
|
||||
self.expect(&token::Comma)?;
|
||||
|
||||
// Presumably, the majority of the time there will only be one attr.
|
||||
let mut expanded_attrs = Vec::with_capacity(1);
|
||||
|
||||
while !self.check(&token::CloseDelim(token::Paren)) {
|
||||
let lo = self.token.span.lo();
|
||||
let item = self.parse_attr_item()?;
|
||||
expanded_attrs.push((item, self.prev_span.with_lo(lo)));
|
||||
self.expect_one_of(&[token::Comma], &[token::CloseDelim(token::Paren)])?;
|
||||
}
|
||||
|
||||
self.expect(&token::CloseDelim(token::Paren))?;
|
||||
Ok((cfg_predicate, expanded_attrs))
|
||||
}
|
||||
|
||||
/// Matches the following grammar (per RFC 1559).
|
||||
///
|
||||
/// meta_item : PATH ( '=' UNSUFFIXED_LIT | '(' meta_item_inner? ')' )? ;
|
||||
|
||||
Reference in New Issue
Block a user