mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-25 12:33:33 +00:00
Merge #11870
11870: Recover from missing type annotation r=Veykril a=HKalbasi We were missing the init expression in case of `let x: = 2`, which breaks type inference of that variable (previously x were `{unknown}`, now it is `i32`). Co-authored-by: hkalbasi <hamidrezakalbasi@protonmail.com>
This commit is contained in:
commit
f8a21e4c70
2 changed files with 20 additions and 0 deletions
|
@ -2556,6 +2556,20 @@ fn f() {
|
|||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn infer_missing_type() {
|
||||
check_types(
|
||||
r#"
|
||||
struct S;
|
||||
|
||||
fn f() {
|
||||
let s: = S;
|
||||
//^ S
|
||||
}
|
||||
"#,
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn infer_type_alias_variant() {
|
||||
check_infer(
|
||||
|
|
|
@ -57,6 +57,12 @@ fn type_with_bounds_cond(p: &mut Parser, allow_bounds: bool) {
|
|||
pub(super) fn ascription(p: &mut Parser) {
|
||||
assert!(p.at(T![:]));
|
||||
p.bump(T![:]);
|
||||
if p.at(T![=]) {
|
||||
// recover from `let x: = expr;`, `const X: = expr;` and similars
|
||||
// hopefully no type starts with `=`
|
||||
p.error("missing type");
|
||||
return;
|
||||
}
|
||||
type_(p);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue