]> git.lizzy.rs Git - rust.git/commitdiff
pprust: Use `print_mac_common` for attributes
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>
Sat, 13 Jul 2019 18:01:04 +0000 (21:01 +0300)
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>
Mon, 15 Jul 2019 09:42:07 +0000 (12:42 +0300)
src/libsyntax/print/pprust.rs
src/test/run-pass/proc-macro/auxiliary/derive-b.rs

index 8542be8ea60857299234cff03d033904ec095dd2..af9f6bb442dd17ca40b8a757d86c0c0d015bee33 100644 (file)
@@ -4,7 +4,7 @@
 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 @@ fn print_attribute_inline(&mut self, attr: &ast::Attribute,
             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("]");
         }
index fd056d605a0e68ea1291526fd7d0bd4e14b42c41..3e6af67a9f4124ea82a8e61fe1d605e294286396 100644 (file)
@@ -10,7 +10,7 @@
 #[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()