From 23c5c1bfe7e3785fa1dcf1d3ff6e6bbaa855f66f Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Sat, 13 Jul 2019 21:01:04 +0300 Subject: [PATCH] pprust: Use `print_mac_common` for attributes --- src/libsyntax/print/pprust.rs | 22 +++++++++++++++---- .../run-pass/proc-macro/auxiliary/derive-b.rs | 2 +- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 8542be8ea6085..af9f6bb442dd1 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -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,9 +619,23 @@ pub trait PrintState<'a>: std::ops::Deref + std::ops::DerefM if let Some(mi) = attr.meta() { self.print_meta_item(&mi); } else { - self.print_path(&attr.path, false, 0); - self.space(); - self.print_tts(attr.tokens.clone(), true); + 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("]"); } diff --git a/src/test/run-pass/proc-macro/auxiliary/derive-b.rs b/src/test/run-pass/proc-macro/auxiliary/derive-b.rs index fd056d605a0e6..3e6af67a9f412 100644 --- a/src/test/run-pass/proc-macro/auxiliary/derive-b.rs +++ b/src/test/run-pass/proc-macro/auxiliary/derive-b.rs @@ -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()