Unnamed repository; edit this file 'description' to name the repository.
Add simple support for completion item details
Lukas Wirth 2022-07-19
parent ea41617 · commit d17a5ef
-rw-r--r--crates/rust-analyzer/src/caps.rs28
-rw-r--r--crates/rust-analyzer/src/config.rs14
-rw-r--r--crates/rust-analyzer/src/to_proto.rs7
3 files changed, 38 insertions, 11 deletions
diff --git a/crates/rust-analyzer/src/caps.rs b/crates/rust-analyzer/src/caps.rs
index 7bff6a8b0e..cda95cd862 100644
--- a/crates/rust-analyzer/src/caps.rs
+++ b/crates/rust-analyzer/src/caps.rs
@@ -1,16 +1,16 @@
//! Advertises the capabilities of the LSP Server.
use lsp_types::{
CallHierarchyServerCapability, ClientCapabilities, CodeActionKind, CodeActionOptions,
- CodeActionProviderCapability, CodeLensOptions, CompletionOptions, DeclarationCapability,
- DocumentOnTypeFormattingOptions, FileOperationFilter, FileOperationPattern,
- FileOperationPatternKind, FileOperationRegistrationOptions, FoldingRangeProviderCapability,
- HoverProviderCapability, ImplementationProviderCapability, InlayHintOptions,
- InlayHintServerCapabilities, OneOf, RenameOptions, SaveOptions,
- SelectionRangeProviderCapability, SemanticTokensFullOptions, SemanticTokensLegend,
- SemanticTokensOptions, ServerCapabilities, SignatureHelpOptions, TextDocumentSyncCapability,
- TextDocumentSyncKind, TextDocumentSyncOptions, TypeDefinitionProviderCapability,
- WorkDoneProgressOptions, WorkspaceFileOperationsServerCapabilities,
- WorkspaceServerCapabilities,
+ CodeActionProviderCapability, CodeLensOptions, CompletionOptions,
+ CompletionOptionsCompletionItem, DeclarationCapability, DocumentOnTypeFormattingOptions,
+ FileOperationFilter, FileOperationPattern, FileOperationPatternKind,
+ FileOperationRegistrationOptions, FoldingRangeProviderCapability, HoverProviderCapability,
+ ImplementationProviderCapability, InlayHintOptions, InlayHintServerCapabilities, OneOf,
+ RenameOptions, SaveOptions, SelectionRangeProviderCapability, SemanticTokensFullOptions,
+ SemanticTokensLegend, SemanticTokensOptions, ServerCapabilities, SignatureHelpOptions,
+ TextDocumentSyncCapability, TextDocumentSyncKind, TextDocumentSyncOptions,
+ TypeDefinitionProviderCapability, WorkDoneProgressOptions,
+ WorkspaceFileOperationsServerCapabilities, WorkspaceServerCapabilities,
};
use serde_json::json;
@@ -36,7 +36,7 @@ pub fn server_capabilities(config: &Config) -> ServerCapabilities {
"(".to_string(),
]),
all_commit_characters: None,
- completion_item: None,
+ completion_item: completion_item(&config),
work_done_progress_options: WorkDoneProgressOptions { work_done_progress: None },
}),
signature_help_provider: Some(SignatureHelpOptions {
@@ -170,6 +170,12 @@ pub(crate) fn completion_item_edit_resolve(caps: &ClientCapabilities) -> bool {
})() == Some(true)
}
+fn completion_item(config: &Config) -> Option<CompletionOptionsCompletionItem> {
+ Some(CompletionOptionsCompletionItem {
+ label_details_support: Some(config.completion_label_details_support()),
+ })
+}
+
fn code_action_capabilities(client_caps: &ClientCapabilities) -> CodeActionProviderCapability {
client_caps
.text_document
diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs
index 87a15432a4..23305b2615 100644
--- a/crates/rust-analyzer/src/config.rs
+++ b/crates/rust-analyzer/src/config.rs
@@ -833,6 +833,20 @@ impl Config {
)
}
+ pub fn completion_label_details_support(&self) -> bool {
+ try_!(self
+ .caps
+ .text_document
+ .as_ref()?
+ .completion
+ .as_ref()?
+ .completion_item
+ .as_ref()?
+ .label_details_support
+ .as_ref()?)
+ .is_some()
+ }
+
pub fn offset_encoding(&self) -> OffsetEncoding {
if supports_utf8(&self.caps) {
OffsetEncoding::Utf8
diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs
index cdd152ccf5..9c8e618b6e 100644
--- a/crates/rust-analyzer/src/to_proto.rs
+++ b/crates/rust-analyzer/src/to_proto.rs
@@ -277,6 +277,13 @@ fn completion_item(
..Default::default()
};
+ if config.completion_label_details_support() {
+ lsp_item.label_details = Some(lsp_types::CompletionItemLabelDetails {
+ detail: None,
+ description: lsp_item.detail.clone(),
+ });
+ }
+
set_score(&mut lsp_item, max_relevance, item.relevance());
if config.completion().enable_imports_on_the_fly {