Refactor the code

This commit is contained in:
Kirill Bulatov
2020-12-03 00:13:32 +02:00
parent d9bd1f171d
commit 50e06ee95a
11 changed files with 48 additions and 34 deletions

View File

@@ -32,7 +32,7 @@ pub fn server_capabilities(client_caps: &ClientCapabilities) -> ServerCapabiliti
})),
hover_provider: Some(HoverProviderCapability::Simple(true)),
completion_provider: Some(CompletionOptions {
resolve_provider: Some(true),
resolve_provider: completions_resolve_provider(client_caps),
trigger_characters: Some(vec![":".to_string(), ".".to_string()]),
work_done_progress_options: WorkDoneProgressOptions { work_done_progress: None },
}),
@@ -50,9 +50,7 @@ pub fn server_capabilities(client_caps: &ClientCapabilities) -> ServerCapabiliti
document_symbol_provider: Some(OneOf::Left(true)),
workspace_symbol_provider: Some(OneOf::Left(true)),
code_action_provider: Some(code_action_capabilities(client_caps)),
code_lens_provider: Some(CodeLensOptions {
resolve_provider: resolve_provider(client_caps),
}),
code_lens_provider: Some(CodeLensOptions { resolve_provider: Some(true) }),
document_formatting_provider: Some(OneOf::Left(true)),
document_range_formatting_provider: None,
document_on_type_formatting_provider: Some(DocumentOnTypeFormattingOptions {
@@ -97,16 +95,16 @@ pub fn server_capabilities(client_caps: &ClientCapabilities) -> ServerCapabiliti
}
}
fn resolve_provider(client_caps: &ClientCapabilities) -> Option<bool> {
if enabled_resolve_capabilities(client_caps)?.is_empty() {
fn completions_resolve_provider(client_caps: &ClientCapabilities) -> Option<bool> {
if enabled_completions_resolve_capabilities(client_caps)?.is_empty() {
None
} else {
Some(true)
}
}
/// Parses client capabilities and returns all that rust-analyzer supports.
pub fn enabled_resolve_capabilities(
/// Parses client capabilities and returns all completion resolve capabilities rust-analyzer supports.
pub fn enabled_completions_resolve_capabilities(
caps: &ClientCapabilities,
) -> Option<FxHashSet<CompletionResolveCapability>> {
Some(

View File

@@ -19,7 +19,7 @@ use rustc_hash::FxHashSet;
use serde::Deserialize;
use vfs::AbsPathBuf;
use crate::{caps::enabled_resolve_capabilities, diagnostics::DiagnosticsMapConfig};
use crate::{caps::enabled_completions_resolve_capabilities, diagnostics::DiagnosticsMapConfig};
#[derive(Debug, Clone)]
pub struct Config {
@@ -389,7 +389,7 @@ impl Config {
self.completion.allow_snippets(false);
self.completion.resolve_capabilities =
enabled_resolve_capabilities(caps).unwrap_or_default();
enabled_completions_resolve_capabilities(caps).unwrap_or_default();
if let Some(completion) = &doc_caps.completion {
if let Some(completion_item) = &completion.completion_item {
if let Some(value) = completion_item.snippet_support {

View File

@@ -581,7 +581,7 @@ pub(crate) fn handle_completion(
&line_index,
line_endings,
item.clone(),
&snap.config.completion.resolve_capabilities,
snap.config.completion.should_resolve_additional_edits_immediately(),
);
let item_id = serde_json::to_value(&item_index)

View File

@@ -5,10 +5,10 @@ use std::{
};
use ide::{
Assist, AssistKind, CallInfo, CompletionItem, CompletionItemKind, CompletionResolveCapability,
Documentation, FileSystemEdit, Fold, FoldKind, Highlight, HighlightModifier, HighlightTag,
HighlightedRange, ImportToAdd, Indel, InlayHint, InlayKind, InsertTextFormat, LineIndex,
Markup, NavigationTarget, ReferenceAccess, ResolvedAssist, Runnable, Severity, SourceChange,
Assist, AssistKind, CallInfo, CompletionItem, CompletionItemKind, Documentation,
FileSystemEdit, Fold, FoldKind, Highlight, HighlightModifier, HighlightTag, HighlightedRange,
ImportToAdd, Indel, InlayHint, InlayKind, InsertTextFormat, LineIndex, Markup,
NavigationTarget, ReferenceAccess, ResolvedAssist, Runnable, Severity, SourceChange,
SourceFileEdit, TextEdit,
};
use ide_db::{
@@ -16,7 +16,6 @@ use ide_db::{
helpers::{insert_use, mod_path_to_ast},
};
use itertools::Itertools;
use rustc_hash::FxHashSet;
use syntax::{algo, SyntaxKind, TextRange, TextSize};
use crate::{
@@ -163,7 +162,7 @@ pub(crate) fn completion_item(
line_index: &LineIndex,
line_endings: LineEndings,
completion_item: CompletionItem,
resolve_capabilities: &FxHashSet<CompletionResolveCapability>,
should_resolve_additional_edits_immediately: bool,
) -> Vec<lsp_types::CompletionItem> {
fn set_score(res: &mut lsp_types::CompletionItem, label: &str) {
res.preselect = Some(true);
@@ -237,14 +236,12 @@ pub(crate) fn completion_item(
None => vec![res],
};
let unapplied_import_data = completion_item.import_to_add().filter(|_| {
!resolve_capabilities.contains(&CompletionResolveCapability::AdditionalTextEdits)
});
for mut r in all_results.iter_mut() {
r.insert_text_format = Some(insert_text_format(completion_item.insert_text_format()));
if let Some(unapplied_import_data) = unapplied_import_data {
append_import_edits(r, unapplied_import_data, line_index, line_endings);
if !should_resolve_additional_edits_immediately {
if let Some(unapplied_import_data) = completion_item.import_to_add() {
append_import_edits(r, unapplied_import_data, line_index, line_endings);
}
}
}
@@ -891,7 +888,6 @@ mod tests {
let (offset, text) = test_utils::extract_offset(fixture);
let line_index = LineIndex::new(&text);
let (analysis, file_id) = Analysis::from_single_file(text);
let resolve_caps = FxHashSet::default();
let completions: Vec<(String, Option<String>)> = analysis
.completions(
&ide::CompletionConfig::default(),
@@ -901,7 +897,7 @@ mod tests {
.unwrap()
.into_iter()
.filter(|c| c.label().ends_with("arg"))
.map(|c| completion_item(&line_index, LineEndings::Unix, c, &resolve_caps))
.map(|c| completion_item(&line_index, LineEndings::Unix, c, true))
.flat_map(|comps| comps.into_iter().map(|c| (c.label, c.sort_text)))
.collect();
expect_test::expect![[r#"