mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-26 04:53:34 +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]
|
#[test]
|
||||||
fn infer_type_alias_variant() {
|
fn infer_type_alias_variant() {
|
||||||
check_infer(
|
check_infer(
|
||||||
|
|
|
@ -57,6 +57,12 @@ fn type_with_bounds_cond(p: &mut Parser, allow_bounds: bool) {
|
||||||
pub(super) fn ascription(p: &mut Parser) {
|
pub(super) fn ascription(p: &mut Parser) {
|
||||||
assert!(p.at(T![:]));
|
assert!(p.at(T![:]));
|
||||||
p.bump(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);
|
type_(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue