Skip to content

Commit 50e06ee

Browse files
Refactor the code
1 parent d9bd1f1 commit 50e06ee

File tree

11 files changed

+48
-34
lines changed

11 files changed

+48
-34
lines changed

crates/completion/src/config.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,15 @@ pub struct CompletionConfig {
1515
pub add_call_argument_snippets: bool,
1616
pub snippet_cap: Option<SnippetCap>,
1717
pub merge: Option<MergeBehaviour>,
18+
/// A set of capabilities, enabled on the cliend and supported on the server.
1819
pub resolve_capabilities: FxHashSet<CompletionResolveCapability>,
1920
}
2021

22+
/// A resolve capability, supported on a server.
23+
/// If the client registers any of those in its 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.
2127
#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq)]
2228
pub enum CompletionResolveCapability {
2329
Documentation,
@@ -30,7 +36,8 @@ impl CompletionConfig {
3036
self.snippet_cap = if yes { Some(SnippetCap { _private: () }) } else { None }
3137
}
3238

33-
pub fn should_resolve_immediately(&self) -> bool {
39+
/// Whether the completions' additional edits are calculated later, during a resolve request or not.
40+
pub fn should_resolve_additional_edits_immediately(&self) -> bool {
3441
!self.resolve_capabilities.contains(&CompletionResolveCapability::AdditionalTextEdits)
3542
}
3643
}

crates/completion/src/item.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,7 @@ pub struct CompletionItem {
6767
/// possible match.
6868
ref_match: Option<(Mutability, CompletionScore)>,
6969

70-
/// The data later to be used in the `completionItem/resolve` response
71-
/// to add the insert import edit.
70+
/// The import data to add to completion's edits.
7271
import_to_add: Option<ImportToAdd>,
7372
}
7473

crates/completion/src/render.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,10 @@ impl<'a> Render<'a> {
194194
local_name,
195195
)
196196
.kind(CompletionItemKind::UnresolvedReference)
197-
.add_import(import_to_add, self.ctx.completion.config.should_resolve_immediately())
197+
.add_import(
198+
import_to_add,
199+
self.ctx.completion.config.should_resolve_additional_edits_immediately(),
200+
)
198201
.build();
199202
return Some(item);
200203
}
@@ -249,7 +252,10 @@ impl<'a> Render<'a> {
249252

250253
let item = item
251254
.kind(kind)
252-
.add_import(import_to_add, self.ctx.completion.config.should_resolve_immediately())
255+
.add_import(
256+
import_to_add,
257+
self.ctx.completion.config.should_resolve_additional_edits_immediately(),
258+
)
253259
.set_documentation(docs)
254260
.set_ref_match(ref_match)
255261
.build();

crates/completion/src/render/enum_variant.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,10 @@ impl<'a> EnumVariantRender<'a> {
7171
.kind(CompletionItemKind::EnumVariant)
7272
.set_documentation(self.variant.docs(self.ctx.db()))
7373
.set_deprecated(self.ctx.is_deprecated(self.variant))
74-
.add_import(import_to_add, self.ctx.completion.config.should_resolve_immediately())
74+
.add_import(
75+
import_to_add,
76+
self.ctx.completion.config.should_resolve_additional_edits_immediately(),
77+
)
7578
.detail(self.detail());
7679

7780
if self.variant_kind == StructKind::Tuple {

crates/completion/src/render/function.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,10 @@ impl<'a> FunctionRender<'a> {
4747
.set_deprecated(self.ctx.is_deprecated(self.func))
4848
.detail(self.detail())
4949
.add_call_parens(self.ctx.completion, self.name, params)
50-
.add_import(import_to_add, self.ctx.completion.config.should_resolve_immediately())
50+
.add_import(
51+
import_to_add,
52+
self.ctx.completion.config.should_resolve_additional_edits_immediately(),
53+
)
5154
.build()
5255
}
5356

crates/completion/src/render/macro_.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,10 @@ impl<'a> MacroRender<'a> {
5050
.kind(CompletionItemKind::Macro)
5151
.set_documentation(self.docs.clone())
5252
.set_deprecated(self.ctx.is_deprecated(self.macro_))
53-
.add_import(import_to_add, self.ctx.completion.config.should_resolve_immediately())
53+
.add_import(
54+
import_to_add,
55+
self.ctx.completion.config.should_resolve_additional_edits_immediately(),
56+
)
5457
.detail(self.detail());
5558

5659
let needs_bang = self.needs_bang();

crates/completion/src/test_utils.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ pub(crate) fn check_edit_with_config(
9797
.unwrap_or_else(|| panic!("can't find {:?} completion in {:#?}", what, completions));
9898
let mut actual = db.file_text(position.file_id).to_string();
9999
completion.text_edit().apply(&mut actual);
100-
// git how to apply imports now?
101100
assert_eq_text!(&ra_fixture_after, &actual)
102101
}
103102

crates/rust-analyzer/src/caps.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ pub fn server_capabilities(client_caps: &ClientCapabilities) -> ServerCapabiliti
3232
})),
3333
hover_provider: Some(HoverProviderCapability::Simple(true)),
3434
completion_provider: Some(CompletionOptions {
35-
resolve_provider: Some(true),
35+
resolve_provider: completions_resolve_provider(client_caps),
3636
trigger_characters: Some(vec![":".to_string(), ".".to_string()]),
3737
work_done_progress_options: WorkDoneProgressOptions { work_done_progress: None },
3838
}),
@@ -50,9 +50,7 @@ pub fn server_capabilities(client_caps: &ClientCapabilities) -> ServerCapabiliti
5050
document_symbol_provider: Some(OneOf::Left(true)),
5151
workspace_symbol_provider: Some(OneOf::Left(true)),
5252
code_action_provider: Some(code_action_capabilities(client_caps)),
53-
code_lens_provider: Some(CodeLensOptions {
54-
resolve_provider: resolve_provider(client_caps),
55-
}),
53+
code_lens_provider: Some(CodeLensOptions { resolve_provider: Some(true) }),
5654
document_formatting_provider: Some(OneOf::Left(true)),
5755
document_range_formatting_provider: None,
5856
document_on_type_formatting_provider: Some(DocumentOnTypeFormattingOptions {
@@ -97,16 +95,16 @@ pub fn server_capabilities(client_caps: &ClientCapabilities) -> ServerCapabiliti
9795
}
9896
}
9997

100-
fn resolve_provider(client_caps: &ClientCapabilities) -> Option<bool> {
101-
if enabled_resolve_capabilities(client_caps)?.is_empty() {
98+
fn completions_resolve_provider(client_caps: &ClientCapabilities) -> Option<bool> {
99+
if enabled_completions_resolve_capabilities(client_caps)?.is_empty() {
102100
None
103101
} else {
104102
Some(true)
105103
}
106104
}
107105

108-
/// Parses client capabilities and returns all that rust-analyzer supports.
109-
pub fn enabled_resolve_capabilities(
106+
/// Parses client capabilities and returns all completion resolve capabilities rust-analyzer supports.
107+
pub fn enabled_completions_resolve_capabilities(
110108
caps: &ClientCapabilities,
111109
) -> Option<FxHashSet<CompletionResolveCapability>> {
112110
Some(

crates/rust-analyzer/src/config.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use rustc_hash::FxHashSet;
1919
use serde::Deserialize;
2020
use vfs::AbsPathBuf;
2121

22-
use crate::{caps::enabled_resolve_capabilities, diagnostics::DiagnosticsMapConfig};
22+
use crate::{caps::enabled_completions_resolve_capabilities, diagnostics::DiagnosticsMapConfig};
2323

2424
#[derive(Debug, Clone)]
2525
pub struct Config {
@@ -389,7 +389,7 @@ impl Config {
389389

390390
self.completion.allow_snippets(false);
391391
self.completion.resolve_capabilities =
392-
enabled_resolve_capabilities(caps).unwrap_or_default();
392+
enabled_completions_resolve_capabilities(caps).unwrap_or_default();
393393
if let Some(completion) = &doc_caps.completion {
394394
if let Some(completion_item) = &completion.completion_item {
395395
if let Some(value) = completion_item.snippet_support {

crates/rust-analyzer/src/handlers.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,7 @@ pub(crate) fn handle_completion(
581581
&line_index,
582582
line_endings,
583583
item.clone(),
584-
&snap.config.completion.resolve_capabilities,
584+
snap.config.completion.should_resolve_additional_edits_immediately(),
585585
);
586586

587587
let item_id = serde_json::to_value(&item_index)

0 commit comments

Comments
 (0)