about summary refs log tree commit diff
diff options
context:
space:
mode:
authorKirill Bulatov <mail4score@gmail.com>2024-11-25 23:30:08 +0200
committerKirill Bulatov <mail4score@gmail.com>2024-11-25 23:30:08 +0200
commit669bb6cfda507f7e69fde4d0b63d8c277a32948e (patch)
treec31f005fdbdd2046a250225695403cbffaeca26c
parent60c4250430b34b75ca2cfd43ccb04aa1d657dbde (diff)
downloadrust-669bb6cfda507f7e69fde4d0b63d8c277a32948e.tar.gz
rust-669bb6cfda507f7e69fde4d0b63d8c277a32948e.zip
Revert "Use completion item indices instead of property matching when searching for the completion item to resolve"
This reverts commit fa46a9e2b605de60b11a29f5951e650c3c0f5089.
-rw-r--r--src/tools/rust-analyzer/crates/rust-analyzer/src/handlers/request.rs18
-rw-r--r--src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/ext.rs1
-rw-r--r--src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/to_proto.rs29
3 files changed, 15 insertions, 33 deletions
diff --git a/src/tools/rust-analyzer/crates/rust-analyzer/src/handlers/request.rs b/src/tools/rust-analyzer/crates/rust-analyzer/src/handlers/request.rs
index 691ea6f5677..9773d8dbce0 100644
--- a/src/tools/rust-analyzer/crates/rust-analyzer/src/handlers/request.rs
+++ b/src/tools/rust-analyzer/crates/rust-analyzer/src/handlers/request.rs
@@ -1068,7 +1068,7 @@ pub(crate) fn handle_completion_resolve(
     else {
         return Ok(original_completion);
     };
-    let mut resolved_completions = to_proto::completion_items(
+    let resolved_completions = to_proto::completion_items(
         &snap.config,
         &forced_resolve_completions_config.fields_to_resolve,
         &line_index,
@@ -1077,13 +1077,15 @@ pub(crate) fn handle_completion_resolve(
         resolve_data.trigger_character,
         resolved_completions,
     );
-
-    let mut resolved_completion =
-        if resolved_completions.get(resolve_data.completion_item_index).is_some() {
-            resolved_completions.swap_remove(resolve_data.completion_item_index)
-        } else {
-            return Ok(original_completion);
-        };
+    let Some(mut resolved_completion) = resolved_completions.into_iter().find(|completion| {
+        completion.label == original_completion.label
+            && completion.kind == original_completion.kind
+            && completion.deprecated == original_completion.deprecated
+            && completion.preselect == original_completion.preselect
+            && completion.sort_text == original_completion.sort_text
+    }) else {
+        return Ok(original_completion);
+    };
 
     if !resolve_data.imports.is_empty() {
         let additional_edits = snap
diff --git a/src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/ext.rs b/src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/ext.rs
index 6ddfe118d5e..8039f0644ee 100644
--- a/src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/ext.rs
+++ b/src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/ext.rs
@@ -826,7 +826,6 @@ pub struct CompletionResolveData {
     pub imports: Vec<CompletionImport>,
     pub version: Option<i32>,
     pub trigger_character: Option<char>,
-    pub completion_item_index: usize,
 }
 
 #[derive(Debug, Serialize, Deserialize)]
diff --git a/src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/to_proto.rs b/src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/to_proto.rs
index cdc6fb17fd4..375b7428c2d 100644
--- a/src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/to_proto.rs
+++ b/src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/to_proto.rs
@@ -391,36 +391,18 @@ fn completion_item(
         } else {
             Vec::new()
         };
-    let (ref_resolve_data, resolve_data) = if something_to_resolve || !imports.is_empty() {
-        let mut item_index = acc.len();
-        let ref_resolve_data = if ref_match.is_some() {
-            let ref_resolve_data = lsp_ext::CompletionResolveData {
-                position: tdpp.clone(),
-                imports: Vec::new(),
-                version,
-                trigger_character: completion_trigger_character,
-                completion_item_index: item_index,
-            };
-            item_index += 1;
-            Some(to_value(ref_resolve_data).unwrap())
-        } else {
-            None
-        };
-        let resolve_data = lsp_ext::CompletionResolveData {
+    if something_to_resolve || !imports.is_empty() {
+        let data = lsp_ext::CompletionResolveData {
             position: tdpp.clone(),
             imports,
             version,
             trigger_character: completion_trigger_character,
-            completion_item_index: item_index,
         };
-        (ref_resolve_data, Some(to_value(resolve_data).unwrap()))
-    } else {
-        (None, None)
-    };
+        lsp_item.data = Some(to_value(data).unwrap());
+    }
 
     if let Some((label, indel, relevance)) = ref_match {
-        let mut lsp_item_with_ref =
-            lsp_types::CompletionItem { label, data: ref_resolve_data, ..lsp_item.clone() };
+        let mut lsp_item_with_ref = lsp_types::CompletionItem { label, ..lsp_item.clone() };
         lsp_item_with_ref
             .additional_text_edits
             .get_or_insert_with(Default::default)
@@ -429,7 +411,6 @@ fn completion_item(
         acc.push(lsp_item_with_ref);
     };
 
-    lsp_item.data = resolve_data;
     acc.push(lsp_item);
 
     fn set_score(