diff --git a/compiler/rustc_errors/src/emitter.rs b/compiler/rustc_errors/src/emitter.rs
index 4f033e3fefa0f..fceccb7e9b6e5 100644
--- a/compiler/rustc_errors/src/emitter.rs
+++ b/compiler/rustc_errors/src/emitter.rs
@@ -1638,6 +1638,27 @@ impl HumanEmitter {
*style,
);
}
+ if let Some(line) = annotated_file.lines.get(line_idx) {
+ for ann in &line.annotations {
+ if let AnnotationType::MultilineStart(pos) = ann.annotation_type
+ {
+ // In the case where we have elided the entire start of the
+ // multispan because those lines were empty, we still need
+ // to draw the `|`s across the `...`.
+ draw_multiline_line(
+ &mut buffer,
+ last_buffer_line_num,
+ width_offset,
+ pos,
+ if ann.is_primary {
+ Style::UnderlinePrimary
+ } else {
+ Style::UnderlineSecondary
+ },
+ );
+ }
+ }
+ }
} else if line_idx_delta == 2 {
let unannotated_line = annotated_file
.file
@@ -1665,6 +1686,24 @@ impl HumanEmitter {
*style,
);
}
+ if let Some(line) = annotated_file.lines.get(line_idx) {
+ for ann in &line.annotations {
+ if let AnnotationType::MultilineStart(pos) = ann.annotation_type
+ {
+ draw_multiline_line(
+ &mut buffer,
+ last_buffer_line_num,
+ width_offset,
+ pos,
+ if ann.is_primary {
+ Style::UnderlinePrimary
+ } else {
+ Style::UnderlineSecondary
+ },
+ );
+ }
+ }
+ }
}
}
@@ -2417,7 +2456,15 @@ impl FileWithAnnotatedLines {
// the beginning doesn't have an underline, but the current logic seems to be
// working correctly.
let middle = min(ann.line_start + 4, ann.line_end);
- for line in ann.line_start + 1..middle {
+ // We'll show up to 4 lines past the beginning of the multispan start.
+ // We will *not* include the tail of lines that are only whitespace.
+ let until = (ann.line_start..middle)
+ .rev()
+ .filter_map(|line| file.get_line(line - 1).map(|s| (line + 1, s)))
+ .find(|(_, s)| !s.trim().is_empty())
+ .map(|(line, _)| line)
+ .unwrap_or(ann.line_start);
+ for line in ann.line_start + 1..until {
// Every `|` that joins the beginning of the span (`___^`) to the end (`|__^`).
add_annotation_to_file(&mut output, file.clone(), line, ann.as_line());
}
diff --git a/compiler/rustc_expand/src/tests.rs b/compiler/rustc_expand/src/tests.rs
index a3510dc9bff4d..2b0b58eb1d924 100644
--- a/compiler/rustc_expand/src/tests.rs
+++ b/compiler/rustc_expand/src/tests.rs
@@ -276,8 +276,7 @@ error: foo
|
2 | fn foo() {
| __________^
-3 | |
-4 | |
+... |
5 | | }
| |___^ test
diff --git a/src/tools/clippy/tests/ui/async_yields_async.stderr b/src/tools/clippy/tests/ui/async_yields_async.stderr
index f1fae6549de4c..991ad7ae0ae2f 100644
--- a/src/tools/clippy/tests/ui/async_yields_async.stderr
+++ b/src/tools/clippy/tests/ui/async_yields_async.stderr
@@ -81,8 +81,7 @@ LL | let _m = async || {
| _______________________-
LL | | println!("I'm bored");
LL | | // Some more stuff
-LL | |
-LL | | // Finally something to await
+... |
LL | | CustomFutureType
| | ^^^^^^^^^^^^^^^^
| | |
diff --git a/src/tools/clippy/tests/ui/empty_line_after_outer_attribute.stderr b/src/tools/clippy/tests/ui/empty_line_after_outer_attribute.stderr
index 1b5b00a4a83bb..b43e6e30da220 100644
--- a/src/tools/clippy/tests/ui/empty_line_after_outer_attribute.stderr
+++ b/src/tools/clippy/tests/ui/empty_line_after_outer_attribute.stderr
@@ -22,8 +22,7 @@ error: found an empty line after an outer attribute. Perhaps you forgot to add a
--> tests/ui/empty_line_after_outer_attribute.rs:28:1
|
LL | / #[crate_type = "lib"]
-LL | |
-LL | |
+... |
LL | | fn with_two_newlines() { assert!(true) }
| |_
diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs
index 67db33abf65ff..63e52df8c040e 100644
--- a/src/tools/compiletest/src/runtest.rs
+++ b/src/tools/compiletest/src/runtest.rs
@@ -4040,7 +4040,7 @@ impl<'test> TestCx<'test> {
};
let stderr = if force_color_svg {
- anstyle_svg::Term::new().render_svg(&proc_res.stderr)
+ anstyle_svg::Term::new().min_width_px(730).render_svg(&proc_res.stderr)
} else if explicit_format {
proc_res.stderr.clone()
} else {
diff --git a/tests/rustdoc-ui/lints/check.stderr b/tests/rustdoc-ui/lints/check.stderr
index c5ed5d0c3efbe..acdb8128443fd 100644
--- a/tests/rustdoc-ui/lints/check.stderr
+++ b/tests/rustdoc-ui/lints/check.stderr
@@ -4,7 +4,6 @@ warning: missing documentation for the crate
LL | / #![feature(rustdoc_missing_doc_code_examples)]
LL | |
LL | |
-LL | |
... |
LL | |
LL | | pub fn foo() {}
@@ -39,7 +38,6 @@ warning: missing code example in this documentation
LL | / #![feature(rustdoc_missing_doc_code_examples)]
LL | |
LL | |
-LL | |
... |
LL | |
LL | | pub fn foo() {}
diff --git a/tests/ui/borrowck/issue-109271-pass-self-into-closure.stderr b/tests/ui/borrowck/issue-109271-pass-self-into-closure.stderr
index 4e3bf1d70429d..a66281a188d72 100644
--- a/tests/ui/borrowck/issue-109271-pass-self-into-closure.stderr
+++ b/tests/ui/borrowck/issue-109271-pass-self-into-closure.stderr
@@ -42,8 +42,7 @@ LL | v.call(|(), this: &mut S| {
| |
LL | |
LL | |
-LL | |
-LL | | _ = v;
+... |
LL | | v.set();
| | - first borrow occurs due to use of `v` in closure
... |
diff --git a/tests/ui/codemap_tests/huge_multispan_highlight.rs b/tests/ui/codemap_tests/huge_multispan_highlight.rs
index 623c59081d0fe..c2bd393589e01 100644
--- a/tests/ui/codemap_tests/huge_multispan_highlight.rs
+++ b/tests/ui/codemap_tests/huge_multispan_highlight.rs
@@ -1,5 +1,11 @@
+//@ compile-flags: --error-format=human --color=always
+//@ ignore-windows
+// Temporary until next release:
+//@ ignore-stage2
fn main() {
- let x = "foo";
+ let _ = match true {
+ true => (
+ // last line shown in multispan header
@@ -87,5 +93,148 @@ fn main() {
- let y = &mut x; //~ ERROR cannot borrow
+
+ ),
+ false => "
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ",
+ };
+ let _ = match true {
+ true => (
+
+ 1 // last line shown in multispan header
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ),
+ false => "
+
+
+ 1 last line shown in multispan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ",
+ };
}
diff --git a/tests/ui/codemap_tests/huge_multispan_highlight.stderr b/tests/ui/codemap_tests/huge_multispan_highlight.stderr
deleted file mode 100644
index d2923875c94cf..0000000000000
--- a/tests/ui/codemap_tests/huge_multispan_highlight.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
- --> $DIR/huge_multispan_highlight.rs:90:13
- |
-LL | let y = &mut x;
- | ^^^^^^ cannot borrow as mutable
- |
-help: consider changing this to be mutable
- |
-LL | let mut x = "foo";
- | +++
-
-error: aborting due to 1 previous error
-
-For more information about this error, try `rustc --explain E0596`.
diff --git a/tests/ui/codemap_tests/huge_multispan_highlight.svg b/tests/ui/codemap_tests/huge_multispan_highlight.svg
new file mode 100644
index 0000000000000..f26a2bd7275b6
--- /dev/null
+++ b/tests/ui/codemap_tests/huge_multispan_highlight.svg
@@ -0,0 +1,116 @@
+
diff --git a/tests/ui/diagnostic-flags/colored-session-opt-error.svg b/tests/ui/diagnostic-flags/colored-session-opt-error.svg
index e8835534e04c3..69f452f29f31f 100644
--- a/tests/ui/diagnostic-flags/colored-session-opt-error.svg
+++ b/tests/ui/diagnostic-flags/colored-session-opt-error.svg
@@ -1,4 +1,4 @@
-