Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 90b35a6

Browse files
committedNov 26, 2024
Auto merge of #133476 - SomeoneToIgnore:stable, r=BoxyUwU,davidbarsky
[stable(not yet) backport] Revert r-a completions breakage This PR revers recent completion-related changes in r-a, which caused nvim and helix to malfunction. Changes reverted: 1. rust-lang/rust-analyzer#18167 2. rust-lang/rust-analyzer#18247 3. rust-lang/rust-analyzer#18503 See rust-lang/rust-analyzer#18503 (comment) for more context cc `@BoxyUwU`
2 parents 8bfa986 + f7c53a2 commit 90b35a6

File tree

11 files changed

+77
-246
lines changed

11 files changed

+77
-246
lines changed
 

‎src/tools/rust-analyzer/crates/ide-completion/src/config.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use hir::ImportPathConfig;
88
use ide_db::{imports::insert_use::InsertUseConfig, SnippetCap};
99

10-
use crate::{snippet::Snippet, CompletionFieldsToResolve};
10+
use crate::snippet::Snippet;
1111

1212
#[derive(Clone, Debug, PartialEq, Eq)]
1313
pub struct CompletionConfig {
@@ -27,7 +27,6 @@ pub struct CompletionConfig {
2727
pub prefer_absolute: bool,
2828
pub snippets: Vec<Snippet>,
2929
pub limit: Option<usize>,
30-
pub fields_to_resolve: CompletionFieldsToResolve,
3130
}
3231

3332
#[derive(Clone, Debug, PartialEq, Eq)]

‎src/tools/rust-analyzer/crates/ide-completion/src/lib.rs

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -37,31 +37,6 @@ pub use crate::{
3737
snippet::{Snippet, SnippetScope},
3838
};
3939

40-
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
41-
pub struct CompletionFieldsToResolve {
42-
pub resolve_label_details: bool,
43-
pub resolve_tags: bool,
44-
pub resolve_detail: bool,
45-
pub resolve_documentation: bool,
46-
pub resolve_filter_text: bool,
47-
pub resolve_text_edit: bool,
48-
pub resolve_command: bool,
49-
}
50-
51-
impl CompletionFieldsToResolve {
52-
pub const fn empty() -> Self {
53-
Self {
54-
resolve_label_details: false,
55-
resolve_tags: false,
56-
resolve_detail: false,
57-
resolve_documentation: false,
58-
resolve_filter_text: false,
59-
resolve_text_edit: false,
60-
resolve_command: false,
61-
}
62-
}
63-
}
64-
6540
//FIXME: split the following feature into fine-grained features.
6641

6742
// Feature: Magic Completions

‎src/tools/rust-analyzer/crates/ide-completion/src/tests.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ use test_fixture::ChangeFixture;
3737
use test_utils::assert_eq_text;
3838

3939
use crate::{
40-
resolve_completion_edits, CallableSnippets, CompletionConfig, CompletionFieldsToResolve,
41-
CompletionItem, CompletionItemKind,
40+
resolve_completion_edits, CallableSnippets, CompletionConfig, CompletionItem,
41+
CompletionItemKind,
4242
};
4343

4444
/// Lots of basic item definitions
@@ -84,7 +84,6 @@ pub(crate) const TEST_CONFIG: CompletionConfig = CompletionConfig {
8484
prefer_absolute: false,
8585
snippets: Vec::new(),
8686
limit: None,
87-
fields_to_resolve: CompletionFieldsToResolve::empty(),
8887
};
8988

9089
pub(crate) fn completion_list(ra_fixture: &str) -> String {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,8 @@ pub use ide_assists::{
119119
Assist, AssistConfig, AssistId, AssistKind, AssistResolveStrategy, SingleResolve,
120120
};
121121
pub use ide_completion::{
122-
CallableSnippets, CompletionConfig, CompletionFieldsToResolve, CompletionItem,
123-
CompletionItemKind, CompletionRelevance, Snippet, SnippetScope,
122+
CallableSnippets, CompletionConfig, CompletionItem, CompletionItemKind, CompletionRelevance,
123+
Snippet, SnippetScope,
124124
};
125125
pub use ide_db::{
126126
base_db::{Cancelled, CrateGraph, CrateId, FileChange, SourceRoot, SourceRootId},

‎src/tools/rust-analyzer/crates/rust-analyzer/src/config.rs

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ use std::{
1212
use cfg::{CfgAtom, CfgDiff};
1313
use hir::Symbol;
1414
use ide::{
15-
AssistConfig, CallableSnippets, CompletionConfig, CompletionFieldsToResolve, DiagnosticsConfig,
16-
ExprFillDefaultMode, GenericParameterHints, HighlightConfig, HighlightRelatedConfig,
17-
HoverConfig, HoverDocFormat, InlayFieldsToResolve, InlayHintsConfig, JoinLinesConfig,
18-
MemoryLayoutHoverConfig, MemoryLayoutHoverRenderKind, Snippet, SnippetScope, SourceRootId,
15+
AssistConfig, CallableSnippets, CompletionConfig, DiagnosticsConfig, ExprFillDefaultMode,
16+
GenericParameterHints, HighlightConfig, HighlightRelatedConfig, HoverConfig, HoverDocFormat,
17+
InlayFieldsToResolve, InlayHintsConfig, JoinLinesConfig, MemoryLayoutHoverConfig,
18+
MemoryLayoutHoverRenderKind, Snippet, SnippetScope, SourceRootId,
1919
};
2020
use ide_db::{
2121
imports::insert_use::{ImportGranularity, InsertUseConfig, PrefixKind},
@@ -1393,7 +1393,6 @@ impl Config {
13931393
}
13941394

13951395
pub fn completion(&self, source_root: Option<SourceRootId>) -> CompletionConfig {
1396-
let client_capability_fields = self.completion_resolve_support_properties();
13971396
CompletionConfig {
13981397
enable_postfix_completions: self.completion_postfix_enable(source_root).to_owned(),
13991398
enable_imports_on_the_fly: self.completion_autoimport_enable(source_root).to_owned()
@@ -1418,15 +1417,6 @@ impl Config {
14181417
limit: self.completion_limit(source_root).to_owned(),
14191418
enable_term_search: self.completion_termSearch_enable(source_root).to_owned(),
14201419
term_search_fuel: self.completion_termSearch_fuel(source_root).to_owned() as u64,
1421-
fields_to_resolve: CompletionFieldsToResolve {
1422-
resolve_label_details: client_capability_fields.contains("labelDetails"),
1423-
resolve_tags: client_capability_fields.contains("tags"),
1424-
resolve_detail: client_capability_fields.contains("detail"),
1425-
resolve_documentation: client_capability_fields.contains("documentation"),
1426-
resolve_filter_text: client_capability_fields.contains("filterText"),
1427-
resolve_text_edit: client_capability_fields.contains("textEdit"),
1428-
resolve_command: client_capability_fields.contains("command"),
1429-
},
14301420
}
14311421
}
14321422

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

Lines changed: 29 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ use std::{
1010
use anyhow::Context;
1111

1212
use ide::{
13-
AnnotationConfig, AssistKind, AssistResolveStrategy, Cancellable, CompletionFieldsToResolve,
14-
FilePosition, FileRange, HoverAction, HoverGotoTypeData, InlayFieldsToResolve, Query,
15-
RangeInfo, ReferenceCategory, Runnable, RunnableKind, SingleResolve, SourceChange, TextEdit,
13+
AnnotationConfig, AssistKind, AssistResolveStrategy, Cancellable, FilePosition, FileRange,
14+
HoverAction, HoverGotoTypeData, InlayFieldsToResolve, Query, RangeInfo, ReferenceCategory,
15+
Runnable, RunnableKind, SingleResolve, SourceChange, TextEdit,
1616
};
1717
use ide_db::SymbolKind;
1818
use itertools::Itertools;
@@ -1019,11 +1019,9 @@ pub(crate) fn handle_completion(
10191019

10201020
let items = to_proto::completion_items(
10211021
&snap.config,
1022-
&completion_config.fields_to_resolve,
10231022
&line_index,
10241023
snap.file_version(position.file_id),
10251024
text_document_position,
1026-
completion_trigger_character,
10271025
items,
10281026
);
10291027

@@ -1056,68 +1054,36 @@ pub(crate) fn handle_completion_resolve(
10561054
};
10571055
let source_root = snap.analysis.source_root_id(file_id)?;
10581056

1059-
let mut forced_resolve_completions_config = snap.config.completion(Some(source_root));
1060-
forced_resolve_completions_config.fields_to_resolve = CompletionFieldsToResolve::empty();
1061-
1062-
let position = FilePosition { file_id, offset };
1063-
let Some(resolved_completions) = snap.analysis.completions(
1064-
&forced_resolve_completions_config,
1065-
position,
1066-
resolve_data.trigger_character,
1067-
)?
1068-
else {
1069-
return Ok(original_completion);
1070-
};
1071-
let mut resolved_completions = to_proto::completion_items(
1072-
&snap.config,
1073-
&forced_resolve_completions_config.fields_to_resolve,
1074-
&line_index,
1075-
snap.file_version(position.file_id),
1076-
resolve_data.position,
1077-
resolve_data.trigger_character,
1078-
resolved_completions,
1079-
);
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-
};
1057+
let additional_edits = snap
1058+
.analysis
1059+
.resolve_completion_edits(
1060+
&snap.config.completion(Some(source_root)),
1061+
FilePosition { file_id, offset },
1062+
resolve_data
1063+
.imports
1064+
.into_iter()
1065+
.map(|import| (import.full_import_path, import.imported_name)),
1066+
)?
1067+
.into_iter()
1068+
.flat_map(|edit| edit.into_iter().map(|indel| to_proto::text_edit(&line_index, indel)))
1069+
.collect::<Vec<_>>();
10871070

1088-
if !resolve_data.imports.is_empty() {
1089-
let additional_edits = snap
1090-
.analysis
1091-
.resolve_completion_edits(
1092-
&forced_resolve_completions_config,
1093-
position,
1094-
resolve_data
1095-
.imports
1096-
.into_iter()
1097-
.map(|import| (import.full_import_path, import.imported_name)),
1098-
)?
1099-
.into_iter()
1100-
.flat_map(|edit| edit.into_iter().map(|indel| to_proto::text_edit(&line_index, indel)))
1101-
.collect::<Vec<_>>();
1102-
1103-
if !all_edits_are_disjoint(&resolved_completion, &additional_edits) {
1104-
return Err(LspError::new(
1105-
ErrorCode::InternalError as i32,
1106-
"Import edit overlaps with the original completion edits, this is not LSP-compliant"
1107-
.into(),
1108-
)
1109-
.into());
1110-
}
1071+
if !all_edits_are_disjoint(&original_completion, &additional_edits) {
1072+
return Err(LspError::new(
1073+
ErrorCode::InternalError as i32,
1074+
"Import edit overlaps with the original completion edits, this is not LSP-compliant"
1075+
.into(),
1076+
)
1077+
.into());
1078+
}
11111079

1112-
if let Some(original_additional_edits) = resolved_completion.additional_text_edits.as_mut()
1113-
{
1114-
original_additional_edits.extend(additional_edits)
1115-
} else {
1116-
resolved_completion.additional_text_edits = Some(additional_edits);
1117-
}
1080+
if let Some(original_additional_edits) = original_completion.additional_text_edits.as_mut() {
1081+
original_additional_edits.extend(additional_edits)
1082+
} else {
1083+
original_completion.additional_text_edits = Some(additional_edits);
11181084
}
11191085

1120-
Ok(resolved_completion)
1086+
Ok(original_completion)
11211087
}
11221088

11231089
pub(crate) fn handle_folding_range(

‎src/tools/rust-analyzer/crates/rust-analyzer/src/integrated_benchmarks.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
1313
use hir::ChangeWithProcMacros;
1414
use ide::{
15-
AnalysisHost, CallableSnippets, CompletionConfig, CompletionFieldsToResolve, DiagnosticsConfig,
16-
FilePosition, TextSize,
15+
AnalysisHost, CallableSnippets, CompletionConfig, DiagnosticsConfig, FilePosition, TextSize,
1716
};
1817
use ide_db::{
1918
imports::insert_use::{ImportGranularity, InsertUseConfig},
@@ -173,7 +172,6 @@ fn integrated_completion_benchmark() {
173172
snippets: Vec::new(),
174173
limit: None,
175174
add_semicolon_to_unit: true,
176-
fields_to_resolve: CompletionFieldsToResolve::empty(),
177175
};
178176
let position =
179177
FilePosition { file_id, offset: TextSize::try_from(completion_offset).unwrap() };
@@ -221,7 +219,6 @@ fn integrated_completion_benchmark() {
221219
snippets: Vec::new(),
222220
limit: None,
223221
add_semicolon_to_unit: true,
224-
fields_to_resolve: CompletionFieldsToResolve::empty(),
225222
};
226223
let position =
227224
FilePosition { file_id, offset: TextSize::try_from(completion_offset).unwrap() };
@@ -267,7 +264,6 @@ fn integrated_completion_benchmark() {
267264
snippets: Vec::new(),
268265
limit: None,
269266
add_semicolon_to_unit: true,
270-
fields_to_resolve: CompletionFieldsToResolve::empty(),
271267
};
272268
let position =
273269
FilePosition { file_id, offset: TextSize::try_from(completion_offset).unwrap() };

‎src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/capabilities.rs

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ impl ClientCapabilities {
448448
.unwrap_or_default()
449449
}
450450

451-
pub fn inlay_hint_resolve_support_properties(&self) -> FxHashSet<&str> {
451+
pub fn inlay_hint_resolve_support_properties(&self) -> FxHashSet<String> {
452452
self.0
453453
.text_document
454454
.as_ref()
@@ -457,22 +457,8 @@ impl ClientCapabilities {
457457
.map(|inlay_resolve| inlay_resolve.properties.iter())
458458
.into_iter()
459459
.flatten()
460-
.map(|s| s.as_str())
461-
.collect()
462-
}
463-
464-
pub fn completion_resolve_support_properties(&self) -> FxHashSet<&str> {
465-
self.0
466-
.text_document
467-
.as_ref()
468-
.and_then(|text| text.completion.as_ref())
469-
.and_then(|completion_caps| completion_caps.completion_item.as_ref())
470-
.and_then(|completion_item_caps| completion_item_caps.resolve_support.as_ref())
471-
.map(|resolve_support| resolve_support.properties.iter())
472-
.into_iter()
473-
.flatten()
474-
.map(|s| s.as_str())
475-
.collect()
460+
.cloned()
461+
.collect::<FxHashSet<_>>()
476462
}
477463

478464
pub fn hover_markdown_support(&self) -> bool {

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -825,8 +825,6 @@ pub struct CompletionResolveData {
825825
pub position: lsp_types::TextDocumentPositionParams,
826826
pub imports: Vec<CompletionImport>,
827827
pub version: Option<i32>,
828-
pub trigger_character: Option<char>,
829-
pub completion_item_index: usize,
830828
}
831829

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

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

Lines changed: 34 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ use std::{
66
};
77

88
use ide::{
9-
Annotation, AnnotationKind, Assist, AssistKind, Cancellable, CompletionFieldsToResolve,
10-
CompletionItem, CompletionItemKind, CompletionRelevance, Documentation, FileId, FileRange,
11-
FileSystemEdit, Fold, FoldKind, Highlight, HlMod, HlOperator, HlPunct, HlRange, HlTag, Indel,
9+
Annotation, AnnotationKind, Assist, AssistKind, Cancellable, CompletionItem,
10+
CompletionItemKind, CompletionRelevance, Documentation, FileId, FileRange, FileSystemEdit,
11+
Fold, FoldKind, Highlight, HlMod, HlOperator, HlPunct, HlRange, HlTag, Indel,
1212
InlayFieldsToResolve, InlayHint, InlayHintLabel, InlayHintLabelPart, InlayKind, Markup,
1313
NavigationTarget, ReferenceCategory, RenameError, Runnable, Severity, SignatureHelp,
1414
SnippetEdit, SourceChange, StructureNodeKind, SymbolKind, TextEdit, TextRange, TextSize,
@@ -227,11 +227,9 @@ pub(crate) fn snippet_text_edit_vec(
227227

228228
pub(crate) fn completion_items(
229229
config: &Config,
230-
fields_to_resolve: &CompletionFieldsToResolve,
231230
line_index: &LineIndex,
232231
version: Option<i32>,
233232
tdpp: lsp_types::TextDocumentPositionParams,
234-
completion_trigger_character: Option<char>,
235233
mut items: Vec<CompletionItem>,
236234
) -> Vec<lsp_types::CompletionItem> {
237235
if config.completion_hide_deprecated() {
@@ -241,17 +239,7 @@ pub(crate) fn completion_items(
241239
let max_relevance = items.iter().map(|it| it.relevance.score()).max().unwrap_or_default();
242240
let mut res = Vec::with_capacity(items.len());
243241
for item in items {
244-
completion_item(
245-
&mut res,
246-
config,
247-
fields_to_resolve,
248-
line_index,
249-
version,
250-
&tdpp,
251-
max_relevance,
252-
completion_trigger_character,
253-
item,
254-
);
242+
completion_item(&mut res, config, line_index, version, &tdpp, max_relevance, item);
255243
}
256244

257245
if let Some(limit) = config.completion(None).limit {
@@ -265,33 +253,21 @@ pub(crate) fn completion_items(
265253
fn completion_item(
266254
acc: &mut Vec<lsp_types::CompletionItem>,
267255
config: &Config,
268-
fields_to_resolve: &CompletionFieldsToResolve,
269256
line_index: &LineIndex,
270257
version: Option<i32>,
271258
tdpp: &lsp_types::TextDocumentPositionParams,
272259
max_relevance: u32,
273-
completion_trigger_character: Option<char>,
274260
item: CompletionItem,
275261
) {
276262
let insert_replace_support = config.insert_replace_support().then_some(tdpp.position);
277263
let ref_match = item.ref_match();
264+
let lookup = item.lookup().to_owned();
278265

279266
let mut additional_text_edits = Vec::new();
280-
let mut something_to_resolve = false;
281267

282-
let filter_text = if fields_to_resolve.resolve_filter_text {
283-
something_to_resolve = !item.lookup().is_empty();
284-
None
285-
} else {
286-
Some(item.lookup().to_owned())
287-
};
288-
289-
let text_edit = if fields_to_resolve.resolve_text_edit {
290-
something_to_resolve = true;
291-
None
292-
} else {
293-
// LSP does not allow arbitrary edits in completion, so we have to do a
294-
// non-trivial mapping here.
268+
// LSP does not allow arbitrary edits in completion, so we have to do a
269+
// non-trivial mapping here.
270+
let text_edit = {
295271
let mut text_edit = None;
296272
let source_range = item.source_range;
297273
for indel in item.text_edit {
@@ -314,49 +290,25 @@ fn completion_item(
314290
additional_text_edits.push(text_edit);
315291
}
316292
}
317-
Some(text_edit.unwrap())
293+
text_edit.unwrap()
318294
};
319295

320296
let insert_text_format = item.is_snippet.then_some(lsp_types::InsertTextFormat::SNIPPET);
321-
let tags = if fields_to_resolve.resolve_tags {
322-
something_to_resolve = item.deprecated;
323-
None
324-
} else {
325-
item.deprecated.then(|| vec![lsp_types::CompletionItemTag::DEPRECATED])
326-
};
297+
let tags = item.deprecated.then(|| vec![lsp_types::CompletionItemTag::DEPRECATED]);
327298
let command = if item.trigger_call_info && config.client_commands().trigger_parameter_hints {
328-
if fields_to_resolve.resolve_command {
329-
something_to_resolve = true;
330-
None
331-
} else {
332-
Some(command::trigger_parameter_hints())
333-
}
299+
Some(command::trigger_parameter_hints())
334300
} else {
335301
None
336302
};
337303

338-
let detail = if fields_to_resolve.resolve_detail {
339-
something_to_resolve = item.detail.is_some();
340-
None
341-
} else {
342-
item.detail
343-
};
344-
345-
let documentation = if fields_to_resolve.resolve_documentation {
346-
something_to_resolve = item.documentation.is_some();
347-
None
348-
} else {
349-
item.documentation.map(documentation)
350-
};
351-
352304
let mut lsp_item = lsp_types::CompletionItem {
353305
label: item.label.to_string(),
354-
detail,
355-
filter_text,
306+
detail: item.detail,
307+
filter_text: Some(lookup),
356308
kind: Some(completion_item_kind(item.kind)),
357-
text_edit,
309+
text_edit: Some(text_edit),
358310
additional_text_edits: Some(additional_text_edits),
359-
documentation,
311+
documentation: item.documentation.map(documentation),
360312
deprecated: Some(item.deprecated),
361313
tags,
362314
command,
@@ -365,62 +317,33 @@ fn completion_item(
365317
};
366318

367319
if config.completion_label_details_support() {
368-
if fields_to_resolve.resolve_label_details {
369-
something_to_resolve = true;
370-
} else {
371-
lsp_item.label_details = Some(lsp_types::CompletionItemLabelDetails {
372-
detail: item.label_detail.as_ref().map(ToString::to_string),
373-
description: lsp_item.detail.clone(),
374-
});
375-
}
320+
lsp_item.label_details = Some(lsp_types::CompletionItemLabelDetails {
321+
detail: item.label_detail.as_ref().map(ToString::to_string),
322+
description: lsp_item.detail.clone(),
323+
});
376324
} else if let Some(label_detail) = item.label_detail {
377325
lsp_item.label.push_str(label_detail.as_str());
378326
}
379327

380328
set_score(&mut lsp_item, max_relevance, item.relevance);
381329

382-
let imports =
383-
if config.completion(None).enable_imports_on_the_fly && !item.import_to_add.is_empty() {
384-
item.import_to_add
385-
.into_iter()
386-
.map(|(import_path, import_name)| lsp_ext::CompletionImport {
387-
full_import_path: import_path,
388-
imported_name: import_name,
389-
})
390-
.collect()
391-
} else {
392-
Vec::new()
393-
};
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 {
410-
position: tdpp.clone(),
411-
imports,
412-
version,
413-
trigger_character: completion_trigger_character,
414-
completion_item_index: item_index,
415-
};
416-
(ref_resolve_data, Some(to_value(resolve_data).unwrap()))
417-
} else {
418-
(None, None)
419-
};
330+
if config.completion(None).enable_imports_on_the_fly && !item.import_to_add.is_empty() {
331+
let imports = item
332+
.import_to_add
333+
.into_iter()
334+
.map(|(import_path, import_name)| lsp_ext::CompletionImport {
335+
full_import_path: import_path,
336+
imported_name: import_name,
337+
})
338+
.collect::<Vec<_>>();
339+
if !imports.is_empty() {
340+
let data = lsp_ext::CompletionResolveData { position: tdpp.clone(), imports, version };
341+
lsp_item.data = Some(to_value(data).unwrap());
342+
}
343+
}
420344

421345
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() };
346+
let mut lsp_item_with_ref = lsp_types::CompletionItem { label, ..lsp_item.clone() };
424347
lsp_item_with_ref
425348
.additional_text_edits
426349
.get_or_insert_with(Default::default)
@@ -429,7 +352,6 @@ fn completion_item(
429352
acc.push(lsp_item_with_ref);
430353
};
431354

432-
lsp_item.data = resolve_data;
433355
acc.push(lsp_item);
434356

435357
fn set_score(

‎src/tools/rust-analyzer/docs/dev/lsp-extensions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!---
2-
lsp/ext.rs hash: 96f88b7a5d0080c6
2+
lsp/ext.rs hash: 6292ee8d88d4c9ec
33
44
If you need to change the above hash to make the test pass, please check if you
55
need to adjust this doc as well and ping this issue:

0 commit comments

Comments
 (0)
Please sign in to comment.