about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2015-04-06 20:15:59 -0700
committerAlex Crichton <alex@alexcrichton.com>2015-04-07 17:54:34 -0700
commit8874fd496202994f0c14909b436dc169837ab0e7 (patch)
tree6472a2f2590b2cf490a6e108656c951fc10f5ba8
parent8f6855c8c8e22efeea2f5766c2b653b674b1c9cf (diff)
downloadrust-8874fd496202994f0c14909b436dc169837ab0e7.tar.gz
rust-8874fd496202994f0c14909b436dc169837ab0e7.zip
rustdoc: Show impls for references to types
It's somewhat common to impl traits for `&T` and `&mut T` so show these on the
pages for `T` to ensure they're listed somewhere at least.

Closes #20175
-rw-r--r--src/librustdoc/html/render.rs7
-rw-r--r--src/test/rustdoc/issue-20175.rs20
2 files changed, 26 insertions, 1 deletions
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index 85f538e7dc3..92fe5b019db 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -1059,7 +1059,12 @@ impl DocFolder for Cache {
                         // Figure out the id of this impl. This may map to a
                         // primitive rather than always to a struct/enum.
                         let did = match i.for_ {
-                            ResolvedPath { did, .. } => Some(did),
+                            ResolvedPath { did, .. } |
+                            BorrowedRef {
+                                type_: box ResolvedPath { did, .. }, ..
+                            } => {
+                                Some(did)
+                            }
 
                             // References to primitives are picked up as well to
                             // recognize implementations for &str, this may not
diff --git a/src/test/rustdoc/issue-20175.rs b/src/test/rustdoc/issue-20175.rs
new file mode 100644
index 00000000000..33ec4b75c41
--- /dev/null
+++ b/src/test/rustdoc/issue-20175.rs
@@ -0,0 +1,20 @@
+// 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.
+
+pub trait Foo {
+    fn foo(&self) {}
+}
+
+pub struct Bar;
+
+// @has issue_20175/struct.Bar.html \
+//      '//*[@id="method.foo"]' \
+//      'fn foo'
+impl<'a> Foo for &'a Bar {}