about summary refs log tree commit diff
diff options
context:
space:
mode:
authordfireBird <me@dfirebird.dev>2023-11-18 08:40:57 +0530
committerdfireBird <me@dfirebird.dev>2023-11-28 22:21:57 +0530
commit8296b16f38eea267d9eb3e6f1300f0534bc87961 (patch)
tree4bce07f791831a55ef905c4bcbefe021ae60c94a
parentaa1cf8d357f75c7376f933f7274b77bf754e836e (diff)
downloadrust-8296b16f38eea267d9eb3e6f1300f0534bc87961.tar.gz
rust-8296b16f38eea267d9eb3e6f1300f0534bc87961.zip
fix the insertion of the surronding parens
Before it was inserting whenever function field is found but it should
happend only in the case of function call.
-rw-r--r--crates/ide-completion/src/render.rs43
1 files changed, 16 insertions, 27 deletions
diff --git a/crates/ide-completion/src/render.rs b/crates/ide-completion/src/render.rs
index 28f7166a22a..f733f36f5d6 100644
--- a/crates/ide-completion/src/render.rs
+++ b/crates/ide-completion/src/render.rs
@@ -154,13 +154,6 @@ pub(crate) fn render_field(
         // dot access, then comes the field name and optionally insert function
         // call parens.
 
-        if let Some(receiver) = &dot_access.receiver {
-            if let Some(receiver) = ctx.completion.sema.original_ast_node(receiver.clone()) {
-                let range = receiver.syntax().text_range();
-                builder.insert(range.start(), "(".to_string());
-                builder.insert(range.end(), ")".to_string());
-            }
-        }
         builder.replace(
             ctx.source_range(),
             field_with_receiver(db, receiver.as_ref(), &escaped_name).into(),
@@ -169,11 +162,21 @@ pub(crate) fn render_field(
         let expected_fn_type =
             ctx.completion.expected_type.as_ref().is_some_and(|ty| ty.is_fn() || ty.is_closure());
 
-        let is_parens_needed =
-            !matches!(dot_access.kind, DotAccessKind::Method { has_parens: true });
+        if !expected_fn_type {
+            if let Some(receiver) = &dot_access.receiver {
+                if let Some(receiver) = ctx.completion.sema.original_ast_node(receiver.clone()) {
+                    let range = receiver.syntax().text_range();
+                    builder.insert(range.start(), "(".to_string());
+                    builder.insert(range.end(), ")".to_string());
+                }
+            }
+
+            let is_parens_needed =
+                !matches!(dot_access.kind, DotAccessKind::Method { has_parens: true });
 
-        if !expected_fn_type && is_parens_needed {
-            builder.insert(ctx.source_range().end(), "()".to_string());
+            if is_parens_needed {
+                builder.insert(ctx.source_range().end(), "()".to_string());
+            }
         }
 
         item.text_edit(builder.finish());
@@ -1706,22 +1709,8 @@ fn foo() {
                     CompletionItem {
                         label: "field",
                         source_range: 76..78,
-                        text_edit: TextEdit {
-                            indels: [
-                                Indel {
-                                    insert: "(",
-                                    delete: 57..57,
-                                },
-                                Indel {
-                                    insert: ")",
-                                    delete: 75..75,
-                                },
-                                Indel {
-                                    insert: "field",
-                                    delete: 76..78,
-                                },
-                            ],
-                        },
+                        delete: 76..78,
+                        insert: "field",
                         kind: SymbolKind(
                             Field,
                         ),