pprust: Use print_mac_common
for attributes
This commit is contained in:
parent
500b00127b
commit
23c5c1bfe7
2 changed files with 19 additions and 5 deletions
|
@ -4,7 +4,7 @@ use crate::ast::{Attribute, MacDelimiter, GenericArg};
|
||||||
use crate::util::parser::{self, AssocOp, Fixity};
|
use crate::util::parser::{self, AssocOp, Fixity};
|
||||||
use crate::attr;
|
use crate::attr;
|
||||||
use crate::source_map::{self, SourceMap, Spanned};
|
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::lexer::comments;
|
||||||
use crate::parse::{self, ParseSess};
|
use crate::parse::{self, ParseSess};
|
||||||
use crate::print::pp::{self, Breaks};
|
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() {
|
if let Some(mi) = attr.meta() {
|
||||||
self.print_meta_item(&mi);
|
self.print_meta_item(&mi);
|
||||||
} else {
|
} 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);
|
self.print_path(&attr.path, false, 0);
|
||||||
|
if tree.is_some() {
|
||||||
self.space();
|
self.space();
|
||||||
self.print_tts(attr.tokens.clone(), true);
|
self.print_tts(attr.tokens.clone(), true);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
self.word("]");
|
self.word("]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ use proc_macro::TokenStream;
|
||||||
#[proc_macro_derive(B, attributes(B, C))]
|
#[proc_macro_derive(B, attributes(B, C))]
|
||||||
pub fn derive(input: TokenStream) -> TokenStream {
|
pub fn derive(input: TokenStream) -> TokenStream {
|
||||||
let input = input.to_string();
|
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("struct B {"));
|
||||||
assert!(input.contains("#[C]"));
|
assert!(input.contains("#[C]"));
|
||||||
"".parse().unwrap()
|
"".parse().unwrap()
|
||||||
|
|
Loading…
Reference in a new issue