Make suggestion include the line number
When there're more than one suggestions in the same diagnostic, they are displayed in their own block, instead of inline. In order to reduce confusion, those blocks now display the line number.
This commit is contained in:
parent
cd72f2e269
commit
7c84914635
@ -1071,20 +1071,24 @@ impl EmitterWriter {
|
||||
buffer.append(0, &level.to_string(), Style::Level(level.clone()));
|
||||
buffer.append(0, ": ", Style::HeaderMsg);
|
||||
self.msg_to_buffer(&mut buffer,
|
||||
&[(suggestion.msg.to_owned(), Style::NoStyle)],
|
||||
max_line_num_len,
|
||||
"suggestion",
|
||||
Some(Style::HeaderMsg));
|
||||
&[(suggestion.msg.to_owned(), Style::NoStyle)],
|
||||
max_line_num_len,
|
||||
"suggestion",
|
||||
Some(Style::HeaderMsg));
|
||||
|
||||
let suggestions = suggestion.splice_lines(cm.borrow());
|
||||
let line_start = cm.lookup_char_pos(primary_span.lo).line - 1;
|
||||
let mut row_num = 1;
|
||||
for complete in suggestions.iter().take(MAX_SUGGESTIONS) {
|
||||
|
||||
// print the suggestion without any line numbers, but leave
|
||||
// space for them. This helps with lining up with previous
|
||||
// snippets from the actual error being reported.
|
||||
let mut lines = complete.lines();
|
||||
for line in lines.by_ref().take(MAX_HIGHLIGHT_LINES) {
|
||||
// print the span column to avoid confusion
|
||||
buffer.puts(row_num,
|
||||
0,
|
||||
&((line_start + row_num).to_string()),
|
||||
Style::LineNumber);
|
||||
// print the suggestion
|
||||
draw_col_separator(&mut buffer, row_num, max_line_num_len + 1);
|
||||
buffer.append(row_num, line, Style::NoStyle);
|
||||
row_num += 1;
|
||||
|
@ -7,7 +7,7 @@ error: `<` is interpreted as a start of generic arguments for `usize`, not a com
|
||||
| not interpreted as comparison
|
||||
|
|
||||
help: if you want to compare the casted value then write:
|
||||
| println!("{}", (a as usize) < b);
|
||||
16 | println!("{}", (a as usize) < b);
|
||||
|
||||
error: `<` is interpreted as a start of generic arguments for `usize`, not a comparison
|
||||
--> $DIR/issue-22644.rs:17:33
|
||||
@ -18,7 +18,7 @@ error: `<` is interpreted as a start of generic arguments for `usize`, not a com
|
||||
| not interpreted as comparison
|
||||
|
|
||||
help: if you want to compare the casted value then write:
|
||||
| println!("{}", (a as usize) < 4);
|
||||
17 | println!("{}", (a as usize) < 4);
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -5,7 +5,7 @@ error[E0425]: cannot find value `A` in module `namespaced_enums`
|
||||
| ^ not found in `namespaced_enums`
|
||||
|
|
||||
help: possible candidate is found in another module, you can import it into scope
|
||||
| use namespaced_enums::Foo::A;
|
||||
12 | use namespaced_enums::Foo::A;
|
||||
|
||||
error[E0425]: cannot find function `B` in module `namespaced_enums`
|
||||
--> $DIR/enums-are-namespaced-xc.rs:18:31
|
||||
@ -14,7 +14,7 @@ error[E0425]: cannot find function `B` in module `namespaced_enums`
|
||||
| ^ not found in `namespaced_enums`
|
||||
|
|
||||
help: possible candidate is found in another module, you can import it into scope
|
||||
| use namespaced_enums::Foo::B;
|
||||
12 | use namespaced_enums::Foo::B;
|
||||
|
||||
error[E0422]: cannot find struct, variant or union type `C` in module `namespaced_enums`
|
||||
--> $DIR/enums-are-namespaced-xc.rs:21:31
|
||||
@ -23,7 +23,7 @@ error[E0422]: cannot find struct, variant or union type `C` in module `namespace
|
||||
| ^ not found in `namespaced_enums`
|
||||
|
|
||||
help: possible candidate is found in another module, you can import it into scope
|
||||
| use namespaced_enums::Foo::C;
|
||||
12 | use namespaced_enums::Foo::C;
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
@ -5,9 +5,9 @@ error[E0574]: expected struct, variant or union type, found enum `Result`
|
||||
| ^^^^^^ not a struct, variant or union type
|
||||
|
|
||||
help: possible better candidates are found in other modules, you can import them into scope
|
||||
| use std::fmt::Result;
|
||||
| use std::io::Result;
|
||||
| use std::thread::Result;
|
||||
12 | use std::fmt::Result;
|
||||
13 | use std::io::Result;
|
||||
14 | use std::thread::Result;
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -5,7 +5,7 @@ error[E0422]: cannot find struct, variant or union type `E` in this scope
|
||||
| ^ not found in this scope
|
||||
|
|
||||
help: possible candidate is found in another module, you can import it into scope
|
||||
| use SomeEnum::E;
|
||||
11 | use SomeEnum::E;
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -5,9 +5,9 @@ error[E0405]: cannot find trait `Mul` in this scope
|
||||
| ^^^ not found in this scope
|
||||
|
|
||||
help: possible candidates are found in other modules, you can import them into scope
|
||||
| use mul1::Mul;
|
||||
| use mul2::Mul;
|
||||
| use std::ops::Mul;
|
||||
11 | use mul1::Mul;
|
||||
12 | use mul2::Mul;
|
||||
13 | use std::ops::Mul;
|
||||
|
||||
error[E0412]: cannot find type `Mul` in this scope
|
||||
--> $DIR/issue-21221-1.rs:72:16
|
||||
@ -16,10 +16,10 @@ error[E0412]: cannot find type `Mul` in this scope
|
||||
| ^^^ not found in this scope
|
||||
|
|
||||
help: possible candidates are found in other modules, you can import them into scope
|
||||
| use mul1::Mul;
|
||||
| use mul2::Mul;
|
||||
| use mul3::Mul;
|
||||
| use mul4::Mul;
|
||||
11 | use mul1::Mul;
|
||||
12 | use mul2::Mul;
|
||||
13 | use mul3::Mul;
|
||||
14 | use mul4::Mul;
|
||||
and 2 other candidates
|
||||
|
||||
error[E0405]: cannot find trait `ThisTraitReallyDoesntExistInAnyModuleReally` in this scope
|
||||
@ -35,7 +35,7 @@ error[E0405]: cannot find trait `Div` in this scope
|
||||
| ^^^ not found in this scope
|
||||
|
|
||||
help: possible candidate is found in another module, you can import it into scope
|
||||
| use std::ops::Div;
|
||||
11 | use std::ops::Div;
|
||||
|
||||
error: cannot continue compilation due to previous error
|
||||
|
||||
|
@ -5,7 +5,7 @@ error[E0405]: cannot find trait `T` in this scope
|
||||
| ^ not found in this scope
|
||||
|
|
||||
help: possible candidate is found in another module, you can import it into scope
|
||||
| use foo::bar::T;
|
||||
11 | use foo::bar::T;
|
||||
|
||||
error[E0601]: main function not found
|
||||
|
||||
|
@ -5,7 +5,7 @@ error[E0405]: cannot find trait `OuterTrait` in this scope
|
||||
| ^^^^^^^^^^ not found in this scope
|
||||
|
|
||||
help: possible candidate is found in another module, you can import it into scope
|
||||
| use issue_21221_3::outer::OuterTrait;
|
||||
16 | use issue_21221_3::outer::OuterTrait;
|
||||
|
||||
error: cannot continue compilation due to previous error
|
||||
|
||||
|
@ -5,7 +5,7 @@ error[E0405]: cannot find trait `T` in this scope
|
||||
| ^ not found in this scope
|
||||
|
|
||||
help: possible candidate is found in another module, you can import it into scope
|
||||
| use issue_21221_4::T;
|
||||
16 | use issue_21221_4::T;
|
||||
|
||||
error: cannot continue compilation due to previous error
|
||||
|
||||
|
@ -5,7 +5,7 @@ error[E0404]: expected trait, found type alias `Foo`
|
||||
| ^^^ type aliases cannot be used for traits
|
||||
|
|
||||
help: possible better candidate is found in another module, you can import it into scope
|
||||
| use issue_3907::Foo;
|
||||
12 | use issue_3907::Foo;
|
||||
|
||||
error: cannot continue compilation due to previous error
|
||||
|
||||
|
@ -9,7 +9,7 @@ error[E0423]: expected value, found struct `Z`
|
||||
| constructor is not visible here due to private fields
|
||||
|
|
||||
help: possible better candidate is found in another module, you can import it into scope
|
||||
| use m::n::Z;
|
||||
15 | use m::n::Z;
|
||||
|
||||
error[E0423]: expected value, found struct `S`
|
||||
--> $DIR/privacy-struct-ctor.rs:36:5
|
||||
@ -21,7 +21,7 @@ error[E0423]: expected value, found struct `S`
|
||||
| constructor is not visible here due to private fields
|
||||
|
|
||||
help: possible better candidate is found in another module, you can import it into scope
|
||||
| use m::S;
|
||||
13 | use m::S;
|
||||
|
||||
error[E0423]: expected value, found struct `xcrate::S`
|
||||
--> $DIR/privacy-struct-ctor.rs:42:5
|
||||
@ -33,7 +33,7 @@ error[E0423]: expected value, found struct `xcrate::S`
|
||||
| constructor is not visible here due to private fields
|
||||
|
|
||||
help: possible better candidate is found in another module, you can import it into scope
|
||||
| use m::S;
|
||||
13 | use m::S;
|
||||
|
||||
error[E0603]: tuple struct `Z` is private
|
||||
--> $DIR/privacy-struct-ctor.rs:25:9
|
||||
|
@ -5,7 +5,7 @@ error[E0404]: expected trait, found type parameter `Add`
|
||||
| ^^^ not a trait
|
||||
|
|
||||
help: possible better candidate is found in another module, you can import it into scope
|
||||
| use std::ops::Add;
|
||||
11 | use std::ops::Add;
|
||||
|
||||
error[E0601]: main function not found
|
||||
|
||||
|
@ -5,7 +5,7 @@ error[E0369]: binary operation `+` cannot be applied to type `&'static str`
|
||||
| ^^^^^^^^^^^^^^^^^^^ `+` can't be used to concatenate two `&str` strings
|
||||
|
|
||||
help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left.
|
||||
| let x = "Hello ".to_owned() + "World!";
|
||||
12 | let x = "Hello ".to_owned() + "World!";
|
||||
|
||||
error[E0369]: binary operation `+` cannot be applied to type `World`
|
||||
--> $DIR/issue-39018.rs:17:13
|
||||
|
Loading…
Reference in New Issue
Block a user