mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-03 07:04:49 +00:00
Add =
to pattern recovery
This commit is contained in:
parent
96c5df9b17
commit
174f043c8d
2 changed files with 23 additions and 2 deletions
|
@ -313,7 +313,8 @@ impl<'a> CompletionContext<'a> {
|
||||||
cov_mark::hit!(expected_type_let_with_leading_char);
|
cov_mark::hit!(expected_type_let_with_leading_char);
|
||||||
cov_mark::hit!(expected_type_let_without_leading_char);
|
cov_mark::hit!(expected_type_let_without_leading_char);
|
||||||
let ty = it.pat()
|
let ty = it.pat()
|
||||||
.and_then(|pat| self.sema.type_of_pat(&pat));
|
.and_then(|pat| self.sema.type_of_pat(&pat))
|
||||||
|
.or_else(|| it.initializer().and_then(|it| self.sema.type_of_expr(&it)));
|
||||||
let name = if let Some(ast::Pat::IdentPat(ident)) = it.pat() {
|
let name = if let Some(ast::Pat::IdentPat(ident)) = it.pat() {
|
||||||
ident.name().map(NameOrNameRef::Name)
|
ident.name().map(NameOrNameRef::Name)
|
||||||
} else {
|
} else {
|
||||||
|
@ -719,6 +720,26 @@ fn foo() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expected_type_let_pat() {
|
||||||
|
check_expected_type_and_name(
|
||||||
|
r#"
|
||||||
|
fn foo() {
|
||||||
|
let x$0 = 0u32;
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
expect![[r#"ty: u32, name: ?"#]],
|
||||||
|
);
|
||||||
|
check_expected_type_and_name(
|
||||||
|
r#"
|
||||||
|
fn foo() {
|
||||||
|
let $0 = 0u32;
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
expect![[r#"ty: u32, name: ?"#]],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn expected_type_fn_param_without_leading_char() {
|
fn expected_type_fn_param_without_leading_char() {
|
||||||
cov_mark::check!(expected_type_fn_param_without_leading_char);
|
cov_mark::check!(expected_type_fn_param_without_leading_char);
|
||||||
|
|
|
@ -83,7 +83,7 @@ fn pattern_single_r(p: &mut Parser, recovery_set: TokenSet) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const PAT_RECOVERY_SET: TokenSet =
|
const PAT_RECOVERY_SET: TokenSet =
|
||||||
TokenSet::new(&[T![let], T![if], T![while], T![loop], T![match], T![')'], T![,]]);
|
TokenSet::new(&[T![let], T![if], T![while], T![loop], T![match], T![')'], T![,], T![=]]);
|
||||||
|
|
||||||
fn atom_pat(p: &mut Parser, recovery_set: TokenSet) -> Option<CompletedMarker> {
|
fn atom_pat(p: &mut Parser, recovery_set: TokenSet) -> Option<CompletedMarker> {
|
||||||
let m = match p.nth(0) {
|
let m = match p.nth(0) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue