pprust: Use print_mac_common for attributes

This commit is contained in:
Vadim Petrochenkov 2019-07-13 21:01:04 +03:00
parent 500b00127b
commit 23c5c1bfe7
2 changed files with 19 additions and 5 deletions

View file

@ -4,7 +4,7 @@ use crate::ast::{Attribute, MacDelimiter, GenericArg};
use crate::util::parser::{self, AssocOp, Fixity};
use crate::attr;
use crate::source_map::{self, SourceMap, Spanned};
use crate::parse::token::{self, BinOpToken, Nonterminal, Token, TokenKind};
use crate::parse::token::{self, BinOpToken, DelimToken, Nonterminal, Token, TokenKind};
use crate::parse::lexer::comments;
use crate::parse::{self, ParseSess};
use crate::print::pp::{self, Breaks};
@ -619,10 +619,24 @@ pub trait PrintState<'a>: std::ops::Deref<Target=pp::Printer> + std::ops::DerefM
if let Some(mi) = attr.meta() {
self.print_meta_item(&mi);
} else {
match attr.tokens.trees().next() {
Some(TokenTree::Delimited(_, delim, tts)) => {
let delim = match delim {
DelimToken::Brace => MacDelimiter::Brace,
DelimToken::Bracket => MacDelimiter::Bracket,
DelimToken::Paren | DelimToken::NoDelim => MacDelimiter::Parenthesis,
};
self.print_mac_common(&attr.path, false, None, tts, delim, attr.span);
}
tree => {
self.print_path(&attr.path, false, 0);
if tree.is_some() {
self.space();
self.print_tts(attr.tokens.clone(), true);
}
}
}
}
self.word("]");
}
}

View file

@ -10,7 +10,7 @@ use proc_macro::TokenStream;
#[proc_macro_derive(B, attributes(B, C))]
pub fn derive(input: TokenStream) -> TokenStream {
let input = input.to_string();
assert!(input.contains("#[B [ arbitrary tokens ]]"));
assert!(input.contains("#[B[arbitrary tokens]]"));
assert!(input.contains("struct B {"));
assert!(input.contains("#[C]"));
"".parse().unwrap()