Tweak output for 'add line' suggestion
This commit is contained in:
parent
4087deaccd
commit
5b40aa5eb4
166 changed files with 634 additions and 294 deletions
|
@ -1832,6 +1832,12 @@ impl EmitterWriter {
|
|||
}
|
||||
let show_code_change = if has_deletion && !is_multiline {
|
||||
DisplaySuggestion::Diff
|
||||
} else if let [part] = &parts[..]
|
||||
&& part.snippet.ends_with('\n')
|
||||
&& part.snippet.trim() == complete.trim()
|
||||
{
|
||||
// We are adding a line(s) of code before code that was already there.
|
||||
DisplaySuggestion::Add
|
||||
} else if (parts.len() != 1 || parts[0].snippet.trim() != complete.trim())
|
||||
&& !is_multiline
|
||||
{
|
||||
|
@ -1879,7 +1885,9 @@ impl EmitterWriter {
|
|||
row_num += line_end - line_start;
|
||||
}
|
||||
let mut unhighlighted_lines = Vec::new();
|
||||
let mut last_pos = 0;
|
||||
for (line_pos, (line, highlight_parts)) in lines.by_ref().zip(highlights).enumerate() {
|
||||
last_pos = line_pos;
|
||||
debug!(%line_pos, %line, ?highlight_parts);
|
||||
|
||||
// Remember lines that are not highlighted to hide them if needed
|
||||
|
@ -1963,13 +1971,39 @@ impl EmitterWriter {
|
|||
is_multiline,
|
||||
)
|
||||
}
|
||||
if let DisplaySuggestion::Add = show_code_change {
|
||||
// The suggestion adds an entire line of code, ending on a newline, so we'll also
|
||||
// print the *following* line, to provide context of what we're advicing people to
|
||||
// do. Otherwise you would only see contextless code that can be confused for
|
||||
// already existing code, despite the colors and UI elements.
|
||||
let file_lines = sm
|
||||
.span_to_lines(span.primary_span().unwrap().shrink_to_hi())
|
||||
.expect("span_to_lines failed when emitting suggestion");
|
||||
let line_num = sm.lookup_char_pos(parts[0].span.lo()).line;
|
||||
if let Some(line) = file_lines.file.get_line(line_num - 1) {
|
||||
let line = normalize_whitespace(&line);
|
||||
self.draw_code_line(
|
||||
&mut buffer,
|
||||
&mut row_num,
|
||||
&[],
|
||||
line_num + last_pos + 1,
|
||||
&line,
|
||||
DisplaySuggestion::None,
|
||||
max_line_num_len,
|
||||
&file_lines,
|
||||
is_multiline,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// This offset and the ones below need to be signed to account for replacement code
|
||||
// that is shorter than the original code.
|
||||
let mut offsets: Vec<(usize, isize)> = Vec::new();
|
||||
// Only show an underline in the suggestions if the suggestion is not the
|
||||
// entirety of the code being shown and the displayed code is not multiline.
|
||||
if let DisplaySuggestion::Diff | DisplaySuggestion::Underline = show_code_change {
|
||||
if let DisplaySuggestion::Diff | DisplaySuggestion::Underline | DisplaySuggestion::Add =
|
||||
show_code_change
|
||||
{
|
||||
draw_col_separator_no_space(&mut buffer, row_num, max_line_num_len + 1);
|
||||
for part in parts {
|
||||
let span_start_pos = sm.lookup_char_pos(part.span.lo()).col_display;
|
||||
|
@ -2247,6 +2281,10 @@ impl EmitterWriter {
|
|||
}
|
||||
}
|
||||
buffer.append(*row_num, &normalize_whitespace(line_to_add), Style::NoStyle);
|
||||
} else if let DisplaySuggestion::Add = show_code_change {
|
||||
buffer.puts(*row_num, 0, &self.maybe_anonymized(line_num), Style::LineNumber);
|
||||
buffer.puts(*row_num, max_line_num_len + 1, "+ ", Style::Addition);
|
||||
buffer.append(*row_num, &normalize_whitespace(line_to_add), Style::NoStyle);
|
||||
} else {
|
||||
buffer.puts(*row_num, 0, &self.maybe_anonymized(line_num), Style::LineNumber);
|
||||
draw_col_separator(buffer, *row_num, max_line_num_len + 1);
|
||||
|
@ -2281,6 +2319,7 @@ enum DisplaySuggestion {
|
|||
Underline,
|
||||
Diff,
|
||||
None,
|
||||
Add,
|
||||
}
|
||||
|
||||
impl FileWithAnnotatedLines {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue