Skip to content

Commit 90b35a6

Browse files
committed
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)]

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy