Skip to content

Commit 68a747e

Browse files
Remove redundant code
1 parent 50e06ee commit 68a747e

File tree

8 files changed

+80
-103
lines changed

8 files changed

+80
-103
lines changed

crates/completion/src/config.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ 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.
19-
pub resolve_capabilities: FxHashSet<CompletionResolveCapability>,
18+
/// A set of capabilities, enabled on the client and supported on the server.
19+
pub active_resolve_capabilities: FxHashSet<CompletionResolveCapability>,
2020
}
2121

22-
/// A resolve capability, supported on a server.
23-
/// If the client registers any of those in its completion resolve capabilities,
22+
/// A resolve capability, supported on the server.
23+
/// If the client registers any completion resolve capabilities,
2424
/// the server is able to render completion items' corresponding fields later,
2525
/// not during an initial completion item request.
2626
/// See https://github.com/rust-analyzer/rust-analyzer/issues/6366 for more details.
@@ -37,8 +37,11 @@ impl CompletionConfig {
3737
}
3838

3939
/// Whether the completions' additional edits are calculated later, during a resolve request or not.
40-
pub fn should_resolve_additional_edits_immediately(&self) -> bool {
41-
!self.resolve_capabilities.contains(&CompletionResolveCapability::AdditionalTextEdits)
40+
/// See `CompletionResolveCapability` for the details.
41+
pub fn resolve_edits_immediately(&self) -> bool {
42+
!self
43+
.active_resolve_capabilities
44+
.contains(&CompletionResolveCapability::AdditionalTextEdits)
4245
}
4346
}
4447

@@ -56,7 +59,7 @@ impl Default for CompletionConfig {
5659
add_call_argument_snippets: true,
5760
snippet_cap: Some(SnippetCap { _private: () }),
5861
merge: Some(MergeBehaviour::Full),
59-
resolve_capabilities: FxHashSet::default(),
62+
active_resolve_capabilities: FxHashSet::default(),
6063
}
6164
}
6265
}

crates/completion/src/render.rs

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

253250
let item = item
254251
.kind(kind)
255-
.add_import(
256-
import_to_add,
257-
self.ctx.completion.config.should_resolve_additional_edits_immediately(),
258-
)
252+
.add_import(import_to_add, self.ctx.completion.config.resolve_edits_immediately())
259253
.set_documentation(docs)
260254
.set_ref_match(ref_match)
261255
.build();

crates/completion/src/render/enum_variant.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,7 @@ 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(
75-
import_to_add,
76-
self.ctx.completion.config.should_resolve_additional_edits_immediately(),
77-
)
74+
.add_import(import_to_add, self.ctx.completion.config.resolve_edits_immediately())
7875
.detail(self.detail());
7976

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

crates/completion/src/render/function.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,7 @@ 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(
51-
import_to_add,
52-
self.ctx.completion.config.should_resolve_additional_edits_immediately(),
53-
)
50+
.add_import(import_to_add, self.ctx.completion.config.resolve_edits_immediately())
5451
.build()
5552
}
5653

crates/completion/src/render/macro_.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,7 @@ 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(
54-
import_to_add,
55-
self.ctx.completion.config.should_resolve_additional_edits_immediately(),
56-
)
53+
.add_import(import_to_add, self.ctx.completion.config.resolve_edits_immediately())
5754
.detail(self.detail());
5855

5956
let needs_bang = self.needs_bang();

crates/rust-analyzer/src/config.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ impl Config {
388388
}
389389

390390
self.completion.allow_snippets(false);
391-
self.completion.resolve_capabilities =
391+
self.completion.active_resolve_capabilities =
392392
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 {

crates/rust-analyzer/src/handlers.rs

Lines changed: 59 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ use std::{
88
};
99

1010
use ide::{
11-
FileId, FilePosition, FileRange, HoverAction, HoverGotoTypeData, NavigationTarget, Query,
12-
RangeInfo, Runnable, RunnableKind, SearchScope, TextEdit,
11+
FileId, FilePosition, FileRange, HoverAction, HoverGotoTypeData, ImportToAdd, LineIndex,
12+
NavigationTarget, Query, RangeInfo, Runnable, RunnableKind, SearchScope, TextEdit,
1313
};
14+
use ide_db::helpers::{insert_use, mod_path_to_ast};
1415
use itertools::Itertools;
1516
use lsp_server::ErrorCode;
1617
use lsp_types::{
@@ -35,9 +36,9 @@ use crate::{
3536
config::RustfmtConfig,
3637
from_json, from_proto,
3738
global_state::{CompletionResolveData, GlobalState, GlobalStateSnapshot},
39+
line_endings::LineEndings,
3840
lsp_ext::{self, InlayHint, InlayHintsParams},
39-
to_proto::{self, append_import_edits},
40-
LspError, Result,
41+
to_proto, LspError, Result,
4142
};
4243

4344
pub(crate) fn handle_analyzer_status(
@@ -577,20 +578,19 @@ pub(crate) fn handle_completion(
577578
.into_iter()
578579
.enumerate()
579580
.flat_map(|(item_index, item)| {
580-
let mut new_completion_items = to_proto::completion_item(
581-
&line_index,
582-
line_endings,
583-
item.clone(),
584-
snap.config.completion.should_resolve_additional_edits_immediately(),
585-
);
586-
587-
let item_id = serde_json::to_value(&item_index)
588-
.expect(&format!("Should be able to serialize usize value {}", item_index));
589-
completion_resolve_data
590-
.insert(item_index, CompletionResolveData { file_id: position.file_id, item });
591-
for new_item in &mut new_completion_items {
592-
new_item.data = Some(item_id.clone());
581+
let mut new_completion_items =
582+
to_proto::completion_item(&line_index, line_endings, item.clone());
583+
584+
if !snap.config.completion.active_resolve_capabilities.is_empty() {
585+
let item_id = serde_json::to_value(&item_index)
586+
.expect(&format!("Should be able to serialize usize value {}", item_index));
587+
completion_resolve_data
588+
.insert(item_index, CompletionResolveData { file_id: position.file_id, item });
589+
for new_item in &mut new_completion_items {
590+
new_item.data = Some(item_id.clone());
591+
}
593592
}
593+
594594
new_completion_items
595595
})
596596
.collect();
@@ -620,7 +620,7 @@ pub(crate) fn handle_resolve_completion(
620620
};
621621

622622
let snap = &global_state.snapshot();
623-
for supported_completion_resolve_cap in &snap.config.completion.resolve_capabilities {
623+
for supported_completion_resolve_cap in &snap.config.completion.active_resolve_capabilities {
624624
match supported_completion_resolve_cap {
625625
ide::CompletionResolveCapability::AdditionalTextEdits => {
626626
// FIXME actually add all additional edits here?
@@ -1598,3 +1598,44 @@ fn should_skip_target(runnable: &Runnable, cargo_spec: Option<&CargoTargetSpec>)
15981598
_ => false,
15991599
}
16001600
}
1601+
1602+
fn append_import_edits(
1603+
completion: &mut lsp_types::CompletionItem,
1604+
import_to_add: &ImportToAdd,
1605+
line_index: &LineIndex,
1606+
line_endings: LineEndings,
1607+
) {
1608+
let new_edits = import_into_edits(import_to_add, line_index, line_endings);
1609+
if let Some(original_additional_edits) = completion.additional_text_edits.as_mut() {
1610+
if let Some(mut new_edits) = new_edits {
1611+
original_additional_edits.extend(new_edits.drain(..))
1612+
}
1613+
} else {
1614+
completion.additional_text_edits = new_edits;
1615+
}
1616+
}
1617+
1618+
fn import_into_edits(
1619+
import_to_add: &ImportToAdd,
1620+
line_index: &LineIndex,
1621+
line_endings: LineEndings,
1622+
) -> Option<Vec<lsp_types::TextEdit>> {
1623+
let _p = profile::span("add_import_edits");
1624+
1625+
let rewriter = insert_use::insert_use(
1626+
&import_to_add.import_scope,
1627+
mod_path_to_ast(&import_to_add.import_path),
1628+
import_to_add.merge_behaviour,
1629+
);
1630+
let old_ast = rewriter.rewrite_root()?;
1631+
let mut import_insert = TextEdit::builder();
1632+
algo::diff(&old_ast, &rewriter.rewrite(&old_ast)).into_text_edit(&mut import_insert);
1633+
let import_edit = import_insert.finish();
1634+
1635+
Some(
1636+
import_edit
1637+
.into_iter()
1638+
.map(|indel| to_proto::text_edit(line_index, line_endings, indel))
1639+
.collect_vec(),
1640+
)
1641+
}

crates/rust-analyzer/src/to_proto.rs

Lines changed: 5 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,12 @@ use std::{
77
use ide::{
88
Assist, AssistKind, CallInfo, CompletionItem, CompletionItemKind, Documentation,
99
FileSystemEdit, Fold, FoldKind, Highlight, HighlightModifier, HighlightTag, HighlightedRange,
10-
ImportToAdd, Indel, InlayHint, InlayKind, InsertTextFormat, LineIndex, Markup,
11-
NavigationTarget, ReferenceAccess, ResolvedAssist, Runnable, Severity, SourceChange,
12-
SourceFileEdit, TextEdit,
13-
};
14-
use ide_db::{
15-
base_db::{FileId, FileRange},
16-
helpers::{insert_use, mod_path_to_ast},
10+
Indel, InlayHint, InlayKind, InsertTextFormat, LineIndex, Markup, NavigationTarget,
11+
ReferenceAccess, ResolvedAssist, Runnable, Severity, SourceChange, SourceFileEdit, TextEdit,
1712
};
13+
use ide_db::base_db::{FileId, FileRange};
1814
use itertools::Itertools;
19-
use syntax::{algo, SyntaxKind, TextRange, TextSize};
15+
use syntax::{SyntaxKind, TextRange, TextSize};
2016

2117
use crate::{
2218
cargo_target_spec::CargoTargetSpec, global_state::GlobalStateSnapshot,
@@ -162,7 +158,6 @@ pub(crate) fn completion_item(
162158
line_index: &LineIndex,
163159
line_endings: LineEndings,
164160
completion_item: CompletionItem,
165-
should_resolve_additional_edits_immediately: bool,
166161
) -> Vec<lsp_types::CompletionItem> {
167162
fn set_score(res: &mut lsp_types::CompletionItem, label: &str) {
168163
res.preselect = Some(true);
@@ -238,13 +233,7 @@ pub(crate) fn completion_item(
238233

239234
for mut r in all_results.iter_mut() {
240235
r.insert_text_format = Some(insert_text_format(completion_item.insert_text_format()));
241-
if !should_resolve_additional_edits_immediately {
242-
if let Some(unapplied_import_data) = completion_item.import_to_add() {
243-
append_import_edits(r, unapplied_import_data, line_index, line_endings);
244-
}
245-
}
246236
}
247-
248237
all_results
249238
}
250239

@@ -828,47 +817,6 @@ pub(crate) fn markup_content(markup: Markup) -> lsp_types::MarkupContent {
828817
lsp_types::MarkupContent { kind: lsp_types::MarkupKind::Markdown, value }
829818
}
830819

831-
pub(crate) fn import_into_edits(
832-
import_to_add: &ImportToAdd,
833-
line_index: &LineIndex,
834-
line_endings: LineEndings,
835-
) -> Option<Vec<lsp_types::TextEdit>> {
836-
let _p = profile::span("add_import_edits");
837-
838-
let rewriter = insert_use::insert_use(
839-
&import_to_add.import_scope,
840-
mod_path_to_ast(&import_to_add.import_path),
841-
import_to_add.merge_behaviour,
842-
);
843-
let old_ast = rewriter.rewrite_root()?;
844-
let mut import_insert = TextEdit::builder();
845-
algo::diff(&old_ast, &rewriter.rewrite(&old_ast)).into_text_edit(&mut import_insert);
846-
let import_edit = import_insert.finish();
847-
848-
Some(
849-
import_edit
850-
.into_iter()
851-
.map(|indel| text_edit(line_index, line_endings, indel))
852-
.collect_vec(),
853-
)
854-
}
855-
856-
pub(crate) fn append_import_edits(
857-
completion: &mut lsp_types::CompletionItem,
858-
import_to_add: &ImportToAdd,
859-
line_index: &LineIndex,
860-
line_endings: LineEndings,
861-
) {
862-
let new_edits = import_into_edits(import_to_add, line_index, line_endings);
863-
if let Some(original_additional_edits) = completion.additional_text_edits.as_mut() {
864-
if let Some(mut new_edits) = new_edits {
865-
original_additional_edits.extend(new_edits.drain(..))
866-
}
867-
} else {
868-
completion.additional_text_edits = new_edits;
869-
}
870-
}
871-
872820
#[cfg(test)]
873821
mod tests {
874822
use ide::Analysis;
@@ -897,7 +845,7 @@ mod tests {
897845
.unwrap()
898846
.into_iter()
899847
.filter(|c| c.label().ends_with("arg"))
900-
.map(|c| completion_item(&line_index, LineEndings::Unix, c, true))
848+
.map(|c| completion_item(&line_index, LineEndings::Unix, c))
901849
.flat_map(|comps| comps.into_iter().map(|c| (c.label, c.sort_text)))
902850
.collect();
903851
expect_test::expect![[r#"

0 commit comments

Comments
 (0)