Skip to content

Commit f94953d

Browse files
Address the feedback from Veykril
* Exclude documentation field from hashing * Do less cloning during initial completion list generation
1 parent 61c0b26 commit f94953d

File tree

2 files changed

+10
-10
lines changed

2 files changed

+10
-10
lines changed

src/tools/rust-analyzer/crates/rust-analyzer/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,14 +120,14 @@ fn completion_item_hash(item: &CompletionItem, is_ref_completion: bool) -> [u8;
120120
}
121121
// NB: do not hash edits or source range, as those may change between the time the client sends the resolve request
122122
// and the time it receives it: some editors do allow changing the buffer between that, leading to ranges being different.
123+
//
124+
// Documentation hashing is skipped too, as it's a large blob to process,
125+
// while not really making completion properties more unique as they are already.
123126
hasher.update(item.kind.tag());
124127
hasher.update(&item.lookup);
125128
if let Some(detail) = &item.detail {
126129
hasher.update(detail);
127130
}
128-
if let Some(documentation) = &item.documentation {
129-
hasher.update(documentation.as_str());
130-
}
131131
hash_completion_relevance(&mut hasher, &item.relevance);
132132
if let Some((mutability, text_size)) = &item.ref_match {
133133
hasher.update(mutability.as_keyword_for_ref());

src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/to_proto.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,6 @@ fn completion_item(
275275
completion_trigger_character: Option<char>,
276276
item: CompletionItem,
277277
) {
278-
let original_completion_item = item.clone();
279278
let insert_replace_support = config.insert_replace_support().then_some(tdpp.position);
280279
let ref_match = item.ref_match();
281280

@@ -297,7 +296,7 @@ fn completion_item(
297296
// non-trivial mapping here.
298297
let mut text_edit = None;
299298
let source_range = item.source_range;
300-
for indel in item.text_edit {
299+
for indel in &item.text_edit {
301300
if indel.delete.contains_range(source_range) {
302301
// Extract this indel as the main edit
303302
text_edit = Some(if indel.delete == source_range {
@@ -349,7 +348,7 @@ fn completion_item(
349348
something_to_resolve |= item.documentation.is_some();
350349
None
351350
} else {
352-
item.documentation.map(documentation)
351+
item.documentation.clone().map(documentation)
353352
};
354353

355354
let mut lsp_item = lsp_types::CompletionItem {
@@ -373,10 +372,10 @@ fn completion_item(
373372
} else {
374373
lsp_item.label_details = Some(lsp_types::CompletionItemLabelDetails {
375374
detail: item.label_detail.as_ref().map(ToString::to_string),
376-
description: item.detail,
375+
description: item.detail.clone(),
377376
});
378377
}
379-
} else if let Some(label_detail) = item.label_detail {
378+
} else if let Some(label_detail) = &item.label_detail {
380379
lsp_item.label.push_str(label_detail.as_str());
381380
}
382381

@@ -385,6 +384,7 @@ fn completion_item(
385384
let imports =
386385
if config.completion(None).enable_imports_on_the_fly && !item.import_to_add.is_empty() {
387386
item.import_to_add
387+
.clone()
388388
.into_iter()
389389
.map(|(import_path, import_name)| lsp_ext::CompletionImport {
390390
full_import_path: import_path,
@@ -402,7 +402,7 @@ fn completion_item(
402402
version,
403403
trigger_character: completion_trigger_character,
404404
for_ref: true,
405-
hash: completion_item_hash(&original_completion_item, true),
405+
hash: completion_item_hash(&item, true),
406406
};
407407
Some(to_value(ref_resolve_data).unwrap())
408408
} else {
@@ -414,7 +414,7 @@ fn completion_item(
414414
version,
415415
trigger_character: completion_trigger_character,
416416
for_ref: false,
417-
hash: completion_item_hash(&original_completion_item, false),
417+
hash: completion_item_hash(&item, false),
418418
};
419419
(ref_resolve_data, Some(to_value(resolve_data).unwrap()))
420420
} else {

0 commit comments

Comments
 (0)