Skip to content

Commit

Permalink
Rollup merge of #108627 - estebank:suggestion-hightlight, r=WaffleLapkin
Browse files Browse the repository at this point in the history
Properly colorize multi-part suggestions in the same line

Fix #108547.
  • Loading branch information
matthiaskrgr authored Mar 2, 2023
2 parents 913ec6b + 3cea838 commit 6adace7
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 6 deletions.
10 changes: 5 additions & 5 deletions compiler/rustc_errors/src/emitter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1895,7 +1895,7 @@ impl EmitterWriter {
self.draw_code_line(
&mut buffer,
&mut row_num,
&Vec::new(),
&[],
p + line_start,
l,
show_code_change,
Expand All @@ -1919,7 +1919,7 @@ impl EmitterWriter {
self.draw_code_line(
&mut buffer,
&mut row_num,
&Vec::new(),
&[],
p + line_start,
l,
show_code_change,
Expand All @@ -1936,7 +1936,7 @@ impl EmitterWriter {
self.draw_code_line(
&mut buffer,
&mut row_num,
&Vec::new(),
&[],
p + line_start,
l,
show_code_change,
Expand All @@ -1951,7 +1951,7 @@ impl EmitterWriter {
self.draw_code_line(
&mut buffer,
&mut row_num,
highlight_parts,
&highlight_parts,
line_pos + line_start,
line,
show_code_change,
Expand Down Expand Up @@ -2176,7 +2176,7 @@ impl EmitterWriter {
&self,
buffer: &mut StyledBuffer,
row_num: &mut usize,
highlight_parts: &Vec<SubstitutionHighlight>,
highlight_parts: &[SubstitutionHighlight],
line_num: usize,
line_to_add: &str,
show_code_change: DisplaySuggestion,
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_errors/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ impl CodeSuggestion {
});
buf.push_str(&part.snippet);
let cur_hi = sm.lookup_char_pos(part.span.hi());
if prev_hi.line == cur_lo.line && cur_hi.line == cur_lo.line {
if cur_hi.line == cur_lo.line {
// Account for the difference between the width of the current code and the
// snippet being suggested, so that the *later* suggestions are correctly
// aligned on the screen.
Expand Down
18 changes: 18 additions & 0 deletions tests/ui/suggestions/multiline-multipart-suggestion.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// compile-flags: --error-format=human --color=always

fn short(foo_bar: &Vec<&i32>) -> &i32 { //~ ERROR missing lifetime specifier
&12
}

fn long( //~ ERROR missing lifetime specifier
foo_bar: &Vec<&i32>,
something_very_long_so_that_the_line_will_wrap_around__________: i32,
) -> &i32 {
&12
}

fn long2( //~ ERROR missing lifetime specifier
foo_bar: &Vec<&i32>) -> &i32 {
&12
}
fn main() {}
46 changes: 46 additions & 0 deletions tests/ui/suggestions/multiline-multipart-suggestion.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
error[E0106]: missing lifetime specifier
 --> $DIR/multiline-multipart-suggestion.rs:3:34
 |
LL | fn short(foo_bar: &Vec<&i32>) -> &i32 {
 |  ---------- ^ expected named lifetime parameter
 |
 = help: this function's return type contains a borrowed value, but the signature does not say which one of `foo_bar`'s 2 lifetimes it is borrowed from
help: consider introducing a named lifetime parameter
 |
LL | fn short<'a>(foo_bar: &'a Vec<&'a i32>) -> &'a i32 {
 | ++++ ++ ++ ++

error[E0106]: missing lifetime specifier
 --> $DIR/multiline-multipart-suggestion.rs:10:6
 |
LL |  foo_bar: &Vec<&i32>,
 |  ----------
LL |  something_very_long_so_that_the_line_will_wrap_around__________: i32,
LL | ) -> &i32 {
 |  ^ expected named lifetime parameter
 |
 = help: this function's return type contains a borrowed value, but the signature does not say which one of `foo_bar`'s 2 lifetimes it is borrowed from
help: consider introducing a named lifetime parameter
 |
LL ~ fn long<'a>(
LL ~  foo_bar: &'a Vec<&'a i32>,
LL |  something_very_long_so_that_the_line_will_wrap_around__________: i32,
LL ~ ) -> &'a i32 {
 |

error[E0106]: missing lifetime specifier
 --> $DIR/multiline-multipart-suggestion.rs:15:29
 |
LL |  foo_bar: &Vec<&i32>) -> &i32 {
 |  ---------- ^ expected named lifetime parameter
 |
 = help: this function's return type contains a borrowed value, but the signature does not say which one of `foo_bar`'s 2 lifetimes it is borrowed from
help: consider introducing a named lifetime parameter
 |
LL ~ fn long2<'a>(
LL ~  foo_bar: &'a Vec<&'a i32>) -> &'a i32 {
 |

error: aborting due to 3 previous errors

For more information about this error, try `rustc --explain E0106`.

0 comments on commit 6adace7

Please sign in to comment.