about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJimmy Cuadra <jimmy@jimmycuadra.com>2017-02-11 04:16:13 -0800
committerJimmy Cuadra <jimmy@jimmycuadra.com>2017-02-11 04:16:13 -0800
commitc603839d5f8050cf050b18d7e2c14f48e78d2382 (patch)
tree5eca68248bc2dbf41b9277fb6636923b18f45f8e
parentbae454edc5e18e81b831baf4a7647bf2dda620a8 (diff)
downloadrust-c603839d5f8050cf050b18d7e2c14f48e78d2382.tar.gz
rust-c603839d5f8050cf050b18d7e2c14f48e78d2382.zip
rustdoc: Only include a stability span if needed.
-rw-r--r--src/librustdoc/clean/mod.rs30
-rw-r--r--src/librustdoc/html/render.rs17
2 files changed, 32 insertions, 15 deletions
diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs
index 291fc8dfa96..4a6e8622460 100644
--- a/src/librustdoc/clean/mod.rs
+++ b/src/librustdoc/clean/mod.rs
@@ -327,17 +327,27 @@ impl Item {
         }
     }
 
-    pub fn stability_class(&self) -> String {
-        self.stability.as_ref().map(|ref s| {
-            let mut base = match s.level {
-                stability::Unstable => "unstable".to_string(),
-                stability::Stable => String::new(),
-            };
-            if !s.deprecated_since.is_empty() {
-                base.push_str(" deprecated");
+    pub fn stability_class(&self) -> Option<String> {
+        match self.stability {
+            Some(ref s) => {
+                let mut classes = Vec::with_capacity(2);
+
+                if s.level == stability::Unstable {
+                    classes.push("unstable");
+                }
+
+                if !s.deprecated_since.is_empty() {
+                    classes.push("deprecated");
+                }
+
+                if classes.len() != 0 {
+                    Some(classes.join(" "))
+                } else {
+                    None
+                }
             }
-            base
-        }).unwrap_or(String::new())
+            None => None,
+        }
     }
 
     pub fn stable_since(&self) -> Option<&str> {
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index 6234d890244..fc1597469b1 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -1827,7 +1827,7 @@ fn item_module(w: &mut fmt::Formatter, cx: &Context,
                        stab_docs = stab_docs,
                        docs = shorter(Some(&Markdown(doc_value).to_string())),
                        class = myitem.type_(),
-                       stab = myitem.stability_class(),
+                       stab = myitem.stability_class().unwrap_or("".to_string()),
                        unsafety_flag = unsafety_flag,
                        href = item_path(myitem.type_(), myitem.name.as_ref().unwrap()),
                        title = full_path(cx, myitem))?;
@@ -2369,13 +2369,16 @@ fn item_struct(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item,
                 write!(w, "<span id='{id}' class='{item_type}'>
                            <span id='{ns_id}' class='invisible'>
                            <code>{name}: {ty}</code>
-                           </span></span><span class='stab {stab}'></span>",
+                           </span></span>",
                        item_type = ItemType::StructField,
                        id = id,
                        ns_id = ns_id,
-                       stab = field.stability_class(),
                        name = field.name.as_ref().unwrap(),
                        ty = ty)?;
+                if let Some(stability_class) = field.stability_class() {
+                    write!(w, "<span class='stab {stab}'></span>",
+                        stab = stability_class)?;
+                }
                 document(w, cx, field)?;
             }
         }
@@ -2406,11 +2409,15 @@ fn item_union(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item,
         write!(w, "<h2 class='fields'>Fields</h2>")?;
         for (field, ty) in fields {
             write!(w, "<span id='{shortty}.{name}' class='{shortty}'><code>{name}: {ty}</code>
-                       </span><span class='stab {stab}'></span>",
+                       </span>",
                    shortty = ItemType::StructField,
-                   stab = field.stability_class(),
                    name = field.name.as_ref().unwrap(),
                    ty = ty)?;
+            if let Some(stability_class) = field.stability_class() {
+                write!(w, "<span class='stab {stab}'></span>",
+                    stab = stability_class)?;
+            }
+            write!(w, "</span>")?;
             document(w, cx, field)?;
         }
     }