diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index 2774f2b4751ba..ea0ebe4710079 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -4579,12 +4579,13 @@ fn get_methods(
i: &clean::Impl,
for_deref: bool,
used_links: &mut FxHashSet,
+ deref_mut: bool,
) -> Vec {
i.items.iter().filter_map(|item| {
match item.name {
// Maybe check with clean::Visibility::Public as well?
Some(ref name) if !name.is_empty() && item.visibility.is_some() && item.is_method() => {
- if !for_deref || should_render_item(item, false) {
+ if !for_deref || should_render_item(item, deref_mut) {
Some(format!("{}",
get_next_url(used_links, format!("method.{}", name)),
name))
@@ -4625,7 +4626,7 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
.filter(|i| i.inner_impl().trait_.is_none())
.flat_map(move |i| get_methods(i.inner_impl(),
false,
- &mut used_links_bor.borrow_mut()))
+ &mut used_links_bor.borrow_mut(), false))
.collect::>();
// We want links' order to be reproducible so we don't use unstable sort.
ret.sort();
@@ -4659,7 +4660,8 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
.filter(|i| i.inner_impl().trait_.is_none())
.flat_map(|i| get_methods(i.inner_impl(),
true,
- &mut used_links))
+ &mut used_links,
+ true))
.collect::>();
// We want links' order to be reproducible so we don't use unstable sort.
ret.sort();
diff --git a/src/test/rustdoc/deref-mut-methods.rs b/src/test/rustdoc/deref-mut-methods.rs
new file mode 100644
index 0000000000000..0e27fc90b69a6
--- /dev/null
+++ b/src/test/rustdoc/deref-mut-methods.rs
@@ -0,0 +1,29 @@
+#![crate_name = "foo"]
+
+use std::ops;
+
+pub struct Foo;
+
+impl Foo {
+ pub fn foo(&mut self) {}
+}
+
+// @has foo/struct.Bar.html
+// @has - '//div[@class="sidebar-links"]/a[@href="#method.foo"]' 'foo'
+pub struct Bar {
+ foo: Foo,
+}
+
+impl ops::Deref for Bar {
+ type Target = Foo;
+
+ fn deref(&self) -> &Foo {
+ &self.foo
+ }
+}
+
+impl ops::DerefMut for Bar {
+ fn deref_mut(&mut self) -> &mut Foo {
+ &mut self.foo
+ }
+}