Skip to content

Commit

Permalink
Rollup merge of #110964 - notriddle:notriddle/deref-impl, r=Guillaume…
Browse files Browse the repository at this point in the history
…Gomez

rustdoc: fix weird margins between Deref impl items

## Before

![image](https://user-images.githubusercontent.com/1593513/235245977-90770591-22c1-4a27-9464-248a3729a2b7.png)

## After

![image](https://user-images.githubusercontent.com/1593513/235246009-0e83113e-42b7-4e29-981d-969f9d20af01.png)

## Description

In the old setup, if the dereffed-to item has multiple impl blocks, each one gets its own `div.impl-items` in the section, but there are no headers separating them. Since the last method in a `div.impl-items` has no bottom margin, and there are no margins between these divs, there is no margin between the last method of one impl and the first method of the following impl.

This patch fixes it by simplifying the HTML. Each Deref block gets exactly one `div.impl-items`, no matter how many impl blocks it actually has.
  • Loading branch information
matthiaskrgr committed Apr 29, 2023
2 parents cdcec39 + 2299ba1 commit 39ed894
Show file tree
Hide file tree
Showing 13 changed files with 55 additions and 6 deletions.
18 changes: 12 additions & 6 deletions src/librustdoc/html/render/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1155,10 +1155,10 @@ fn render_assoc_items_inner(
let (non_trait, traits): (Vec<_>, _) = v.iter().partition(|i| i.inner_impl().trait_.is_none());
if !non_trait.is_empty() {
let mut tmp_buf = Buffer::html();
let (render_mode, id) = match what {
let (render_mode, id, class_html) = match what {
AssocItemRender::All => {
write_impl_section_heading(&mut tmp_buf, "Implementations", "implementations");
(RenderMode::Normal, "implementations-list".to_owned())
(RenderMode::Normal, "implementations-list".to_owned(), "")
}
AssocItemRender::DerefFor { trait_, type_, deref_mut_ } => {
let id =
Expand All @@ -1175,7 +1175,11 @@ fn render_assoc_items_inner(
),
&id,
);
(RenderMode::ForDeref { mut_: deref_mut_ }, cx.derive_id(id))
(
RenderMode::ForDeref { mut_: deref_mut_ },
cx.derive_id(id),
r#" class="impl-items""#,
)
}
};
let mut impls_buf = Buffer::html();
Expand All @@ -1199,7 +1203,7 @@ fn render_assoc_items_inner(
}
if !impls_buf.is_empty() {
write!(w, "{}", tmp_buf.into_inner()).unwrap();
write!(w, "<div id=\"{}\">", id).unwrap();
write!(w, "<div id=\"{id}\"{class_html}>").unwrap();
write!(w, "{}", impls_buf.into_inner()).unwrap();
w.write_str("</div>").unwrap();
}
Expand Down Expand Up @@ -1788,12 +1792,14 @@ fn render_impl(
.into_string()
);
}
if !default_impl_items.is_empty() || !impl_items.is_empty() {
w.write_str("<div class=\"impl-items\">");
close_tags.insert_str(0, "</div>");
}
}
if !default_impl_items.is_empty() || !impl_items.is_empty() {
w.write_str("<div class=\"impl-items\">");
w.push_buffer(default_impl_items);
w.push_buffer(impl_items);
close_tags.insert_str(0, "</div>");
}
w.write_str(&close_tags);
}
Expand Down
File renamed without changes.
43 changes: 43 additions & 0 deletions tests/rustdoc/deref/deref-multiple-impl-blocks.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#![crate_name="foo"]

use std::ops::{Deref, DerefMut};

// @has foo/struct.Vec.html
// @count - '//h2[@id="deref-methods-Slice"]' 1
// @count - '//div[@id="deref-methods-Slice-1"]' 1
// @count - '//div[@id="deref-methods-Slice-1"][@class="impl-items"]' 1
// @count - '//div[@id="deref-methods-Slice-1"]/div[@class="impl-items"]' 0
pub struct Vec;

pub struct Slice;

impl Deref for Vec {
type Target = Slice;
fn deref(&self) -> &Slice {
&Slice
}
}

impl DerefMut for Vec {
fn deref_mut(&mut self) -> &mut Slice {
&mut Slice
}
}

impl Slice {
pub fn sort_floats(&mut self) {
todo!();
}
}

impl Slice {
pub fn sort(&mut self) {
todo!();
}
}

impl Slice {
pub fn len(&self) {
todo!();
}
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 comments on commit 39ed894

Please sign in to comment.