"incompatible arm" diagnostic span tweak
Use span label instead of span note for single line spans in "incompatible arm" diagnostic.
This commit is contained in:
parent
4a7c072fa6
commit
fed4fcb318
6 changed files with 23 additions and 22 deletions
|
@ -437,10 +437,20 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
|
||||||
match cause.code {
|
match cause.code {
|
||||||
ObligationCauseCode::MatchExpressionArm { arm_span, source } => match source {
|
ObligationCauseCode::MatchExpressionArm { arm_span, source } => match source {
|
||||||
hir::MatchSource::IfLetDesugar {..} => {
|
hir::MatchSource::IfLetDesugar {..} => {
|
||||||
err.span_note(arm_span, "`if let` arm with an incompatible type");
|
let msg = "`if let` arm with an incompatible type";
|
||||||
|
if self.tcx.sess.codemap().is_multiline(arm_span) {
|
||||||
|
err.span_note(arm_span, msg);
|
||||||
|
} else {
|
||||||
|
err.span_label(arm_span, msg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
err.span_note(arm_span, "match arm with an incompatible type");
|
let msg = "match arm with an incompatible type";
|
||||||
|
if self.tcx.sess.codemap().is_multiline(arm_span) {
|
||||||
|
err.span_note(arm_span, msg);
|
||||||
|
} else {
|
||||||
|
err.span_label(arm_span, msg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_ => ()
|
_ => ()
|
||||||
|
|
|
@ -446,6 +446,12 @@ impl CodeMap {
|
||||||
.expect("CodeMap::span_to_unmapped_path called for imported FileMap?")
|
.expect("CodeMap::span_to_unmapped_path called for imported FileMap?")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn is_multiline(&self, sp: Span) -> bool {
|
||||||
|
let lo = self.lookup_char_pos(sp.lo());
|
||||||
|
let hi = self.lookup_char_pos(sp.hi());
|
||||||
|
lo.line != hi.line
|
||||||
|
}
|
||||||
|
|
||||||
pub fn span_to_lines(&self, sp: Span) -> FileLinesResult {
|
pub fn span_to_lines(&self, sp: Span) -> FileLinesResult {
|
||||||
debug!("span_to_lines(sp={:?})", sp);
|
debug!("span_to_lines(sp={:?})", sp);
|
||||||
|
|
||||||
|
|
|
@ -6,17 +6,14 @@ error[E0308]: match arms have incompatible types
|
||||||
14 | | //~| expected type `bool`
|
14 | | //~| expected type `bool`
|
||||||
15 | | //~| found type `()`
|
15 | | //~| found type `()`
|
||||||
... |
|
... |
|
||||||
|
19 | | None => (),
|
||||||
|
| | -- match arm with an incompatible type
|
||||||
20 | | _ => true
|
20 | | _ => true
|
||||||
21 | | }
|
21 | | }
|
||||||
| |_____^ expected bool, found ()
|
| |_____^ expected bool, found ()
|
||||||
|
|
|
|
||||||
= note: expected type `bool`
|
= note: expected type `bool`
|
||||||
found type `()`
|
found type `()`
|
||||||
note: match arm with an incompatible type
|
|
||||||
--> $DIR/issue-11319.rs:19:20
|
|
||||||
|
|
|
||||||
19 | None => (),
|
|
||||||
| ^^
|
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ error[E0308]: match arms have incompatible types
|
||||||
19 | | //~^ ERROR match arms have incompatible types
|
19 | | //~^ ERROR match arms have incompatible types
|
||||||
20 | | 1 => |c| c + 1,
|
20 | | 1 => |c| c + 1,
|
||||||
21 | | 2 => |c| c - 1,
|
21 | | 2 => |c| c - 1,
|
||||||
|
| | --------- match arm with an incompatible type
|
||||||
22 | | _ => |c| c - 1
|
22 | | _ => |c| c - 1
|
||||||
23 | | };
|
23 | | };
|
||||||
| |_____^ expected closure, found a different closure
|
| |_____^ expected closure, found a different closure
|
||||||
|
@ -25,11 +26,6 @@ error[E0308]: match arms have incompatible types
|
||||||
found type `[closure@$DIR/issue-24036.rs:21:14: 21:23]`
|
found type `[closure@$DIR/issue-24036.rs:21:14: 21:23]`
|
||||||
= note: no two closures, even if identical, have the same type
|
= note: no two closures, even if identical, have the same type
|
||||||
= help: consider boxing your closure and/or using it as a trait object
|
= help: consider boxing your closure and/or using it as a trait object
|
||||||
note: match arm with an incompatible type
|
|
||||||
--> $DIR/issue-24036.rs:21:14
|
|
||||||
|
|
|
||||||
21 | 2 => |c| c - 1,
|
|
||||||
| ^^^^^^^^^
|
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ error[E0308]: match arms have incompatible types
|
||||||
| _____________^
|
| _____________^
|
||||||
19 | | 0 => x,
|
19 | | 0 => x,
|
||||||
20 | | _ => y,
|
20 | | _ => y,
|
||||||
|
| | - match arm with an incompatible type
|
||||||
21 | | };
|
21 | | };
|
||||||
| |_____^ expected bound lifetime parameter, found concrete lifetime
|
| |_____^ expected bound lifetime parameter, found concrete lifetime
|
||||||
|
|
|
|
||||||
|
@ -12,11 +13,6 @@ error[E0308]: match arms have incompatible types
|
||||||
found type `for<'a> fn(&'a u8, &'a u8)`
|
found type `for<'a> fn(&'a u8, &'a u8)`
|
||||||
= note: this was previously accepted by the compiler but has been phased out
|
= note: this was previously accepted by the compiler but has been phased out
|
||||||
= note: for more information, see https://github.com/rust-lang/rust/issues/45852
|
= note: for more information, see https://github.com/rust-lang/rust/issues/45852
|
||||||
note: match arm with an incompatible type
|
|
||||||
--> $DIR/old-lub-glb-hr.rs:20:14
|
|
||||||
|
|
|
||||||
20 | _ => y,
|
|
||||||
| ^
|
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ error[E0308]: match arms have incompatible types
|
||||||
| _____________^
|
| _____________^
|
||||||
21 | | 0 => x,
|
21 | | 0 => x,
|
||||||
22 | | _ => y,
|
22 | | _ => y,
|
||||||
|
| | - match arm with an incompatible type
|
||||||
23 | | };
|
23 | | };
|
||||||
| |_____^ expected bound lifetime parameter 'a, found concrete lifetime
|
| |_____^ expected bound lifetime parameter 'a, found concrete lifetime
|
||||||
|
|
|
|
||||||
|
@ -12,11 +13,6 @@ error[E0308]: match arms have incompatible types
|
||||||
found type `&for<'a> Foo<&'a u8, &'a u8>`
|
found type `&for<'a> Foo<&'a u8, &'a u8>`
|
||||||
= note: this was previously accepted by the compiler but has been phased out
|
= note: this was previously accepted by the compiler but has been phased out
|
||||||
= note: for more information, see https://github.com/rust-lang/rust/issues/45852
|
= note: for more information, see https://github.com/rust-lang/rust/issues/45852
|
||||||
note: match arm with an incompatible type
|
|
||||||
--> $DIR/old-lub-glb-object.rs:22:14
|
|
||||||
|
|
|
||||||
22 | _ => y,
|
|
||||||
| ^
|
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue