about summary refs log tree commit diff
path: root/src/tools/rust-analyzer
diff options
context:
space:
mode:
authorKirill Bulatov <mail4score@gmail.com>2024-12-10 00:04:53 +0200
committerKirill Bulatov <mail4score@gmail.com>2024-12-10 00:45:57 +0200
commitb203c73ccfb868c8d299aee34228ddc5b3545b9f (patch)
treeb3f1426a1def9941c6c9cbf09457a96348a9f778 /src/tools/rust-analyzer
parent160cb324c173ebab94d27a34b2372941233251be (diff)
downloadrust-b203c73ccfb868c8d299aee34228ddc5b3545b9f.tar.gz
rust-b203c73ccfb868c8d299aee34228ddc5b3545b9f.zip
Avoid hashing completion-related ranges as those may change during /resolve query
Diffstat (limited to 'src/tools/rust-analyzer')
-rw-r--r--src/tools/rust-analyzer/crates/rust-analyzer/src/lib.rs18
1 files changed, 3 insertions, 15 deletions
diff --git a/src/tools/rust-analyzer/crates/rust-analyzer/src/lib.rs b/src/tools/rust-analyzer/crates/rust-analyzer/src/lib.rs
index 7cf88e60dba..aed84795895 100644
--- a/src/tools/rust-analyzer/crates/rust-analyzer/src/lib.rs
+++ b/src/tools/rust-analyzer/crates/rust-analyzer/src/lib.rs
@@ -47,7 +47,7 @@ use self::lsp::ext as lsp_ext;
 #[cfg(test)]
 mod integrated_benchmarks;
 
-use ide::{CompletionItem, CompletionRelevance, TextEdit, TextRange};
+use ide::{CompletionItem, CompletionRelevance};
 use serde::de::DeserializeOwned;
 use tenthash::TentHasher;
 
@@ -65,18 +65,6 @@ pub fn from_json<T: DeserializeOwned>(
 }
 
 fn completion_item_hash(item: &CompletionItem, is_ref_completion: bool) -> [u8; 20] {
-    fn hash_text_range(hasher: &mut TentHasher, text_range: &TextRange) {
-        hasher.update(u32::from(text_range.start()).to_le_bytes());
-        hasher.update(u32::from(text_range.end()).to_le_bytes());
-    }
-
-    fn hash_text_edit(hasher: &mut TentHasher, edit: &TextEdit) {
-        for indel in edit.iter() {
-            hasher.update(&indel.insert);
-            hash_text_range(hasher, &indel.delete);
-        }
-    }
-
     fn hash_completion_relevance(hasher: &mut TentHasher, relevance: &CompletionRelevance) {
         use ide_completion::{
             CompletionRelevancePostfixMatch, CompletionRelevanceReturnType,
@@ -130,8 +118,8 @@ fn completion_item_hash(item: &CompletionItem, is_ref_completion: bool) -> [u8;
     if let Some(label_detail) = &item.label_detail {
         hasher.update(label_detail);
     }
-    hash_text_range(&mut hasher, &item.source_range);
-    hash_text_edit(&mut hasher, &item.text_edit);
+    // NB: do not hash edits or source range, as those may change between the time the client sends the resolve request
+    // and the time it receives it: some editors do allow changing the buffer between that, leading to ranges being different.
     hasher.update(item.kind.tag());
     hasher.update(&item.lookup);
     if let Some(detail) = &item.detail {