Skip to content

Commit 7ae4b8b

Browse files
bors[bot]matklad
andauthored
Merge #7183
7183: YAGNI active_resolve_capabilities r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2 parents ae2ea10 + 6e87828 commit 7ae4b8b

File tree

7 files changed

+32
-78
lines changed

7 files changed

+32
-78
lines changed

crates/completion/src/completions/unqualified_path.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ pub(crate) fn complete_unqualified_path(acc: &mut Completions, ctx: &CompletionC
4646
acc.add_resolution(ctx, name.to_string(), &res)
4747
});
4848

49-
if ctx.config.enable_autoimport_completions && ctx.config.resolve_additional_edits_lazily() {
49+
if ctx.config.enable_autoimport_completions {
5050
fuzzy_completion(acc, ctx);
5151
}
5252
}
@@ -206,11 +206,7 @@ mod tests {
206206
}
207207

208208
fn fuzzy_completion_config() -> CompletionConfig {
209-
let mut completion_config = CompletionConfig::default();
210-
completion_config
211-
.active_resolve_capabilities
212-
.insert(crate::CompletionResolveCapability::AdditionalTextEdits);
213-
completion_config
209+
CompletionConfig::default()
214210
}
215211

216212
#[test]

crates/completion/src/config.rs

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
//! completions if we are allowed to.
66
77
use ide_db::helpers::insert_use::MergeBehavior;
8-
use rustc_hash::FxHashSet;
98

109
#[derive(Clone, Debug, PartialEq, Eq)]
1110
pub struct CompletionConfig {
@@ -15,32 +14,12 @@ pub struct CompletionConfig {
1514
pub add_call_argument_snippets: bool,
1615
pub snippet_cap: Option<SnippetCap>,
1716
pub merge: Option<MergeBehavior>,
18-
/// A set of capabilities, enabled on the client and supported on the server.
19-
pub active_resolve_capabilities: FxHashSet<CompletionResolveCapability>,
20-
}
21-
22-
/// A resolve capability, supported on the server.
23-
/// If the client registers any completion resolve capabilities,
24-
/// the server is able to render completion items' corresponding fields later,
25-
/// not during an initial completion item request.
26-
/// See https://github.com/rust-analyzer/rust-analyzer/issues/6366 for more details.
27-
#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq)]
28-
pub enum CompletionResolveCapability {
29-
Documentation,
30-
Detail,
31-
AdditionalTextEdits,
3217
}
3318

3419
impl CompletionConfig {
3520
pub fn allow_snippets(&mut self, yes: bool) {
3621
self.snippet_cap = if yes { Some(SnippetCap { _private: () }) } else { None }
3722
}
38-
39-
/// Whether the completions' additional edits are calculated when sending an initional completions list
40-
/// or later, in a separate resolve request.
41-
pub fn resolve_additional_edits_lazily(&self) -> bool {
42-
self.active_resolve_capabilities.contains(&CompletionResolveCapability::AdditionalTextEdits)
43-
}
4423
}
4524

4625
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
@@ -57,7 +36,6 @@ impl Default for CompletionConfig {
5736
add_call_argument_snippets: true,
5837
snippet_cap: Some(SnippetCap { _private: () }),
5938
merge: Some(MergeBehavior::Full),
60-
active_resolve_capabilities: FxHashSet::default(),
6139
}
6240
}
6341
}

crates/completion/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use text_edit::TextEdit;
2020
use crate::{completions::Completions, context::CompletionContext, item::CompletionKind};
2121

2222
pub use crate::{
23-
config::{CompletionConfig, CompletionResolveCapability},
23+
config::CompletionConfig,
2424
item::{CompletionItem, CompletionItemKind, CompletionScore, ImportEdit, InsertTextFormat},
2525
};
2626

crates/ide/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ pub use crate::{
8282
};
8383
pub use assists::{Assist, AssistConfig, AssistId, AssistKind};
8484
pub use completion::{
85-
CompletionConfig, CompletionItem, CompletionItemKind, CompletionResolveCapability,
86-
CompletionScore, ImportEdit, InsertTextFormat,
85+
CompletionConfig, CompletionItem, CompletionItemKind, CompletionScore, ImportEdit,
86+
InsertTextFormat,
8787
};
8888
pub use hir::{Documentation, Semantics};
8989
pub use ide_db::base_db::{

crates/rust-analyzer/src/caps.rs

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
//! Advertizes the capabilities of the LSP Server.
22
use std::env;
33

4-
use ide::CompletionResolveCapability;
54
use lsp_types::{
65
CallHierarchyServerCapability, ClientCapabilities, CodeActionKind, CodeActionOptions,
76
CodeActionProviderCapability, CodeLensOptions, CompletionOptions,
@@ -14,7 +13,6 @@ use lsp_types::{
1413
WorkDoneProgressOptions, WorkspaceFileOperationsServerCapabilities,
1514
WorkspaceServerCapabilities,
1615
};
17-
use rustc_hash::FxHashSet;
1816
use serde_json::json;
1917

2018
use crate::semantic_tokens;
@@ -118,37 +116,31 @@ pub fn server_capabilities(client_caps: &ClientCapabilities) -> ServerCapabiliti
118116
}
119117

120118
fn completions_resolve_provider(client_caps: &ClientCapabilities) -> Option<bool> {
121-
if enabled_completions_resolve_capabilities(client_caps)?.is_empty() {
119+
if completion_item_edit_resolve(client_caps) {
120+
Some(true)
121+
} else {
122122
log::info!("No `additionalTextEdits` completion resolve capability was found in the client capabilities, autoimport completion is disabled");
123123
None
124-
} else {
125-
Some(true)
126124
}
127125
}
128126

129127
/// Parses client capabilities and returns all completion resolve capabilities rust-analyzer supports.
130-
pub(crate) fn enabled_completions_resolve_capabilities(
131-
caps: &ClientCapabilities,
132-
) -> Option<FxHashSet<CompletionResolveCapability>> {
133-
Some(
134-
caps.text_document
135-
.as_ref()?
136-
.completion
137-
.as_ref()?
138-
.completion_item
139-
.as_ref()?
140-
.resolve_support
141-
.as_ref()?
142-
.properties
143-
.iter()
144-
.filter_map(|cap_string| match cap_string.as_str() {
145-
"additionalTextEdits" => Some(CompletionResolveCapability::AdditionalTextEdits),
146-
"detail" => Some(CompletionResolveCapability::Detail),
147-
"documentation" => Some(CompletionResolveCapability::Documentation),
148-
_unsupported => None,
149-
})
150-
.collect(),
151-
)
128+
pub(crate) fn completion_item_edit_resolve(caps: &ClientCapabilities) -> bool {
129+
(|| {
130+
Some(
131+
caps.text_document
132+
.as_ref()?
133+
.completion
134+
.as_ref()?
135+
.completion_item
136+
.as_ref()?
137+
.resolve_support
138+
.as_ref()?
139+
.properties
140+
.iter()
141+
.any(|cap_string| cap_string.as_str() == "additionalTextEdits"),
142+
)
143+
})() == Some(true)
152144
}
153145

154146
fn code_action_capabilities(client_caps: &ClientCapabilities) -> CodeActionProviderCapability {

crates/rust-analyzer/src/config.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use rustc_hash::FxHashSet;
2020
use serde::{de::DeserializeOwned, Deserialize};
2121
use vfs::AbsPathBuf;
2222

23-
use crate::{caps::enabled_completions_resolve_capabilities, diagnostics::DiagnosticsMapConfig};
23+
use crate::{caps::completion_item_edit_resolve, diagnostics::DiagnosticsMapConfig};
2424

2525
config_data! {
2626
struct ConfigData {
@@ -536,12 +536,11 @@ impl Config {
536536
pub fn completion(&self) -> CompletionConfig {
537537
let mut res = CompletionConfig::default();
538538
res.enable_postfix_completions = self.data.completion_postfix_enable;
539-
res.enable_autoimport_completions = self.data.completion_autoimport_enable;
539+
res.enable_autoimport_completions =
540+
self.data.completion_autoimport_enable && completion_item_edit_resolve(&self.caps);
540541
res.add_call_parenthesis = self.data.completion_addCallParenthesis;
541542
res.add_call_argument_snippets = self.data.completion_addCallArgumentSnippets;
542543
res.merge = self.merge_behavior();
543-
res.active_resolve_capabilities =
544-
enabled_completions_resolve_capabilities(&self.caps).unwrap_or_default();
545544

546545
res.allow_snippets(try_or!(
547546
self.caps

crates/rust-analyzer/src/handlers.rs

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@ use std::{
99
};
1010

1111
use ide::{
12-
CompletionResolveCapability, FileId, FilePosition, FileRange, HoverAction, HoverGotoTypeData,
13-
LineIndex, NavigationTarget, Query, RangeInfo, Runnable, RunnableKind, SearchScope,
14-
SourceChange, SymbolKind, TextEdit,
12+
FileId, FilePosition, FileRange, HoverAction, HoverGotoTypeData, LineIndex, NavigationTarget,
13+
Query, RangeInfo, Runnable, RunnableKind, SearchScope, SourceChange, SymbolKind, TextEdit,
1514
};
1615
use itertools::Itertools;
1716
use lsp_server::ErrorCode;
@@ -634,10 +633,9 @@ pub(crate) fn handle_completion(
634633
let mut new_completion_items =
635634
to_proto::completion_item(&line_index, line_endings, item.clone());
636635

637-
if completion_config.resolve_additional_edits_lazily() {
636+
if completion_config.enable_autoimport_completions {
638637
for new_item in &mut new_completion_items {
639-
let _ = fill_resolve_data(&mut new_item.data, &item, &text_document_position)
640-
.take();
638+
fill_resolve_data(&mut new_item.data, &item, &text_document_position);
641639
}
642640
}
643641

@@ -663,15 +661,6 @@ pub(crate) fn handle_completion_resolve(
663661
.into());
664662
}
665663

666-
// FIXME resolve the other capabilities also?
667-
let completion_config = &snap.config.completion();
668-
if !completion_config
669-
.active_resolve_capabilities
670-
.contains(&CompletionResolveCapability::AdditionalTextEdits)
671-
{
672-
return Ok(original_completion);
673-
}
674-
675664
let resolve_data = match original_completion
676665
.data
677666
.take()
@@ -690,7 +679,7 @@ pub(crate) fn handle_completion_resolve(
690679
let additional_edits = snap
691680
.analysis
692681
.resolve_completion_edits(
693-
&completion_config,
682+
&snap.config.completion(),
694683
FilePosition { file_id, offset },
695684
&resolve_data.full_import_path,
696685
resolve_data.imported_name,

0 commit comments

Comments
 (0)