diff options
| author | bors <bors@rust-lang.org> | 2024-06-24 13:42:05 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-06-24 13:42:05 +0000 |
| commit | d371d17496f2ce3a56da76aa083f4ef157572c20 (patch) | |
| tree | 4e6530dc971d74b1ca867dbe24ee16ae082ac432 /compiler/rustc_errors/src | |
| parent | 06c072f158c91296a2f802f2a10c9fe2499f314d (diff) | |
| parent | a80ee9159b053f27fdf3e974aab44f2dc74b2868 (diff) | |
| download | rust-d371d17496f2ce3a56da76aa083f4ef157572c20.tar.gz rust-d371d17496f2ce3a56da76aa083f4ef157572c20.zip | |
Auto merge of #126900 - matthiaskrgr:rollup-24ah97b, r=matthiaskrgr
Rollup of 4 pull requests Successful merges: - #125241 (Add `rust_analyzer` as a predefined tool) - #126213 (Update docs for AtomicBool/U8/I8 with regard to alignment) - #126414 (Tier 2 std support must always be known) - #126882 (Special case when a code line only has multiline span starts) r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_errors/src')
| -rw-r--r-- | compiler/rustc_errors/src/emitter.rs | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/compiler/rustc_errors/src/emitter.rs b/compiler/rustc_errors/src/emitter.rs index 7405705dd33..45118bcc58a 100644 --- a/compiler/rustc_errors/src/emitter.rs +++ b/compiler/rustc_errors/src/emitter.rs @@ -902,7 +902,7 @@ impl HumanEmitter { // <EMPTY LINE> // let mut annotations_position = vec![]; - let mut line_len = 0; + let mut line_len: usize = 0; let mut p = 0; for (i, annotation) in annotations.iter().enumerate() { for (j, next) in annotations.iter().enumerate() { @@ -973,6 +973,31 @@ impl HumanEmitter { return vec![]; } + if annotations_position + .iter() + .all(|(_, ann)| matches!(ann.annotation_type, AnnotationType::MultilineStart(_))) + && let Some(max_pos) = annotations_position.iter().map(|(pos, _)| *pos).max() + { + // Special case the following, so that we minimize overlapping multiline spans. + // + // 3 │ X0 Y0 Z0 + // │ ┏━━━━━┛ │ │ < We are writing these lines + // │ ┃┌───────┘ │ < by reverting the "depth" of + // │ ┃│┌─────────┘ < their multilne spans. + // 4 │ ┃││ X1 Y1 Z1 + // 5 │ ┃││ X2 Y2 Z2 + // │ ┃│└────╿──│──┘ `Z` label + // │ ┃└─────│──┤ + // │ ┗━━━━━━┥ `Y` is a good letter too + // ╰╴ `X` is a good letter + for (pos, _) in &mut annotations_position { + *pos = max_pos - *pos; + } + // We know then that we don't need an additional line for the span label, saving us + // one line of vertical space. + line_len = line_len.saturating_sub(1); + } + // Write the column separator. // // After this we will have: |
