about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-07-13 23:24:58 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-07-15 12:42:07 +0300
commit75896011dc2a137d96a4941f5c415c2c108f5cf9 (patch)
tree1bca714ed6ec2273edd4415d44399532b28e55df
parent160c40bc88706965d268106e02c3d43422114a02 (diff)
downloadrust-75896011dc2a137d96a4941f5c415c2c108f5cf9.tar.gz
rust-75896011dc2a137d96a4941f5c415c2c108f5cf9.zip
pprust: Do not convert attributes into `MetaItem`s for printing
Fixes https://github.com/rust-lang/rust/issues/62628
-rw-r--r--src/libsyntax/print/pprust.rs26
-rw-r--r--src/test/pretty/attr-literals.rs4
-rw-r--r--src/test/pretty/attr-tokens-raw-ident.rs7
3 files changed, 20 insertions, 17 deletions
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index e101168a137..a07bba04489 100644
--- a/src/libsyntax/print/pprust.rs
+++ b/src/libsyntax/print/pprust.rs
@@ -617,21 +617,17 @@ pub trait PrintState<'a>: std::ops::Deref<Target=pp::Printer> + std::ops::DerefM
                 ast::AttrStyle::Outer => self.word("#["),
             }
             self.ibox(0);
-            if let Some(mi) = attr.meta() {
-                self.print_meta_item(&mi);
-            } else {
-                match attr.tokens.trees().next() {
-                    Some(TokenTree::Delimited(_, delim, tts)) => {
-                        self.print_mac_common(
-                            Some(&attr.path), false, None, delim, tts, true, attr.span
-                        );
-                    }
-                    tree => {
-                        self.print_path(&attr.path, false, 0);
-                        if tree.is_some() {
-                            self.space();
-                            self.print_tts(attr.tokens.clone(), true);
-                        }
+            match attr.tokens.trees().next() {
+                Some(TokenTree::Delimited(_, delim, tts)) => {
+                    self.print_mac_common(
+                        Some(&attr.path), false, None, delim, tts, true, attr.span
+                    );
+                }
+                tree => {
+                    self.print_path(&attr.path, false, 0);
+                    if tree.is_some() {
+                        self.space();
+                        self.print_tts(attr.tokens.clone(), true);
                     }
                 }
             }
diff --git a/src/test/pretty/attr-literals.rs b/src/test/pretty/attr-literals.rs
index 44d2c5db3e6..bcd6ffaaf81 100644
--- a/src/test/pretty/attr-literals.rs
+++ b/src/test/pretty/attr-literals.rs
@@ -5,10 +5,10 @@
 #![feature(rustc_attrs)]
 
 fn main() {
-    #![rustc_dummy("hi", 1, 2, 1.012, pi = 3.14, bye, name("John"))]
+    #![rustc_dummy("hi" , 1 , 2 , 1.012 , pi = 3.14 , bye , name ("John"))]
     #[rustc_dummy = 8]
     fn f() { }
 
-    #[rustc_dummy(1, 2, 3)]
+    #[rustc_dummy(1 , 2 , 3)]
     fn g() { }
 }
diff --git a/src/test/pretty/attr-tokens-raw-ident.rs b/src/test/pretty/attr-tokens-raw-ident.rs
new file mode 100644
index 00000000000..bb2c4bb558e
--- /dev/null
+++ b/src/test/pretty/attr-tokens-raw-ident.rs
@@ -0,0 +1,7 @@
+// Keywords in attribute paths are printed as raw idents,
+// but keywords in attribute arguments are not.
+
+// pp-exact
+
+#[rustfmt::r#final(final)]
+fn main() { }