about summary refs log tree commit diff
path: root/src/libsyntax/attr/mod.rs
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2019-12-28 19:23:36 +0000
committerbors <bors@rust-lang.org>2019-12-28 19:23:36 +0000
commit3a3f4a7cbaff09722b8c7cc8f09ce86ff5f953a3 (patch)
treefcfc3033e187e6c402a0f5774a76bb61f47939dc /src/libsyntax/attr/mod.rs
parente39ae6f883b1ee47384daf6d32ff5e71272ce977 (diff)
parent3d57b8bcc0a6a0378a9cea0291bb76d44bec6ff8 (diff)
Auto merge of #67151 - petrochenkov:docomm, r=estebank
doc comments: Less attribute mimicking

Make sure doc comments are not converted into intermediate meta-items, or not mixed with `doc(inline)` or something like that.

Follow-up to https://github.com/rust-lang/rust/pull/65750.
Diffstat (limited to 'src/libsyntax/attr/mod.rs')
-rw-r--r--src/libsyntax/attr/mod.rs24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/libsyntax/attr/mod.rs b/src/libsyntax/attr/mod.rs
index 82685e98386..0cd300384f8 100644
--- a/src/libsyntax/attr/mod.rs
+++ b/src/libsyntax/attr/mod.rs
@@ -139,7 +139,7 @@ impl Attribute {
     pub fn has_name(&self, name: Symbol) -> bool {
         match self.kind {
             AttrKind::Normal(ref item) => item.path == name,
-            AttrKind::DocComment(_) => name == sym::doc,
+            AttrKind::DocComment(_) => false,
         }
     }
 
@@ -163,7 +163,7 @@ impl Attribute {
                     None
                 }
             }
-            AttrKind::DocComment(_) => Some(Ident::new(sym::doc, self.span)),
+            AttrKind::DocComment(_) => None,
         }
     }
     pub fn name_or_empty(&self) -> Symbol {
@@ -173,7 +173,7 @@ impl Attribute {
     pub fn value_str(&self) -> Option<Symbol> {
         match self.kind {
             AttrKind::Normal(ref item) => item.meta(self.span).and_then(|meta| meta.value_str()),
-            AttrKind::DocComment(comment) => Some(comment),
+            AttrKind::DocComment(..) => None,
         }
     }
 
@@ -279,17 +279,27 @@ impl Attribute {
         }
     }
 
+    pub fn doc_str(&self) -> Option<Symbol> {
+        match self.kind {
+            AttrKind::DocComment(symbol) => Some(symbol),
+            AttrKind::Normal(ref item) if item.path == sym::doc => {
+                item.meta(self.span).and_then(|meta| meta.value_str())
+            }
+            _ => None,
+        }
+    }
+
     pub fn get_normal_item(&self) -> &AttrItem {
         match self.kind {
             AttrKind::Normal(ref item) => item,
-            AttrKind::DocComment(_) => panic!("unexpected sugared doc"),
+            AttrKind::DocComment(_) => panic!("unexpected doc comment"),
         }
     }
 
     pub fn unwrap_normal_item(self) -> AttrItem {
         match self.kind {
             AttrKind::Normal(item) => item,
-            AttrKind::DocComment(_) => panic!("unexpected sugared doc"),
+            AttrKind::DocComment(_) => panic!("unexpected doc comment"),
         }
     }
 
@@ -297,9 +307,7 @@ impl Attribute {
     pub fn meta(&self) -> Option<MetaItem> {
         match self.kind {
             AttrKind::Normal(ref item) => item.meta(self.span),
-            AttrKind::DocComment(comment) => {
-                Some(mk_name_value_item_str(Ident::new(sym::doc, self.span), comment, self.span))
-            }
+            AttrKind::DocComment(..) => None,
         }
     }
 }