about summary refs log tree commit diff
diff options
context:
space:
mode:
authorKirill Bulatov <mail4score@gmail.com>2024-12-09 22:09:25 +0200
committerKirill Bulatov <mail4score@gmail.com>2024-12-09 22:26:00 +0200
commite8e3949698289876e8b309ced9dc85f962021437 (patch)
treebcf5330108f1a624824f47083c61eb4d29c62b0a
parentcbc006993957595db56432d0d0b43e944fd5e9d7 (diff)
downloadrust-e8e3949698289876e8b309ced9dc85f962021437.tar.gz
rust-e8e3949698289876e8b309ced9dc85f962021437.zip
Always compute the hash when r-a wants the imports to be resolved
-rw-r--r--src/tools/rust-analyzer/crates/rust-analyzer/src/handlers/request.rs5
-rw-r--r--src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/ext.rs2
-rw-r--r--src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/to_proto.rs14
-rw-r--r--src/tools/rust-analyzer/docs/dev/lsp-extensions.md2
4 files changed, 6 insertions, 17 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 9dd6dc999b4..851341dfdf3 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
@@ -1123,9 +1123,6 @@ pub(crate) fn handle_completion_resolve(
         return Ok(original_completion);
     };
     let source_root = snap.analysis.source_root_id(file_id)?;
-    let Some(completion_hash_for_resolve) = &resolve_data.completion_item_hash else {
-        return Ok(original_completion);
-    };
 
     let mut forced_resolve_completions_config = snap.config.completion(Some(source_root));
     forced_resolve_completions_config.fields_to_resolve = CompletionFieldsToResolve::empty();
@@ -1142,7 +1139,7 @@ pub(crate) fn handle_completion_resolve(
 
     let Some(corresponding_completion) = completions.into_iter().find(|completion_item| {
         let hash = completion_item_hash(&completion_item, resolve_data.for_ref);
-        &hash == completion_hash_for_resolve
+        hash == resolve_data.hash
     }) else {
         return Ok(original_completion);
     };
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 7d60ae703b2..afb9c909c68 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
@@ -827,7 +827,7 @@ pub struct CompletionResolveData {
     pub version: Option<i32>,
     pub trigger_character: Option<char>,
     pub for_ref: bool,
-    pub completion_item_hash: Option<[u8; 20]>,
+    pub hash: [u8; 20],
 }
 
 #[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 97caed8f08c..f70968d6942 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
@@ -275,11 +275,7 @@ fn completion_item(
     completion_trigger_character: Option<char>,
     item: CompletionItem,
 ) {
-    let original_completion_item = if fields_to_resolve == &CompletionFieldsToResolve::empty() {
-        None
-    } else {
-        Some(item.clone())
-    };
+    let original_completion_item = item.clone();
     let insert_replace_support = config.insert_replace_support().then_some(tdpp.position);
     let ref_match = item.ref_match();
 
@@ -406,9 +402,7 @@ fn completion_item(
                 version,
                 trigger_character: completion_trigger_character,
                 for_ref: true,
-                completion_item_hash: original_completion_item
-                    .as_ref()
-                    .map(|item| completion_item_hash(item, true)),
+                hash: completion_item_hash(&original_completion_item, true),
             };
             Some(to_value(ref_resolve_data).unwrap())
         } else {
@@ -420,9 +414,7 @@ fn completion_item(
             version,
             trigger_character: completion_trigger_character,
             for_ref: false,
-            completion_item_hash: original_completion_item
-                .as_ref()
-                .map(|item| completion_item_hash(item, false)),
+            hash: completion_item_hash(&original_completion_item, false),
         };
         (ref_resolve_data, Some(to_value(resolve_data).unwrap()))
     } else {
diff --git a/src/tools/rust-analyzer/docs/dev/lsp-extensions.md b/src/tools/rust-analyzer/docs/dev/lsp-extensions.md
index 00863825170..80b35d453a3 100644
--- a/src/tools/rust-analyzer/docs/dev/lsp-extensions.md
+++ b/src/tools/rust-analyzer/docs/dev/lsp-extensions.md
@@ -1,5 +1,5 @@
 <!---
-lsp/ext.rs hash: 7d77940d7e63a8b
+lsp/ext.rs hash: c4c37ab0bcf7ccb0
 
 If you need to change the above hash to make the test pass, please check if you
 need to adjust this doc as well and ping this issue: