Skip to content

Commit ea5e5ca

Browse files
committed
Auto merge of rust-lang#133546 - SomeoneToIgnore:beta, r=Mark-Simulacrum
[beta] Revert r-a completions breakage As suggested by `@cuviper` in https://rust-lang.zulipchat.com/#narrow/channel/185405-t-compiler.2Frust-analyzer/topic/Completion.20IDs/near/484770216 Repeats the revert to `stable` rust-lang#133476 using https://patch-diff.githubusercontent.com/raw/rust-lang/rust/pull/133476.diff cc `@BoxyUwU` `@workingjubilee`
2 parents 0f13036 + 8d3b048 commit ea5e5ca

File tree

11 files changed

+74
-243
lines changed

11 files changed

+74
-243
lines changed

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

+1-2
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

-25
Original file line numberDiff line numberDiff line change
@@ -38,31 +38,6 @@ pub use crate::{
3838
snippet::{Snippet, SnippetScope},
3939
};
4040

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

6843
// Feature: Magic Completions

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

+2-3
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

+2-2
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::text_edit::{Indel, TextEdit};
126126
pub use ide_db::{

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

+1-11
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use cfg::{CfgAtom, CfgDiff};
1313
use hir::Symbol;
1414
use ide::{
1515
AssistConfig, CallHierarchyConfig, CallableSnippets, CompletionConfig,
16-
CompletionFieldsToResolve, DiagnosticsConfig, ExprFillDefaultMode, GenericParameterHints,
16+
DiagnosticsConfig, ExprFillDefaultMode, GenericParameterHints,
1717
HighlightConfig, HighlightRelatedConfig, HoverConfig, HoverDocFormat, InlayFieldsToResolve,
1818
InlayHintsConfig, JoinLinesConfig, MemoryLayoutHoverConfig, MemoryLayoutHoverRenderKind,
1919
Snippet, SnippetScope, SourceRootId,
@@ -1418,7 +1418,6 @@ impl Config {
14181418
}
14191419

14201420
pub fn completion(&self, source_root: Option<SourceRootId>) -> CompletionConfig {
1421-
let client_capability_fields = self.completion_resolve_support_properties();
14221421
CompletionConfig {
14231422
enable_postfix_completions: self.completion_postfix_enable(source_root).to_owned(),
14241423
enable_imports_on_the_fly: self.completion_autoimport_enable(source_root).to_owned()
@@ -1443,15 +1442,6 @@ impl Config {
14431442
limit: self.completion_limit(source_root).to_owned(),
14441443
enable_term_search: self.completion_termSearch_enable(source_root).to_owned(),
14451444
term_search_fuel: self.completion_termSearch_fuel(source_root).to_owned() as u64,
1446-
fields_to_resolve: CompletionFieldsToResolve {
1447-
resolve_label_details: client_capability_fields.contains("labelDetails"),
1448-
resolve_tags: client_capability_fields.contains("tags"),
1449-
resolve_detail: client_capability_fields.contains("detail"),
1450-
resolve_documentation: client_capability_fields.contains("documentation"),
1451-
resolve_filter_text: client_capability_fields.contains("filterText"),
1452-
resolve_text_edit: client_capability_fields.contains("textEdit"),
1453-
resolve_command: client_capability_fields.contains("command"),
1454-
},
14551445
}
14561446
}
14571447

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

+29-63
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ use std::{
1111
use anyhow::Context;
1212

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

10871087
let items = to_proto::completion_items(
10881088
&snap.config,
1089-
&completion_config.fields_to_resolve,
10901089
&line_index,
10911090
snap.file_version(position.file_id),
10921091
text_document_position,
1093-
completion_trigger_character,
10941092
items,
10951093
);
10961094

@@ -1123,68 +1121,36 @@ pub(crate) fn handle_completion_resolve(
11231121
};
11241122
let source_root = snap.analysis.source_root_id(file_id)?;
11251123

1126-
let mut forced_resolve_completions_config = snap.config.completion(Some(source_root));
1127-
forced_resolve_completions_config.fields_to_resolve = CompletionFieldsToResolve::empty();
1128-
1129-
let position = FilePosition { file_id, offset };
1130-
let Some(resolved_completions) = snap.analysis.completions(
1131-
&forced_resolve_completions_config,
1132-
position,
1133-
resolve_data.trigger_character,
1134-
)?
1135-
else {
1136-
return Ok(original_completion);
1137-
};
1138-
let mut resolved_completions = to_proto::completion_items(
1139-
&snap.config,
1140-
&forced_resolve_completions_config.fields_to_resolve,
1141-
&line_index,
1142-
snap.file_version(position.file_id),
1143-
resolve_data.position,
1144-
resolve_data.trigger_character,
1145-
resolved_completions,
1146-
);
1147-
1148-
let mut resolved_completion =
1149-
if resolved_completions.get(resolve_data.completion_item_index).is_some() {
1150-
resolved_completions.swap_remove(resolve_data.completion_item_index)
1151-
} else {
1152-
return Ok(original_completion);
1153-
};
1124+
let additional_edits = snap
1125+
.analysis
1126+
.resolve_completion_edits(
1127+
&snap.config.completion(Some(source_root)),
1128+
FilePosition { file_id, offset },
1129+
resolve_data
1130+
.imports
1131+
.into_iter()
1132+
.map(|import| (import.full_import_path, import.imported_name)),
1133+
)?
1134+
.into_iter()
1135+
.flat_map(|edit| edit.into_iter().map(|indel| to_proto::text_edit(&line_index, indel)))
1136+
.collect::<Vec<_>>();
11541137

1155-
if !resolve_data.imports.is_empty() {
1156-
let additional_edits = snap
1157-
.analysis
1158-
.resolve_completion_edits(
1159-
&forced_resolve_completions_config,
1160-
position,
1161-
resolve_data
1162-
.imports
1163-
.into_iter()
1164-
.map(|import| (import.full_import_path, import.imported_name)),
1165-
)?
1166-
.into_iter()
1167-
.flat_map(|edit| edit.into_iter().map(|indel| to_proto::text_edit(&line_index, indel)))
1168-
.collect::<Vec<_>>();
1169-
1170-
if !all_edits_are_disjoint(&resolved_completion, &additional_edits) {
1171-
return Err(LspError::new(
1172-
ErrorCode::InternalError as i32,
1173-
"Import edit overlaps with the original completion edits, this is not LSP-compliant"
1174-
.into(),
1175-
)
1176-
.into());
1177-
}
1138+
if !all_edits_are_disjoint(&original_completion, &additional_edits) {
1139+
return Err(LspError::new(
1140+
ErrorCode::InternalError as i32,
1141+
"Import edit overlaps with the original completion edits, this is not LSP-compliant"
1142+
.into(),
1143+
)
1144+
.into());
1145+
}
11781146

1179-
if let Some(original_additional_edits) = resolved_completion.additional_text_edits.as_mut()
1180-
{
1181-
original_additional_edits.extend(additional_edits)
1182-
} else {
1183-
resolved_completion.additional_text_edits = Some(additional_edits);
1184-
}
1147+
if let Some(original_additional_edits) = original_completion.additional_text_edits.as_mut() {
1148+
original_additional_edits.extend(additional_edits)
1149+
} else {
1150+
original_completion.additional_text_edits = Some(additional_edits);
11851151
}
11861152

1187-
Ok(resolved_completion)
1153+
Ok(original_completion)
11881154
}
11891155

11901156
pub(crate) fn handle_folding_range(

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

+1-5
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

+3-17
Original file line numberDiff line numberDiff line change
@@ -468,7 +468,7 @@ impl ClientCapabilities {
468468
.unwrap_or_default()
469469
}
470470

471-
pub fn inlay_hint_resolve_support_properties(&self) -> FxHashSet<&str> {
471+
pub fn inlay_hint_resolve_support_properties(&self) -> FxHashSet<String> {
472472
self.0
473473
.text_document
474474
.as_ref()
@@ -477,22 +477,8 @@ impl ClientCapabilities {
477477
.map(|inlay_resolve| inlay_resolve.properties.iter())
478478
.into_iter()
479479
.flatten()
480-
.map(|s| s.as_str())
481-
.collect()
482-
}
483-
484-
pub fn completion_resolve_support_properties(&self) -> FxHashSet<&str> {
485-
self.0
486-
.text_document
487-
.as_ref()
488-
.and_then(|text| text.completion.as_ref())
489-
.and_then(|completion_caps| completion_caps.completion_item.as_ref())
490-
.and_then(|completion_item_caps| completion_item_caps.resolve_support.as_ref())
491-
.map(|resolve_support| resolve_support.properties.iter())
492-
.into_iter()
493-
.flatten()
494-
.map(|s| s.as_str())
495-
.collect()
480+
.cloned()
481+
.collect::<FxHashSet<_>>()
496482
}
497483

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

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

-2
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)]

0 commit comments

Comments
 (0)