Skip to content

Commit 669bb6c

Browse files
Revert "Use completion item indices instead of property matching when searching for the completion item to resolve"
This reverts commit fa46a9e.
1 parent 60c4250 commit 669bb6c

File tree

3 files changed

+15
-33
lines changed

3 files changed

+15
-33
lines changed

src/tools/rust-analyzer/crates/rust-analyzer/src/handlers/request.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1068,7 +1068,7 @@ pub(crate) fn handle_completion_resolve(
10681068
else {
10691069
return Ok(original_completion);
10701070
};
1071-
let mut resolved_completions = to_proto::completion_items(
1071+
let resolved_completions = to_proto::completion_items(
10721072
&snap.config,
10731073
&forced_resolve_completions_config.fields_to_resolve,
10741074
&line_index,
@@ -1077,13 +1077,15 @@ pub(crate) fn handle_completion_resolve(
10771077
resolve_data.trigger_character,
10781078
resolved_completions,
10791079
);
1080-
1081-
let mut resolved_completion =
1082-
if resolved_completions.get(resolve_data.completion_item_index).is_some() {
1083-
resolved_completions.swap_remove(resolve_data.completion_item_index)
1084-
} else {
1085-
return Ok(original_completion);
1086-
};
1080+
let Some(mut resolved_completion) = resolved_completions.into_iter().find(|completion| {
1081+
completion.label == original_completion.label
1082+
&& completion.kind == original_completion.kind
1083+
&& completion.deprecated == original_completion.deprecated
1084+
&& completion.preselect == original_completion.preselect
1085+
&& completion.sort_text == original_completion.sort_text
1086+
}) else {
1087+
return Ok(original_completion);
1088+
};
10871089

10881090
if !resolve_data.imports.is_empty() {
10891091
let additional_edits = snap

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -826,7 +826,6 @@ pub struct CompletionResolveData {
826826
pub imports: Vec<CompletionImport>,
827827
pub version: Option<i32>,
828828
pub trigger_character: Option<char>,
829-
pub completion_item_index: usize,
830829
}
831830

832831
#[derive(Debug, Serialize, Deserialize)]

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

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -391,36 +391,18 @@ fn completion_item(
391391
} else {
392392
Vec::new()
393393
};
394-
let (ref_resolve_data, resolve_data) = if something_to_resolve || !imports.is_empty() {
395-
let mut item_index = acc.len();
396-
let ref_resolve_data = if ref_match.is_some() {
397-
let ref_resolve_data = lsp_ext::CompletionResolveData {
398-
position: tdpp.clone(),
399-
imports: Vec::new(),
400-
version,
401-
trigger_character: completion_trigger_character,
402-
completion_item_index: item_index,
403-
};
404-
item_index += 1;
405-
Some(to_value(ref_resolve_data).unwrap())
406-
} else {
407-
None
408-
};
409-
let resolve_data = lsp_ext::CompletionResolveData {
394+
if something_to_resolve || !imports.is_empty() {
395+
let data = lsp_ext::CompletionResolveData {
410396
position: tdpp.clone(),
411397
imports,
412398
version,
413399
trigger_character: completion_trigger_character,
414-
completion_item_index: item_index,
415400
};
416-
(ref_resolve_data, Some(to_value(resolve_data).unwrap()))
417-
} else {
418-
(None, None)
419-
};
401+
lsp_item.data = Some(to_value(data).unwrap());
402+
}
420403

421404
if let Some((label, indel, relevance)) = ref_match {
422-
let mut lsp_item_with_ref =
423-
lsp_types::CompletionItem { label, data: ref_resolve_data, ..lsp_item.clone() };
405+
let mut lsp_item_with_ref = lsp_types::CompletionItem { label, ..lsp_item.clone() };
424406
lsp_item_with_ref
425407
.additional_text_edits
426408
.get_or_insert_with(Default::default)
@@ -429,7 +411,6 @@ fn completion_item(
429411
acc.push(lsp_item_with_ref);
430412
};
431413

432-
lsp_item.data = resolve_data;
433414
acc.push(lsp_item);
434415

435416
fn set_score(

0 commit comments

Comments
 (0)