about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/tools/rust-analyzer/crates/ide/src/typing.rs19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/tools/rust-analyzer/crates/ide/src/typing.rs b/src/tools/rust-analyzer/crates/ide/src/typing.rs
index 3d9146cc4c7..d37318ff457 100644
--- a/src/tools/rust-analyzer/crates/ide/src/typing.rs
+++ b/src/tools/rust-analyzer/crates/ide/src/typing.rs
@@ -174,6 +174,9 @@ fn on_delimited_node_typed(
     kinds: &[fn(SyntaxKind) -> bool],
 ) -> Option<TextEdit> {
     let t = reparsed.syntax().token_at_offset(offset).right_biased()?;
+    if t.prev_token().map_or(false, |t| t.kind().is_any_identifier()) {
+        return None;
+    }
     let (filter, node) = t
         .parent_ancestors()
         .take_while(|n| n.text_range().start() == offset)
@@ -1092,6 +1095,22 @@ fn f() {
     }
 
     #[test]
+    fn preceding_whitespace_is_significant_for_closing_brackets() {
+        type_char_noop(
+            '(',
+            r#"
+fn f() { a.b$0if true {} }
+"#,
+        );
+        type_char_noop(
+            '(',
+            r#"
+fn f() { foo$0{} }
+"#,
+        );
+    }
+
+    #[test]
     fn adds_closing_parenthesis_for_pat() {
         type_char(
             '(',