about summary refs log tree commit diff
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2016-04-16 01:16:44 +0530
committerManish Goregaokar <manishsmail@gmail.com>2016-04-16 01:18:05 +0530
commitfbbe85c6bafce59e1be4a966c1529f396bd546f0 (patch)
tree6c00818acb8f7fa507d81a7b78e191b28e1f46a5
parent50932f5c6a358be8c26f48d25ee5be0547072b92 (diff)
parentec5e0f81cf54ca287e6652923e1bf46f4fc1c783 (diff)
downloadrust-fbbe85c6bafce59e1be4a966c1529f396bd546f0.tar.gz
rust-fbbe85c6bafce59e1be4a966c1529f396bd546f0.zip
Rollup merge of #32935 - pierzchalski:restore_trait_impl_docs, r=alexcrichton
Restore trait impl docs

Currently, documentation on methods in trait implementations doesn't get rendered. This changes that;  trait implementations have all documentation associated with impl items displayed (documentation from the trait definition is ignored).

Fixes #24838
Fixes #26871
-rw-r--r--src/librustdoc/html/render.rs15
-rw-r--r--src/test/rustdoc/manual_impl.rs78
2 files changed, 85 insertions, 8 deletions
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index c5850089578..ba1fbc75c18 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -2489,7 +2489,7 @@ fn render_impl(w: &mut fmt::Formatter, cx: &Context, i: &Impl, link: AssocItemLi
     }
 
     fn doctraititem(w: &mut fmt::Formatter, cx: &Context, item: &clean::Item,
-                    link: AssocItemLink, render_static: bool,
+                    link: AssocItemLink, render_static: bool, is_default_item: bool,
                     outer_version: Option<&str>) -> fmt::Result {
         let shortty = shortty(item);
         let name = item.name.as_ref().unwrap();
@@ -2540,17 +2540,16 @@ fn render_impl(w: &mut fmt::Formatter, cx: &Context, i: &Impl, link: AssocItemLi
             _ => panic!("can't make docs for trait item with name {:?}", item.name)
         }
 
-        match link {
-            AssocItemLink::Anchor if !is_static || render_static => {
-                document(w, cx, item)
-            },
-            _ => Ok(()),
+        if !is_default_item && (!is_static || render_static) {
+            document(w, cx, item)
+        } else {
+            Ok(())
         }
     }
 
     write!(w, "<div class='impl-items'>")?;
     for trait_item in &i.impl_.items {
-        doctraititem(w, cx, trait_item, link, render_header, outer_version)?;
+        doctraititem(w, cx, trait_item, link, render_header, false, outer_version)?;
     }
 
     fn render_default_items(w: &mut fmt::Formatter,
@@ -2567,7 +2566,7 @@ fn render_impl(w: &mut fmt::Formatter, cx: &Context, i: &Impl, link: AssocItemLi
             let did = i.trait_.as_ref().unwrap().def_id().unwrap();
             let assoc_link = AssocItemLink::GotoSource(did, &i.provided_trait_methods);
 
-            doctraititem(w, cx, trait_item, assoc_link, render_static,
+            doctraititem(w, cx, trait_item, assoc_link, render_static, true,
                          outer_version)?;
         }
         Ok(())
diff --git a/src/test/rustdoc/manual_impl.rs b/src/test/rustdoc/manual_impl.rs
new file mode 100644
index 00000000000..5eccf97bb5f
--- /dev/null
+++ b/src/test/rustdoc/manual_impl.rs
@@ -0,0 +1,78 @@
+// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// @has manual_impl/trait.T.html
+// @has  - '//*[@class="docblock"]' 'Docs associated with the trait definition.'
+// @has  - '//*[@class="docblock"]' 'Docs associated with the trait a_method definition.'
+// @has  - '//*[@class="docblock"]' 'Docs associated with the trait b_method definition.'
+/// Docs associated with the trait definition.
+pub trait T {
+    /// Docs associated with the trait a_method definition.
+    fn a_method(&self) -> usize;
+
+    /// Docs associated with the trait b_method definition.
+    fn b_method(&self) -> usize {
+        self.a_method()
+    }
+}
+
+// @has manual_impl/struct.S1.html '//*[@class="trait"]' 'T'
+// @has  - '//*[@class="docblock"]' 'Docs associated with the S1 trait implementation.'
+// @has  - '//*[@class="docblock"]' 'Docs associated with the S1 trait a_method implementation.'
+// @!has - '//*[@class="docblock"]' 'Docs associated with the trait a_method definition.'
+// @!has - '//*[@class="docblock"]' 'Docs associated with the trait b_method definition.'
+pub struct S1(usize);
+
+/// Docs associated with the S1 trait implementation.
+impl T for S1 {
+    /// Docs associated with the S1 trait a_method implementation.
+    fn a_method(&self) -> usize {
+        self.0
+    }
+}
+
+// @has manual_impl/struct.S2.html '//*[@class="trait"]' 'T'
+// @has  - '//*[@class="docblock"]' 'Docs associated with the S2 trait implementation.'
+// @has  - '//*[@class="docblock"]' 'Docs associated with the S2 trait a_method implementation.'
+// @has  - '//*[@class="docblock"]' 'Docs associated with the S2 trait b_method implementation.'
+// @!has - '//*[@class="docblock"]' 'Docs associated with the trait a_method definition.'
+// @!has - '//*[@class="docblock"]' 'Docs associated with the trait b_method definition.'
+pub struct S2(usize);
+
+/// Docs associated with the S2 trait implementation.
+impl T for S2 {
+    /// Docs associated with the S2 trait a_method implementation.
+    fn a_method(&self) -> usize {
+        self.0
+    }
+
+    /// Docs associated with the S2 trait b_method implementation.
+    fn b_method(&self) -> usize {
+        5
+    }
+}
+
+// @has manual_impl/struct.S3.html '//*[@class="trait"]' 'T'
+// @has  - '//*[@class="docblock"]' 'Docs associated with the S3 trait implementation.'
+// @has  - '//*[@class="docblock"]' 'Docs associated with the S3 trait b_method implementation.'
+// @!has - '//*[@class="docblock"]' 'Docs associated with the trait a_method definition.'
+pub struct S3(usize);
+
+/// Docs associated with the S3 trait implementation.
+impl T for S3 {
+    fn a_method(&self) -> usize {
+        self.0
+    }
+
+    /// Docs associated with the S3 trait b_method implementation.
+    fn b_method(&self) -> usize {
+        5
+    }
+}