about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-07-13 21:01:04 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-07-15 12:42:07 +0300
commit23c5c1bfe7e3785fa1dcf1d3ff6e6bbaa855f66f (patch)
tree5a9132b707ba8bdda8428df4c5cc185db7618934
parent500b00127b1b5f0b3891c73327e20a972940a715 (diff)
downloadrust-23c5c1bfe7e3785fa1dcf1d3ff6e6bbaa855f66f.tar.gz
rust-23c5c1bfe7e3785fa1dcf1d3ff6e6bbaa855f66f.zip
pprust: Use `print_mac_common` for attributes
-rw-r--r--src/libsyntax/print/pprust.rs22
-rw-r--r--src/test/run-pass/proc-macro/auxiliary/derive-b.rs2
2 files changed, 19 insertions, 5 deletions
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index 8542be8ea60..af9f6bb442d 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<Target=pp::Printer> + 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 fd056d605a0..3e6af67a9f4 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()