Refactor EmitterWriter::emit_suggestion_default
This commit is contained in:
parent
a7836bf885
commit
df3e7a28f7
@ -214,7 +214,7 @@ fn supports_color(&self) -> bool {
|
||||
|
||||
/// Formats the substitutions of the primary_span
|
||||
///
|
||||
/// The are a lot of conditions to this method, but in short:
|
||||
/// There are a lot of conditions to this method, but in short:
|
||||
///
|
||||
/// * If the current `Diagnostic` has only one visible `CodeSuggestion`,
|
||||
/// we format the `help` suggestion depending on the content of the
|
||||
@ -736,7 +736,9 @@ fn render_source_line(
|
||||
|
||||
let line_offset = buffer.num_lines();
|
||||
|
||||
let left = margin.left(source_string.len()); // Left trim
|
||||
// Left trim
|
||||
let left = margin.left(source_string.len());
|
||||
|
||||
// Account for unicode characters of width !=0 that were removed.
|
||||
let left = source_string
|
||||
.chars()
|
||||
@ -1623,18 +1625,27 @@ fn emit_suggestion_default(
|
||||
suggestions.iter().take(MAX_SUGGESTIONS)
|
||||
{
|
||||
notice_capitalization |= only_capitalization;
|
||||
// Only show underline if the suggestion spans a single line and doesn't cover the
|
||||
// entirety of the code output. If you have multiple replacements in the same line
|
||||
// of code, show the underline.
|
||||
let show_underline = !(parts.len() == 1 && parts[0].snippet.trim() == complete.trim())
|
||||
&& complete.lines().count() == 1;
|
||||
|
||||
let has_deletion = parts.iter().any(|p| p.is_deletion());
|
||||
let is_multiline = complete.lines().count() > 1;
|
||||
|
||||
let show_diff = has_deletion && !is_multiline;
|
||||
enum DisplaySuggestion {
|
||||
Underline,
|
||||
Diff,
|
||||
None,
|
||||
}
|
||||
|
||||
if show_diff {
|
||||
let show_code_change = if has_deletion && !is_multiline {
|
||||
DisplaySuggestion::Diff
|
||||
} else if (parts.len() != 1 || parts[0].snippet.trim() != complete.trim())
|
||||
&& !is_multiline
|
||||
{
|
||||
DisplaySuggestion::Underline
|
||||
} else {
|
||||
DisplaySuggestion::None
|
||||
};
|
||||
|
||||
if let DisplaySuggestion::Diff = show_code_change {
|
||||
row_num += 1;
|
||||
}
|
||||
|
||||
@ -1657,7 +1668,7 @@ fn emit_suggestion_default(
|
||||
&self.maybe_anonymized(line_start + line_pos),
|
||||
Style::LineNumber,
|
||||
);
|
||||
if show_diff {
|
||||
if let DisplaySuggestion::Diff = show_code_change {
|
||||
// Add the line number for both addition and removal to drive the point home.
|
||||
//
|
||||
// N - fn foo<A: T>(bar: A) {
|
||||
@ -1727,7 +1738,7 @@ fn emit_suggestion_default(
|
||||
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 show_underline {
|
||||
if let DisplaySuggestion::Diff | DisplaySuggestion::Underline = show_code_change {
|
||||
draw_col_separator(&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;
|
||||
@ -1755,7 +1766,7 @@ fn emit_suggestion_default(
|
||||
assert!(underline_start >= 0 && underline_end >= 0);
|
||||
let padding: usize = max_line_num_len + 3;
|
||||
for p in underline_start..underline_end {
|
||||
if !show_diff {
|
||||
if let DisplaySuggestion::Underline = show_code_change {
|
||||
// If this is a replacement, underline with `^`, if this is an addition
|
||||
// underline with `+`.
|
||||
buffer.putc(
|
||||
@ -1766,7 +1777,7 @@ fn emit_suggestion_default(
|
||||
);
|
||||
}
|
||||
}
|
||||
if show_diff {
|
||||
if let DisplaySuggestion::Diff = show_code_change {
|
||||
// Colorize removal with red in diff format.
|
||||
buffer.set_style_range(
|
||||
row_num - 2,
|
||||
@ -1797,7 +1808,7 @@ fn emit_suggestion_default(
|
||||
// if we elided some lines, add an ellipsis
|
||||
if lines.next().is_some() {
|
||||
buffer.puts(row_num, max_line_num_len - 1, "...", Style::LineNumber);
|
||||
} else if !show_underline {
|
||||
} else if let DisplaySuggestion::None = show_code_change {
|
||||
draw_col_separator_no_space(&mut buffer, row_num, max_line_num_len + 1);
|
||||
row_num += 1;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user