diff options
| author | Kirill Bulatov <mail4score@gmail.com> | 2024-11-25 23:30:08 +0200 |
|---|---|---|
| committer | Kirill Bulatov <mail4score@gmail.com> | 2024-11-25 23:30:08 +0200 |
| commit | 669bb6cfda507f7e69fde4d0b63d8c277a32948e (patch) | |
| tree | c31f005fdbdd2046a250225695403cbffaeca26c | |
| parent | 60c4250430b34b75ca2cfd43ccb04aa1d657dbde (diff) | |
| download | rust-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.
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( |
