Skip to content

Commit

Permalink
Rollup merge of #104795 - estebank:multiline-spans, r=TaKO8Ki
Browse files Browse the repository at this point in the history
Change multiline span ASCII art visual order

Tweak the ASCII art for nested multiline spans so that we minimize line overlaps.

Partially addresses #61017.
  • Loading branch information
Dylan-DPC authored Nov 28, 2022
2 parents f90484d + 136ffa2 commit 79fe15c
Show file tree
Hide file tree
Showing 12 changed files with 108 additions and 106 deletions.
10 changes: 8 additions & 2 deletions compiler/rustc_errors/src/emitter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2282,7 +2282,7 @@ impl FileWithAnnotatedLines {
}

// Find overlapping multiline annotations, put them at different depths
multiline_annotations.sort_by_key(|&(_, ref ml)| (ml.line_start, ml.line_end));
multiline_annotations.sort_by_key(|&(_, ref ml)| (ml.line_start, usize::MAX - ml.line_end));
for (_, ann) in multiline_annotations.clone() {
for (_, a) in multiline_annotations.iter_mut() {
// Move all other multiline annotations overlapping with this one
Expand All @@ -2300,8 +2300,14 @@ impl FileWithAnnotatedLines {
}

let mut max_depth = 0; // max overlapping multiline spans
for (file, ann) in multiline_annotations {
for (_, ann) in &multiline_annotations {
max_depth = max(max_depth, ann.depth);
}
// Change order of multispan depth to minimize the number of overlaps in the ASCII art.
for (_, a) in multiline_annotations.iter_mut() {
a.depth = max_depth - a.depth + 1;
}
for (file, ann) in multiline_annotations {
let mut end_ann = ann.as_end();
if !ann.overlaps_exactly {
// avoid output like
Expand Down
108 changes: 54 additions & 54 deletions compiler/rustc_expand/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -272,13 +272,13 @@ error: foo
--> test.rs:3:3
|
3 | X0 Y0
| ____^__-
| | ___|
| ___^__-
| |___|
| ||
4 | || X1 Y1
5 | || X2 Y2
| ||____^__- `Y` is a good letter too
| |____|
| |_____|
| `X` is a good letter
"#,
Expand Down Expand Up @@ -311,12 +311,12 @@ error: foo
--> test.rs:3:3
|
3 | X0 Y0
| ____^__-
| | ___|
| ___^__-
| |___|
| ||
4 | || Y1 X1
| ||____-__^ `X` is a good letter
| |_____|
| |____|
| `Y` is a good letter too
"#,
Expand Down Expand Up @@ -351,13 +351,13 @@ error: foo
--> test.rs:3:6
|
3 | X0 Y0 Z0
| ______^
4 | | X1 Y1 Z1
| |_________-
| _______^
4 | | X1 Y1 Z1
| | _________-
5 | || X2 Y2 Z2
| ||____^ `X` is a good letter
6 | | X3 Y3 Z3
| |_____- `Y` is a good letter too
6 | | X3 Y3 Z3
| |____- `Y` is a good letter too
"#,
);
Expand Down Expand Up @@ -395,15 +395,15 @@ error: foo
--> test.rs:3:3
|
3 | X0 Y0 Z0
| _____^__-__-
| | ____|__|
| || ___|
| ___^__-__-
| |___|__|
| ||___|
| |||
4 | ||| X1 Y1 Z1
5 | ||| X2 Y2 Z2
| |||____^__-__- `Z` label
| ||____|__|
| |____| `Y` is a good letter too
| ||_____|__|
| |______| `Y` is a good letter too
| `X` is a good letter
"#,
Expand Down Expand Up @@ -487,17 +487,17 @@ error: foo
--> test.rs:3:6
|
3 | X0 Y0 Z0
| ______^
4 | | X1 Y1 Z1
| |____^_-
| _______^
4 | | X1 Y1 Z1
| | ____^_-
| ||____|
| | `X` is a good letter
5 | | X2 Y2 Z2
| |____-______- `Y` is a good letter too
| ____|
| |
6 | | X3 Y3 Z3
| |________- `Z`
| | `X` is a good letter
5 | | X2 Y2 Z2
| |___-______- `Y` is a good letter too
| ___|
| |
6 | | X3 Y3 Z3
| |_______- `Z`
"#,
);
Expand Down Expand Up @@ -570,14 +570,14 @@ error: foo
--> test.rs:3:6
|
3 | X0 Y0 Z0
| ______^
4 | | X1 Y1 Z1
| |____^____-
| _______^
4 | | X1 Y1 Z1
| | ____^____-
| ||____|
| | `X` is a good letter
5 | | X2 Y2 Z2
6 | | X3 Y3 Z3
| |___________- `Y` is a good letter too
| | `X` is a good letter
5 | | X2 Y2 Z2
6 | | X3 Y3 Z3
| |__________- `Y` is a good letter too
"#,
);
Expand Down Expand Up @@ -941,18 +941,18 @@ error: foo
--> test.rs:3:6
|
3 | X0 Y0 Z0
| ______^
4 | | X1 Y1 Z1
| |____^____-
| _______^
4 | | X1 Y1 Z1
| | ____^____-
| ||____|
| | `X` is a good letter
5 | | 1
6 | | 2
7 | | 3
... |
15 | | X2 Y2 Z2
16 | | X3 Y3 Z3
| |___________- `Y` is a good letter too
| | `X` is a good letter
5 | | 1
6 | | 2
7 | | 3
... |
15 | | X2 Y2 Z2
16 | | X3 Y3 Z3
| |__________- `Y` is a good letter too
"#,
);
Expand Down Expand Up @@ -996,21 +996,21 @@ error: foo
--> test.rs:3:6
|
3 | X0 Y0 Z0
| ______^
4 | | 1
5 | | 2
6 | | 3
7 | | X1 Y1 Z1
| |_________-
| _______^
4 | | 1
5 | | 2
6 | | 3
7 | | X1 Y1 Z1
| | _________-
8 | || 4
9 | || 5
10 | || 6
11 | || X2 Y2 Z2
| ||__________- `Z` is a good letter too
... |
15 | | 10
16 | | X3 Y3 Z3
| |_______^ `Y` is a good letter
... |
15 | | 10
16 | | X3 Y3 Z3
| |________^ `Y` is a good letter
"#,
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ error[E0308]: mismatched types
LL | #[alloc_error_handler]
| ---------------------- in this procedural macro expansion
LL | fn oom(
| _^
| |_|
| __^
| | _|
| ||
LL | || info: &Layout,
LL | || ) -> ()
Expand All @@ -30,8 +30,8 @@ error[E0308]: mismatched types
LL | #[alloc_error_handler]
| ---------------------- in this procedural macro expansion
LL | fn oom(
| _^
| |_|
| __^
| | _|
| ||
LL | || info: &Layout,
LL | || ) -> ()
Expand Down
16 changes: 6 additions & 10 deletions src/test/ui/alloc-error/alloc-error-handler-bad-signature-2.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,12 @@ error[E0308]: mismatched types
LL | #[alloc_error_handler]
| ---------------------- in this procedural macro expansion
LL | fn oom(
| _^
| |_|
| __^
| | _|
| ||
LL | || info: Layout,
LL | || ) {
| || -
| ||_|
| | arguments to this function are incorrect
| ||_- arguments to this function are incorrect
LL | | loop {}
LL | | }
| |__^ expected struct `Layout`, found struct `core::alloc::Layout`
Expand Down Expand Up @@ -42,14 +40,12 @@ error[E0308]: mismatched types
LL | #[alloc_error_handler]
| ---------------------- in this procedural macro expansion
LL | fn oom(
| _^
| |_|
| __^
| | _|
| ||
LL | || info: Layout,
LL | || ) {
| || ^
| ||_|
| | expected `!`, found `()`
| ||_^ expected `!`, found `()`
LL | | loop {}
LL | | }
| |__- expected `!` because of return type
Expand Down
12 changes: 6 additions & 6 deletions src/test/ui/inference/deref-suggestion.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -157,19 +157,19 @@ error[E0308]: `if` and `else` have incompatible types
--> $DIR/deref-suggestion.rs:69:12
|
LL | let val = if true {
| _______________-
LL | | *a
| | -- expected because of this
LL | | } else if true {
| |____________^
| ________________-
LL | | *a
| | -- expected because of this
LL | | } else if true {
| | ____________^
LL | ||
LL | || b
LL | || } else {
LL | || &0
LL | || };
| || ^
| ||_____|
| |______`if` and `else` have incompatible types
| |_____`if` and `else` have incompatible types
| expected `i32`, found `&{integer}`

error: aborting due to 13 previous errors
Expand Down
6 changes: 3 additions & 3 deletions src/test/ui/issues/issue-13497-2.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ error[E0515]: cannot return value referencing local variable `rawLines`
--> $DIR/issue-13497-2.rs:3:5
|
LL | rawLines
| _____^
| |_____|
| ______^
| | _____|
| ||
LL | || .iter().map(|l| l.trim()).collect()
| ||_______________-___________________________^ returns a value referencing data owned by the current function
| |________________|
| |_______________|
| `rawLines` is borrowed here

error: aborting due to previous error
Expand Down
6 changes: 3 additions & 3 deletions src/test/ui/lint/suggestions.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,12 @@ warning: variable does not need to be mutable
--> $DIR/suggestions.rs:54:13
|
LL | let mut
| _____________^
| |_____________|
| ______________^
| | _____________|
| ||
LL | || b = 1;
| ||____________-^
| |____________|
| |_____________|
| help: remove this `mut`

error: const items should never be `#[no_mangle]`
Expand Down
12 changes: 6 additions & 6 deletions src/test/ui/return/issue-86188-return-not-in-fn-body.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -35,17 +35,17 @@ LL | | }
error[E0572]: return statement outside of function body
--> $DIR/issue-86188-return-not-in-fn-body.rs:36:10
|
LL | / fn main() {
LL | |
LL | | [(); return || {
| |__________^
LL | / fn main() {
LL | |
LL | | [(); return || {
| | __________^
LL | ||
LL | ||
LL | || let tx;
LL | || }];
| ||_____^ the return is part of this body...
LL | | }
| |_- ...not the enclosing function body
LL | | }
| |__- ...not the enclosing function body

error: aborting due to 4 previous errors

Expand Down
6 changes: 3 additions & 3 deletions src/test/ui/suggestions/issue-99240-2.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ LL | Unit,
| ---- enum variant `Alias::Unit` defined here
...
LL | Alias::
| _____^
| |_____|
| ______^
| | _____|
| ||
LL | || Unit();
| ||________^_- call expression requires function
| |_________|
| |________|
|
|
help: `Alias::Unit` is a unit enum variant, and does not take parentheses to be constructed
Expand Down
4 changes: 2 additions & 2 deletions src/test/ui/suggestions/suggest-remove-refs-3.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ error[E0277]: `&&&&&Enumerate<std::slice::Iter<'_, {integer}>>` is not an iterat
--> $DIR/suggest-remove-refs-3.rs:6:19
|
LL | for (i, _) in & & &
| ___________________^
| |___________________|
| ____________________^
| | ___________________|
| ||
LL | || & &v
| ||___________- help: consider removing 5 leading `&`-references
Expand Down
Loading

0 comments on commit 79fe15c

Please sign in to comment.