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

+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
@@ -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

+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::{
126126
base_db::{Cancelled, CrateGraph, CrateId, FileChange, SourceRoot, SourceRootId},

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

+4-14
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

+29-63
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

+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
@@ -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

-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)]
There was a problem loading the remainder of the diff.

0 commit comments

Comments
 (0)
Failed to load comments.