Auto merge of #41991 - GuillaumeGomez:rustdoc-html-diff, r=nrc
Add warnings when rustdoc html rendering differs
This commit is contained in:
commit
97b01abf3d
9 changed files with 406 additions and 56 deletions
|
@ -75,6 +75,8 @@ use html::item_type::ItemType;
|
|||
use html::markdown::{self, Markdown, MarkdownHtml, MarkdownSummaryLine, RenderType};
|
||||
use html::{highlight, layout};
|
||||
|
||||
use html_diff;
|
||||
|
||||
/// A pair of name and its optional document.
|
||||
pub type NameDoc = (String, Option<String>);
|
||||
|
||||
|
@ -1643,6 +1645,33 @@ fn document(w: &mut fmt::Formatter, cx: &Context, item: &clean::Item) -> fmt::Re
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn get_html_diff(w: &mut fmt::Formatter, md_text: &str, render_type: RenderType,
|
||||
prefix: &str) -> fmt::Result {
|
||||
let output = format!("{}", Markdown(md_text, render_type));
|
||||
let old = format!("{}", Markdown(md_text, match render_type {
|
||||
RenderType::Hoedown => RenderType::Pulldown,
|
||||
RenderType::Pulldown => RenderType::Hoedown,
|
||||
}));
|
||||
let differences = html_diff::get_differences(&output, &old);
|
||||
if !differences.is_empty() {
|
||||
println!("Differences spotted in {:?}:\n{}",
|
||||
md_text,
|
||||
differences.iter()
|
||||
.filter_map(|s| {
|
||||
match *s {
|
||||
html_diff::Difference::NodeText { ref elem_text,
|
||||
ref opposite_elem_text,
|
||||
.. }
|
||||
if elem_text.trim() == opposite_elem_text.trim() => None,
|
||||
_ => Some(format!("=> {}", s.to_string())),
|
||||
}
|
||||
})
|
||||
.collect::<Vec<String>>()
|
||||
.join("\n"));
|
||||
}
|
||||
write!(w, "<div class='docblock'>{}{}</div>", prefix, output)
|
||||
}
|
||||
|
||||
fn document_short(w: &mut fmt::Formatter, item: &clean::Item, link: AssocItemLink,
|
||||
render_type: RenderType, prefix: &str) -> fmt::Result {
|
||||
if let Some(s) = item.doc_value() {
|
||||
|
@ -1652,7 +1681,7 @@ fn document_short(w: &mut fmt::Formatter, item: &clean::Item, link: AssocItemLin
|
|||
} else {
|
||||
format!("{}", &plain_summary_line(Some(s)))
|
||||
};
|
||||
write!(w, "<div class='docblock'>{}{}</div>", prefix, Markdown(&markdown, render_type))?;
|
||||
get_html_diff(w, &markdown, render_type, prefix)?;
|
||||
} else if !prefix.is_empty() {
|
||||
write!(w, "<div class='docblock'>{}</div>", prefix)?;
|
||||
}
|
||||
|
@ -1676,7 +1705,7 @@ fn render_assoc_const_value(item: &clean::Item) -> String {
|
|||
fn document_full(w: &mut fmt::Formatter, item: &clean::Item,
|
||||
render_type: RenderType, prefix: &str) -> fmt::Result {
|
||||
if let Some(s) = item.doc_value() {
|
||||
write!(w, "<div class='docblock'>{}{}</div>", prefix, Markdown(s, render_type))?;
|
||||
get_html_diff(w, s, render_type, prefix)?;
|
||||
} else if !prefix.is_empty() {
|
||||
write!(w, "<div class='docblock'>{}</div>", prefix)?;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue