Skip to content

Commit 5499683

Browse files
committed
Auto merge of #44350 - GuillaumeGomez:id-false-positive, r=QuietMisdreavus
Improve how rustdoc warnings are displayed cc @rust-lang/dev-tools r? @nrc
2 parents f60bc3a + 7aa5367 commit 5499683

File tree

1 file changed

+44
-24
lines changed

1 file changed

+44
-24
lines changed

src/librustdoc/html/render.rs

+44-24
Original file line numberDiff line numberDiff line change
@@ -590,14 +590,10 @@ pub fn run(mut krate: clean::Crate,
590590

591591
let markdown_warnings = scx.markdown_warnings.borrow();
592592
if !markdown_warnings.is_empty() {
593-
println!("WARNING: documentation for this crate may be rendered \
594-
differently using the new Pulldown renderer.");
595-
println!(" See https://github.com/rust-lang/rust/issues/44229 for details.");
593+
let mut intro_msg = false;
596594
for &(ref span, ref text, ref diffs) in &*markdown_warnings {
597-
println!("WARNING: rendering difference in `{}`", concise_str(text));
598-
println!(" --> {}:{}:{}", span.filename, span.loline, span.locol);
599595
for d in diffs {
600-
render_difference(d);
596+
render_difference(d, &mut intro_msg, span, text);
601597
}
602598
}
603599
}
@@ -650,43 +646,67 @@ fn concise_compared_strs(s1: &str, s2: &str) -> (String, String) {
650646
(format!("...{}", concise_str(s1)), format!("...{}", concise_str(s2)))
651647
}
652648

653-
fn render_difference(diff: &html_diff::Difference) {
649+
650+
fn print_message(msg: &str, intro_msg: &mut bool, span: &Span, text: &str) {
651+
if !*intro_msg {
652+
println!("WARNING: documentation for this crate may be rendered \
653+
differently using the new Pulldown renderer.");
654+
println!(" See https://github.com/rust-lang/rust/issues/44229 for details.");
655+
*intro_msg = true;
656+
}
657+
println!("WARNING: rendering difference in `{}`", concise_str(text));
658+
println!(" --> {}:{}:{}", span.filename, span.loline, span.locol);
659+
println!("{}", msg);
660+
}
661+
662+
fn render_difference(diff: &html_diff::Difference, intro_msg: &mut bool, span: &Span, text: &str) {
654663
match *diff {
655664
html_diff::Difference::NodeType { ref elem, ref opposite_elem } => {
656-
println!(" {} Types differ: expected: `{}`, found: `{}`",
657-
elem.path, elem.element_name, opposite_elem.element_name);
665+
print_message(&format!(" {} Types differ: expected: `{}`, found: `{}`",
666+
elem.path, elem.element_name, opposite_elem.element_name),
667+
intro_msg, span, text);
658668
}
659669
html_diff::Difference::NodeName { ref elem, ref opposite_elem } => {
660-
println!(" {} Tags differ: expected: `{}`, found: `{}`",
661-
elem.path, elem.element_name, opposite_elem.element_name);
670+
print_message(&format!(" {} Tags differ: expected: `{}`, found: `{}`",
671+
elem.path, elem.element_name, opposite_elem.element_name),
672+
intro_msg, span, text);
662673
}
663674
html_diff::Difference::NodeAttributes { ref elem,
664-
ref elem_attributes,
665-
ref opposite_elem_attributes,
666-
.. } => {
667-
println!(" {} Attributes differ in `{}`: expected: `{:?}`, found: `{:?}`",
668-
elem.path, elem.element_name, elem_attributes, opposite_elem_attributes);
675+
ref elem_attributes,
676+
ref opposite_elem_attributes,
677+
.. } => {
678+
print_message(&format!(" {} Attributes differ in `{}`: expected: `{:?}`, \
679+
found: `{:?}`",
680+
elem.path, elem.element_name, elem_attributes,
681+
opposite_elem_attributes),
682+
intro_msg, span, text);
669683
}
670684
html_diff::Difference::NodeText { ref elem, ref elem_text, ref opposite_elem_text, .. } => {
671685
if elem_text.split("\n")
672686
.zip(opposite_elem_text.split("\n"))
673687
.any(|(a, b)| a.trim() != b.trim()) {
674688
let (s1, s2) = concise_compared_strs(elem_text, opposite_elem_text);
675-
println!(" {} Text differs:\n expected: `{}`\n found: `{}`",
676-
elem.path, s1, s2);
689+
print_message(&format!(" {} Text differs:\n expected: `{}`\n \
690+
found: `{}`",
691+
elem.path, s1, s2),
692+
intro_msg, span, text);
677693
}
678694
}
679695
html_diff::Difference::NotPresent { ref elem, ref opposite_elem } => {
680696
if let Some(ref elem) = *elem {
681-
println!(" {} One element is missing: expected: `{}`",
682-
elem.path, elem.element_name);
697+
print_message(&format!(" {} One element is missing: expected: `{}`",
698+
elem.path, elem.element_name),
699+
intro_msg, span, text);
683700
} else if let Some(ref elem) = *opposite_elem {
684701
if elem.element_name.is_empty() {
685-
println!(" {} Unexpected element: `{}`",
686-
elem.path, concise_str(&elem.element_content));
702+
print_message(&format!(" {} One element is missing: expected: `{}`",
703+
elem.path, concise_str(&elem.element_content)),
704+
intro_msg, span, text);
687705
} else {
688-
println!(" {} Unexpected element `{}`: found: `{}`",
689-
elem.path, elem.element_name, concise_str(&elem.element_content));
706+
print_message(&format!(" {} Unexpected element `{}`: found: `{}`",
707+
elem.path, elem.element_name,
708+
concise_str(&elem.element_content)),
709+
intro_msg, span, text);
690710
}
691711
}
692712
}

0 commit comments

Comments
 (0)