diff options
| author | bors <bors@rust-lang.org> | 2023-02-08 11:14:58 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-02-08 11:14:58 +0000 |
| commit | 5341a6fa7f1c8aa03c21f3ca78e691c51ea36cd1 (patch) | |
| tree | dba1f38279091893d0050bc807ae675e34feb00e | |
| parent | 885c1ad5781a72444f98af16dbf6ef51916f991f (diff) | |
| parent | 5e6208b1dfdca994420f1d3b9b964ed2bc08b0b3 (diff) | |
| download | rust-5341a6fa7f1c8aa03c21f3ca78e691c51ea36cd1.tar.gz rust-5341a6fa7f1c8aa03c21f3ca78e691c51ea36cd1.zip | |
Auto merge of #14103 - Veykril:typing-semi, r=Veykril
fix: Don't insert a semicolon when typing = if parse errors are encountered Fixes https://github.com/rust-lang/rust-analyzer/issues/11005
| -rw-r--r-- | crates/ide/src/typing.rs | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/crates/ide/src/typing.rs b/crates/ide/src/typing.rs index c2654875625..c7e403f6b1a 100644 --- a/crates/ide/src/typing.rs +++ b/crates/ide/src/typing.rs @@ -253,6 +253,10 @@ fn on_eq_typed(file: &SourceFile, offset: TextSize) -> Option<TextEdit> { if file.syntax().text().slice(offset..expr_range.start()).contains_char('\n') { return None; } + // Good indicator that we will insert into a bad spot, so bail out. + if expr.syntax().descendants().any(|it| it.kind() == SyntaxKind::ERROR) { + return None; + } let offset = let_stmt.syntax().text_range().end(); Some(TextEdit::insert(offset, ";".to_string())) } @@ -407,15 +411,14 @@ mod tests { #[test] fn test_semi_after_let() { - // do_check(r" - // fn foo() { - // let foo =$0 - // } - // ", r" - // fn foo() { - // let foo =; - // } - // "); + type_char_noop( + '=', + r" +fn foo() { + let foo =$0 +} +", + ); type_char( '=', r#" @@ -429,17 +432,25 @@ fn foo() { } "#, ); - // do_check(r" - // fn foo() { - // let foo =$0 - // let bar = 1; - // } - // ", r" - // fn foo() { - // let foo =; - // let bar = 1; - // } - // "); + type_char_noop( + '=', + r#" +fn foo() { + let difference $0(counts: &HashMap<(char, char), u64>, last: char) -> u64 { + // ... + } +} +"#, + ); + type_char_noop( + '=', + r" +fn foo() { + let foo =$0 + let bar = 1; +} +", + ); } #[test] |
