diff options
| author | bors <bors@rust-lang.org> | 2022-06-01 22:34:38 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-06-01 22:34:38 +0000 |
| commit | e838059d66296a3874e85685637aac10c888b240 (patch) | |
| tree | 53e66d0a172ea9f439f1759218f965759ebdc537 /compiler/rustc_errors/src | |
| parent | 12cd71f4d3ea6df9c2093781d55134cd9651d754 (diff) | |
| parent | b78c118b09dbc34d142532973800e3ee896a2771 (diff) | |
| download | rust-e838059d66296a3874e85685637aac10c888b240.tar.gz rust-e838059d66296a3874e85685637aac10c888b240.zip | |
Auto merge of #97632 - JohnTitor:rollup-d2ucrjw, r=JohnTitor
Rollup of 6 pull requests Successful merges: - #95594 (Additional `*mut [T]` methods) - #97130 (rustdoc: avoid including impl blocks with filled-in generics) - #97166 (Move conditions out of recover/report functions.) - #97605 (Mention filename in suggestion when it differs from primary span) - #97613 (rustdoc: Improve calculation of "Impls on Foreign Types") - #97626 (rename PointerAddress → PointerExposeAddress) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_errors/src')
| -rw-r--r-- | compiler/rustc_errors/src/emitter.rs | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/compiler/rustc_errors/src/emitter.rs b/compiler/rustc_errors/src/emitter.rs index 3fdc8cf8ac2..e9e7065ec03 100644 --- a/compiler/rustc_errors/src/emitter.rs +++ b/compiler/rustc_errors/src/emitter.rs @@ -1715,6 +1715,7 @@ impl EmitterWriter { fn emit_suggestion_default( &mut self, + span: &MultiSpan, suggestion: &CodeSuggestion, args: &FluentArgs<'_>, level: &Level, @@ -1766,6 +1767,30 @@ impl EmitterWriter { None, } + if let Some(span) = span.primary_span() { + // Compare the primary span of the diagnostic with the span of the suggestion + // being emitted. If they belong to the same file, we don't *need* to show the + // file name, saving in verbosity, but if it *isn't* we do need it, otherwise we're + // telling users to make a change but not clarifying *where*. + let loc = sm.lookup_char_pos(parts[0].span.lo()); + if loc.file.name != sm.span_to_filename(span) && loc.file.name.is_real() { + buffer.puts(row_num - 1, 0, "--> ", Style::LineNumber); + buffer.append( + row_num - 1, + &format!( + "{}:{}:{}", + sm.filename_for_diagnostics(&loc.file.name), + sm.doctest_offset_line(&loc.file.name, loc.line), + loc.col.0 + 1, + ), + Style::LineAndColumn, + ); + for _ in 0..max_line_num_len { + buffer.prepend(row_num - 1, " ", Style::NoStyle); + } + row_num += 1; + } + } let show_code_change = if has_deletion && !is_multiline { DisplaySuggestion::Diff } else if (parts.len() != 1 || parts[0].snippet.trim() != complete.trim()) @@ -1787,7 +1812,7 @@ impl EmitterWriter { assert!(!file_lines.lines.is_empty() || parts[0].span.is_dummy()); let line_start = sm.lookup_char_pos(parts[0].span.lo()).line; - draw_col_separator_no_space(&mut buffer, 1, max_line_num_len + 1); + draw_col_separator_no_space(&mut buffer, row_num - 1, max_line_num_len + 1); let mut lines = complete.lines(); if lines.clone().next().is_none() { // Account for a suggestion to completely remove a line(s) with whitespace (#94192). @@ -2046,9 +2071,13 @@ impl EmitterWriter { ) { panic!("failed to emit error: {}", e); } - } else if let Err(e) = - self.emit_suggestion_default(sugg, args, &Level::Help, max_line_num_len) - { + } else if let Err(e) = self.emit_suggestion_default( + span, + sugg, + args, + &Level::Help, + max_line_num_len, + ) { panic!("failed to emit error: {}", e); }; } |
