Skip to content

Commit 7aa5367

Browse files
Improve how warnings are displayed
1 parent ef227f5 commit 7aa5367

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
@@ -588,14 +588,10 @@ pub fn run(mut krate: clean::Crate,
588588

589589
let markdown_warnings = scx.markdown_warnings.borrow();
590590
if !markdown_warnings.is_empty() {
591-
println!("WARNING: documentation for this crate may be rendered \
592-
differently using the new Pulldown renderer.");
593-
println!(" See https://github.com/rust-lang/rust/issues/44229 for details.");
591+
let mut intro_msg = false;
594592
for &(ref span, ref text, ref diffs) in &*markdown_warnings {
595-
println!("WARNING: rendering difference in `{}`", concise_str(text));
596-
println!(" --> {}:{}:{}", span.filename, span.loline, span.locol);
597593
for d in diffs {
598-
render_difference(d);
594+
render_difference(d, &mut intro_msg, span, text);
599595
}
600596
}
601597
}
@@ -648,43 +644,67 @@ fn concise_compared_strs(s1: &str, s2: &str) -> (String, String) {
648644
(format!("...{}", concise_str(s1)), format!("...{}", concise_str(s2)))
649645
}
650646

651-
fn render_difference(diff: &html_diff::Difference) {
647+
648+
fn print_message(msg: &str, intro_msg: &mut bool, span: &Span, text: &str) {
649+
if !*intro_msg {
650+
println!("WARNING: documentation for this crate may be rendered \
651+
differently using the new Pulldown renderer.");
652+
println!(" See https://github.com/rust-lang/rust/issues/44229 for details.");
653+
*intro_msg = true;
654+
}
655+
println!("WARNING: rendering difference in `{}`", concise_str(text));
656+
println!(" --> {}:{}:{}", span.filename, span.loline, span.locol);
657+
println!("{}", msg);
658+
}
659+
660+
fn render_difference(diff: &html_diff::Difference, intro_msg: &mut bool, span: &Span, text: &str) {
652661
match *diff {
653662
html_diff::Difference::NodeType { ref elem, ref opposite_elem } => {
654-
println!(" {} Types differ: expected: `{}`, found: `{}`",
655-
elem.path, elem.element_name, opposite_elem.element_name);
663+
print_message(&format!(" {} Types differ: expected: `{}`, found: `{}`",
664+
elem.path, elem.element_name, opposite_elem.element_name),
665+
intro_msg, span, text);
656666
}
657667
html_diff::Difference::NodeName { ref elem, ref opposite_elem } => {
658-
println!(" {} Tags differ: expected: `{}`, found: `{}`",
659-
elem.path, elem.element_name, opposite_elem.element_name);
668+
print_message(&format!(" {} Tags differ: expected: `{}`, found: `{}`",
669+
elem.path, elem.element_name, opposite_elem.element_name),
670+
intro_msg, span, text);
660671
}
661672
html_diff::Difference::NodeAttributes { ref elem,
662-
ref elem_attributes,
663-
ref opposite_elem_attributes,
664-
.. } => {
665-
println!(" {} Attributes differ in `{}`: expected: `{:?}`, found: `{:?}`",
666-
elem.path, elem.element_name, elem_attributes, opposite_elem_attributes);
673+
ref elem_attributes,
674+
ref opposite_elem_attributes,
675+
.. } => {
676+
print_message(&format!(" {} Attributes differ in `{}`: expected: `{:?}`, \
677+
found: `{:?}`",
678+
elem.path, elem.element_name, elem_attributes,
679+
opposite_elem_attributes),
680+
intro_msg, span, text);
667681
}
668682
html_diff::Difference::NodeText { ref elem, ref elem_text, ref opposite_elem_text, .. } => {
669683
if elem_text.split("\n")
670684
.zip(opposite_elem_text.split("\n"))
671685
.any(|(a, b)| a.trim() != b.trim()) {
672686
let (s1, s2) = concise_compared_strs(elem_text, opposite_elem_text);
673-
println!(" {} Text differs:\n expected: `{}`\n found: `{}`",
674-
elem.path, s1, s2);
687+
print_message(&format!(" {} Text differs:\n expected: `{}`\n \
688+
found: `{}`",
689+
elem.path, s1, s2),
690+
intro_msg, span, text);
675691
}
676692
}
677693
html_diff::Difference::NotPresent { ref elem, ref opposite_elem } => {
678694
if let Some(ref elem) = *elem {
679-
println!(" {} One element is missing: expected: `{}`",
680-
elem.path, elem.element_name);
695+
print_message(&format!(" {} One element is missing: expected: `{}`",
696+
elem.path, elem.element_name),
697+
intro_msg, span, text);
681698
} else if let Some(ref elem) = *opposite_elem {
682699
if elem.element_name.is_empty() {
683-
println!(" {} Unexpected element: `{}`",
684-
elem.path, concise_str(&elem.element_content));
700+
print_message(&format!(" {} One element is missing: expected: `{}`",
701+
elem.path, concise_str(&elem.element_content)),
702+
intro_msg, span, text);
685703
} else {
686-
println!(" {} Unexpected element `{}`: found: `{}`",
687-
elem.path, elem.element_name, concise_str(&elem.element_content));
704+
print_message(&format!(" {} Unexpected element `{}`: found: `{}`",
705+
elem.path, elem.element_name,
706+
concise_str(&elem.element_content)),
707+
intro_msg, span, text);
688708
}
689709
}
690710
}

0 commit comments

Comments
 (0)