Skip to content

Commit dc05192

Browse files
committed
Auto merge of rust-lang#12807 - Veykril:completion-item-details, r=Veykril
Add simple support for completion item details Supercedes rust-lang/rust-analyzer#9891 This doesn't yet really implement anything new, it just adds the scaffolding for the protocol conversion
2 parents 530eb27 + d17a5ef commit dc05192

File tree

3 files changed

+38
-11
lines changed

3 files changed

+38
-11
lines changed

crates/rust-analyzer/src/caps.rs

+17-11
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
//! Advertises the capabilities of the LSP Server.
22
use lsp_types::{
33
CallHierarchyServerCapability, ClientCapabilities, CodeActionKind, CodeActionOptions,
4-
CodeActionProviderCapability, CodeLensOptions, CompletionOptions, DeclarationCapability,
5-
DocumentOnTypeFormattingOptions, FileOperationFilter, FileOperationPattern,
6-
FileOperationPatternKind, FileOperationRegistrationOptions, FoldingRangeProviderCapability,
7-
HoverProviderCapability, ImplementationProviderCapability, InlayHintOptions,
8-
InlayHintServerCapabilities, OneOf, RenameOptions, SaveOptions,
9-
SelectionRangeProviderCapability, SemanticTokensFullOptions, SemanticTokensLegend,
10-
SemanticTokensOptions, ServerCapabilities, SignatureHelpOptions, TextDocumentSyncCapability,
11-
TextDocumentSyncKind, TextDocumentSyncOptions, TypeDefinitionProviderCapability,
12-
WorkDoneProgressOptions, WorkspaceFileOperationsServerCapabilities,
13-
WorkspaceServerCapabilities,
4+
CodeActionProviderCapability, CodeLensOptions, CompletionOptions,
5+
CompletionOptionsCompletionItem, DeclarationCapability, DocumentOnTypeFormattingOptions,
6+
FileOperationFilter, FileOperationPattern, FileOperationPatternKind,
7+
FileOperationRegistrationOptions, FoldingRangeProviderCapability, HoverProviderCapability,
8+
ImplementationProviderCapability, InlayHintOptions, InlayHintServerCapabilities, OneOf,
9+
RenameOptions, SaveOptions, SelectionRangeProviderCapability, SemanticTokensFullOptions,
10+
SemanticTokensLegend, SemanticTokensOptions, ServerCapabilities, SignatureHelpOptions,
11+
TextDocumentSyncCapability, TextDocumentSyncKind, TextDocumentSyncOptions,
12+
TypeDefinitionProviderCapability, WorkDoneProgressOptions,
13+
WorkspaceFileOperationsServerCapabilities, WorkspaceServerCapabilities,
1414
};
1515
use serde_json::json;
1616

@@ -36,7 +36,7 @@ pub fn server_capabilities(config: &Config) -> ServerCapabilities {
3636
"(".to_string(),
3737
]),
3838
all_commit_characters: None,
39-
completion_item: None,
39+
completion_item: completion_item(&config),
4040
work_done_progress_options: WorkDoneProgressOptions { work_done_progress: None },
4141
}),
4242
signature_help_provider: Some(SignatureHelpOptions {
@@ -170,6 +170,12 @@ pub(crate) fn completion_item_edit_resolve(caps: &ClientCapabilities) -> bool {
170170
})() == Some(true)
171171
}
172172

173+
fn completion_item(config: &Config) -> Option<CompletionOptionsCompletionItem> {
174+
Some(CompletionOptionsCompletionItem {
175+
label_details_support: Some(config.completion_label_details_support()),
176+
})
177+
}
178+
173179
fn code_action_capabilities(client_caps: &ClientCapabilities) -> CodeActionProviderCapability {
174180
client_caps
175181
.text_document

crates/rust-analyzer/src/config.rs

+14
Original file line numberDiff line numberDiff line change
@@ -833,6 +833,20 @@ impl Config {
833833
)
834834
}
835835

836+
pub fn completion_label_details_support(&self) -> bool {
837+
try_!(self
838+
.caps
839+
.text_document
840+
.as_ref()?
841+
.completion
842+
.as_ref()?
843+
.completion_item
844+
.as_ref()?
845+
.label_details_support
846+
.as_ref()?)
847+
.is_some()
848+
}
849+
836850
pub fn offset_encoding(&self) -> OffsetEncoding {
837851
if supports_utf8(&self.caps) {
838852
OffsetEncoding::Utf8

crates/rust-analyzer/src/to_proto.rs

+7
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,13 @@ fn completion_item(
277277
..Default::default()
278278
};
279279

280+
if config.completion_label_details_support() {
281+
lsp_item.label_details = Some(lsp_types::CompletionItemLabelDetails {
282+
detail: None,
283+
description: lsp_item.detail.clone(),
284+
});
285+
}
286+
280287
set_score(&mut lsp_item, max_relevance, item.relevance());
281288

282289
if config.completion().enable_imports_on_the_fly {

0 commit comments

Comments
 (0)