Don't display "Methods from Deref<...>" if no method is display (the ones which don't have self argument)

This commit is contained in:
Guillaume Gomez 2021-10-23 22:57:02 +02:00
parent 3398877858
commit dd68d207a5
2 changed files with 29 additions and 3 deletions

View File

@ -1075,9 +1075,10 @@ fn render_assoc_items_inner(
}; };
let (non_trait, traits): (Vec<_>, _) = v.iter().partition(|i| i.inner_impl().trait_.is_none()); let (non_trait, traits): (Vec<_>, _) = v.iter().partition(|i| i.inner_impl().trait_.is_none());
if !non_trait.is_empty() { if !non_trait.is_empty() {
let mut tmp_buf = Buffer::empty_from(w);
let render_mode = match what { let render_mode = match what {
AssocItemRender::All => { AssocItemRender::All => {
w.write_str( tmp_buf.write_str(
"<h2 id=\"implementations\" class=\"small-section-header\">\ "<h2 id=\"implementations\" class=\"small-section-header\">\
Implementations<a href=\"#implementations\" class=\"anchor\"></a>\ Implementations<a href=\"#implementations\" class=\"anchor\"></a>\
</h2>", </h2>",
@ -1091,7 +1092,7 @@ fn render_assoc_items_inner(
cx.deref_id_map.borrow_mut().insert(def_id, id.clone()); cx.deref_id_map.borrow_mut().insert(def_id, id.clone());
} }
write!( write!(
w, tmp_buf,
"<h2 id=\"{id}\" class=\"small-section-header\">\ "<h2 id=\"{id}\" class=\"small-section-header\">\
<span>Methods from {trait_}&lt;Target = {type_}&gt;</span>\ <span>Methods from {trait_}&lt;Target = {type_}&gt;</span>\
<a href=\"#{id}\" class=\"anchor\"></a>\ <a href=\"#{id}\" class=\"anchor\"></a>\
@ -1103,9 +1104,10 @@ fn render_assoc_items_inner(
RenderMode::ForDeref { mut_: deref_mut_ } RenderMode::ForDeref { mut_: deref_mut_ }
} }
}; };
let mut impls_buf = Buffer::empty_from(w);
for i in &non_trait { for i in &non_trait {
render_impl( render_impl(
w, &mut impls_buf,
cx, cx,
i, i,
containing_item, containing_item,
@ -1122,6 +1124,10 @@ fn render_assoc_items_inner(
}, },
); );
} }
if !impls_buf.is_empty() {
w.push_buffer(tmp_buf);
w.push_buffer(impls_buf);
}
} }
if !traits.is_empty() { if !traits.is_empty() {

View File

@ -5,7 +5,12 @@ pub struct A;
pub struct B; pub struct B;
pub struct C; pub struct C;
impl C {
pub fn c(&self) {}
}
// @has recursive_deref/struct.A.html '//h3[@class="code-header in-band"]' 'impl Deref for A' // @has recursive_deref/struct.A.html '//h3[@class="code-header in-band"]' 'impl Deref for A'
// @has '-' '//*[@class="impl-items"]//*[@id="method.c"]' 'pub fn c(&self)'
impl Deref for A { impl Deref for A {
type Target = B; type Target = B;
@ -15,6 +20,7 @@ impl Deref for A {
} }
// @has recursive_deref/struct.B.html '//h3[@class="code-header in-band"]' 'impl Deref for B' // @has recursive_deref/struct.B.html '//h3[@class="code-header in-band"]' 'impl Deref for B'
// @has '-' '//*[@class="impl-items"]//*[@id="method.c"]' 'pub fn c(&self)'
impl Deref for B { impl Deref for B {
type Target = C; type Target = C;
@ -38,7 +44,13 @@ pub struct E;
pub struct F; pub struct F;
pub struct G; pub struct G;
impl G {
// There is no "self" parameter so it shouldn't be listed!
pub fn g() {}
}
// @has recursive_deref/struct.D.html '//h3[@class="code-header in-band"]' 'impl Deref for D' // @has recursive_deref/struct.D.html '//h3[@class="code-header in-band"]' 'impl Deref for D'
// @!has '-' '//*[@id="deref-methods-G"]'
impl Deref for D { impl Deref for D {
type Target = E; type Target = E;
@ -48,6 +60,7 @@ impl Deref for D {
} }
// @has recursive_deref/struct.E.html '//h3[@class="code-header in-band"]' 'impl Deref for E' // @has recursive_deref/struct.E.html '//h3[@class="code-header in-band"]' 'impl Deref for E'
// @!has '-' '//*[@id="deref-methods-G"]'
impl Deref for E { impl Deref for E {
type Target = F; type Target = F;
@ -57,6 +70,7 @@ impl Deref for E {
} }
// @has recursive_deref/struct.F.html '//h3[@class="code-header in-band"]' 'impl Deref for F' // @has recursive_deref/struct.F.html '//h3[@class="code-header in-band"]' 'impl Deref for F'
// @!has '-' '//*[@id="deref-methods-G"]'
impl Deref for F { impl Deref for F {
type Target = G; type Target = G;
@ -78,7 +92,13 @@ impl Deref for G {
pub struct H; pub struct H;
pub struct I; pub struct I;
impl I {
// There is no "self" parameter so it shouldn't be listed!
pub fn i() {}
}
// @has recursive_deref/struct.H.html '//h3[@class="code-header in-band"]' 'impl Deref for H' // @has recursive_deref/struct.H.html '//h3[@class="code-header in-band"]' 'impl Deref for H'
// @!has '-' '//*[@id="deref-methods-I"]'
impl Deref for H { impl Deref for H {
type Target = I; type Target = I;