about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2021-02-08 10:46:10 +0000
committerbors <bors@rust-lang.org>2021-02-08 10:46:10 +0000
commit921ec4b3fca17cc777766c240038d7d50ba98e0d (patch)
tree4f51838c34a4802fd9df8a70f3e6cfed6999349a
parent0b96f60c07896f9dac5a0ad15464fa4ab3c1437f (diff)
parent1daddb47d2516b503941e8893193789f030b4971 (diff)
downloadrust-921ec4b3fca17cc777766c240038d7d50ba98e0d.tar.gz
rust-921ec4b3fca17cc777766c240038d7d50ba98e0d.zip
Auto merge of #81313 - LeSeulArtichaut:revert-32558, r=jyn514
Restore linking to itself in implementors section of trait page

Reverts #32558 as proposed in [this Zulip discussion](https://rust-lang.zulipchat.com/#narrow/stream/266220-rustdoc/topic/Trait.20implementation.20self-links/near/223773273)
r? `@jyn514` cc `@camelid`
-rw-r--r--src/librustdoc/html/format.rs45
-rw-r--r--src/librustdoc/html/render/mod.rs13
-rw-r--r--src/test/rustdoc/trait-self-link.rs2
3 files changed, 9 insertions, 51 deletions
diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs
index d7951961223..bea0e75832c 100644
--- a/src/librustdoc/html/format.rs
+++ b/src/librustdoc/html/format.rs
@@ -102,14 +102,6 @@ impl Buffer {
         self.into_inner()
     }
 
-    crate fn from_display<T: std::fmt::Display>(&mut self, t: T) {
-        if self.for_html {
-            write!(self, "{}", t);
-        } else {
-            write!(self, "{:#}", t);
-        }
-    }
-
     crate fn is_for_html(&self) -> bool {
         self.for_html
     }
@@ -900,16 +892,7 @@ impl clean::Type {
 }
 
 impl clean::Impl {
-    crate fn print<'a>(&'a self, cache: &'a Cache) -> impl fmt::Display + 'a {
-        self.print_inner(true, false, cache)
-    }
-
-    fn print_inner<'a>(
-        &'a self,
-        link_trait: bool,
-        use_absolute: bool,
-        cache: &'a Cache,
-    ) -> impl fmt::Display + 'a {
+    crate fn print<'a>(&'a self, cache: &'a Cache, use_absolute: bool) -> impl fmt::Display + 'a {
         display_fn(move |f| {
             if f.alternate() {
                 write!(f, "impl{:#} ", self.generics.print(cache))?;
@@ -921,21 +904,7 @@ impl clean::Impl {
                 if self.negative_polarity {
                     write!(f, "!")?;
                 }
-
-                if link_trait {
-                    fmt::Display::fmt(&ty.print(cache), f)?;
-                } else {
-                    match ty {
-                        clean::ResolvedPath {
-                            param_names: None, path, is_generic: false, ..
-                        } => {
-                            let last = path.segments.last().unwrap();
-                            fmt::Display::fmt(&last.name, f)?;
-                            fmt::Display::fmt(&last.args.print(cache), f)?;
-                        }
-                        _ => unreachable!(),
-                    }
-                }
+                fmt::Display::fmt(&ty.print(cache), f)?;
                 write!(f, " for ")?;
             }
 
@@ -952,16 +921,6 @@ impl clean::Impl {
     }
 }
 
-// The difference from above is that trait is not hyperlinked.
-crate fn fmt_impl_for_trait_page(
-    i: &clean::Impl,
-    f: &mut Buffer,
-    use_absolute: bool,
-    cache: &Cache,
-) {
-    f.from_display(i.print_inner(false, use_absolute, cache))
-}
-
 impl clean::Arguments {
     crate fn print<'a>(&'a self, cache: &'a Cache) -> impl fmt::Display + 'a {
         display_fn(move |f| {
diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs
index 16366d7b131..914ad35e7a4 100644
--- a/src/librustdoc/html/render/mod.rs
+++ b/src/librustdoc/html/render/mod.rs
@@ -73,7 +73,6 @@ use crate::formats::cache::Cache;
 use crate::formats::item_type::ItemType;
 use crate::formats::{AssocItemRender, FormatRenderer, Impl, RenderMode};
 use crate::html::escape::Escape;
-use crate::html::format::fmt_impl_for_trait_page;
 use crate::html::format::Function;
 use crate::html::format::{href, print_default_space, print_generic_bounds, WhereClause};
 use crate::html::format::{print_abi_with_space, Buffer, PrintWithSpace};
@@ -1138,7 +1137,7 @@ themePicker.onblur = handleThemeButtonsBlur;
                     None
                 } else {
                     Some(Implementor {
-                        text: imp.inner_impl().print(cx.cache()).to_string(),
+                        text: imp.inner_impl().print(cx.cache(), false).to_string(),
                         synthetic: imp.inner_impl().synthetic,
                         types: collect_paths_for_type(imp.inner_impl().for_.clone(), cx.cache()),
                     })
@@ -2550,8 +2549,8 @@ fn bounds(t_bounds: &[clean::GenericBound], trait_alias: bool, cache: &Cache) ->
 }
 
 fn compare_impl<'a, 'b>(lhs: &'a &&Impl, rhs: &'b &&Impl, cache: &Cache) -> Ordering {
-    let lhs = format!("{}", lhs.inner_impl().print(cache));
-    let rhs = format!("{}", rhs.inner_impl().print(cache));
+    let lhs = format!("{}", lhs.inner_impl().print(cache, false));
+    let rhs = format!("{}", rhs.inner_impl().print(cache, false));
 
     // lhs and rhs are formatted as HTML, which may be unnecessary
     compare_names(&lhs, &rhs)
@@ -3698,7 +3697,7 @@ fn spotlight_decl(decl: &clean::FnDecl, cache: &Cache) -> String {
                     write!(
                         &mut out,
                         "<span class=\"where fmt-newline\">{}</span>",
-                        impl_.print(cache)
+                        impl_.print(cache, false)
                     );
                     let t_did = impl_.trait_.def_id_full(cache).unwrap();
                     for it in &impl_.items {
@@ -3771,7 +3770,7 @@ fn render_impl(
         };
         if let Some(use_absolute) = use_absolute {
             write!(w, "<h3 id=\"{}\" class=\"impl\"{}><code class=\"in-band\">", id, aliases);
-            fmt_impl_for_trait_page(&i.inner_impl(), w, use_absolute, cx.cache());
+            write!(w, "{}", i.inner_impl().print(cx.cache(), use_absolute));
             if show_def_docs {
                 for it in &i.inner_impl().items {
                     if let clean::TypedefItem(ref tydef, _) = *it.kind {
@@ -3796,7 +3795,7 @@ fn render_impl(
                 "<h3 id=\"{}\" class=\"impl\"{}><code class=\"in-band\">{}</code>",
                 id,
                 aliases,
-                i.inner_impl().print(cx.cache())
+                i.inner_impl().print(cx.cache(), false)
             );
         }
         write!(w, "<a href=\"#{}\" class=\"anchor\"></a>", id);
diff --git a/src/test/rustdoc/trait-self-link.rs b/src/test/rustdoc/trait-self-link.rs
index 51e1fe91f96..bac28b44012 100644
--- a/src/test/rustdoc/trait-self-link.rs
+++ b/src/test/rustdoc/trait-self-link.rs
@@ -1,4 +1,4 @@
-// @!has trait_self_link/trait.Foo.html //a/@href ../trait_self_link/trait.Foo.html
+// @has trait_self_link/trait.Foo.html //a/@href ../trait_self_link/trait.Foo.html
 pub trait Foo {}
 
 pub struct Bar;