mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-14 17:07:26 +00:00
fix: disregard type variable expectation for if expressions
This commit is contained in:
parent
d022e0ec53
commit
db8c7523f8
2 changed files with 34 additions and 0 deletions
|
@ -85,6 +85,7 @@ impl<'a> InferenceContext<'a> {
|
|||
let ty = match &self.body[tgt_expr] {
|
||||
Expr::Missing => self.err_ty(),
|
||||
&Expr::If { condition, then_branch, else_branch } => {
|
||||
let expected = &expected.adjust_for_branches(&mut self.table);
|
||||
self.infer_expr(
|
||||
condition,
|
||||
&Expectation::has_type(TyKind::Scalar(Scalar::Bool).intern(Interner)),
|
||||
|
|
|
@ -122,6 +122,23 @@ fn test() {
|
|||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn if_else_adjust_for_branches_discard_type_var() {
|
||||
check_no_mismatches(
|
||||
r#"
|
||||
fn test() {
|
||||
let f = || {
|
||||
if true {
|
||||
&""
|
||||
} else {
|
||||
""
|
||||
}
|
||||
};
|
||||
}
|
||||
"#,
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn match_first_coerce() {
|
||||
check_no_mismatches(
|
||||
|
@ -182,6 +199,22 @@ fn test() {
|
|||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn match_adjust_for_branches_discard_type_var() {
|
||||
check_no_mismatches(
|
||||
r#"
|
||||
fn test() {
|
||||
let f = || {
|
||||
match 0i32 {
|
||||
0i32 => &"",
|
||||
_ => "",
|
||||
}
|
||||
};
|
||||
}
|
||||
"#,
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn return_coerce_unknown() {
|
||||
check_types(
|
||||
|
|
Loading…
Reference in a new issue