diff --git a/Cargo.lock b/Cargo.lock index 9d95151da9fc..f26c99dc9c24 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -837,8 +837,7 @@ dependencies = [ [[package]] name = "lsp-types" version = "0.89.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852e0dedfd52cc32325598b2631e0eba31b7b708959676a9f837042f276b09a2" +source = "git+https://github.com/kjeremy/languageserver-types?branch=completion-item-label-details#001522657afb913d8d0d78ad30c584eb6a87d1ed" dependencies = [ "bitflags", "serde", diff --git a/crates/ide_completion/src/config.rs b/crates/ide_completion/src/config.rs index c300ce887bef..818b2c704978 100644 --- a/crates/ide_completion/src/config.rs +++ b/crates/ide_completion/src/config.rs @@ -15,4 +15,5 @@ pub struct CompletionConfig { pub add_call_argument_snippets: bool, pub snippet_cap: Option, pub insert_use: InsertUseConfig, + pub label_details: bool, } diff --git a/crates/ide_completion/src/tests.rs b/crates/ide_completion/src/tests.rs index b8d60dfd2c3d..4b6b4733cf1b 100644 --- a/crates/ide_completion/src/tests.rs +++ b/crates/ide_completion/src/tests.rs @@ -73,6 +73,7 @@ pub(crate) const TEST_CONFIG: CompletionConfig = CompletionConfig { group: true, skip_glob_imports: true, }, + label_details: false, }; pub(crate) fn completion_list(code: &str) -> String { diff --git a/crates/rust-analyzer/Cargo.toml b/crates/rust-analyzer/Cargo.toml index 8a18d5801a71..d9b0d91c6058 100644 --- a/crates/rust-analyzer/Cargo.toml +++ b/crates/rust-analyzer/Cargo.toml @@ -24,7 +24,8 @@ env_logger = { version = "0.9", default-features = false } itertools = "0.10.0" jod-thread = "0.1.0" log = "0.4.8" -lsp-types = { version = "0.89.0", features = ["proposed"] } +#lsp-types = { version = "0.89.0", features = ["proposed"] } +lsp-types = { git = "https://github.com/kjeremy/languageserver-types", branch = "completion-item-label-details", features = ["proposed"] } parking_lot = "0.11.0" xflags = "0.2.1" oorandom = "11.1.2" diff --git a/crates/rust-analyzer/src/caps.rs b/crates/rust-analyzer/src/caps.rs index 9469776db8af..4c651bf7a0a3 100644 --- a/crates/rust-analyzer/src/caps.rs +++ b/crates/rust-analyzer/src/caps.rs @@ -1,10 +1,11 @@ //! 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, OneOf, RenameOptions, SaveOptions, + CodeActionProviderCapability, CodeLensOptions, CompletionOptions, + CompletionOptionsCompletionItem, DeclarationCapability, DocumentOnTypeFormattingOptions, + FileOperationFilter, FileOperationPattern, FileOperationPatternKind, + FileOperationRegistrationOptions, FoldingRangeProviderCapability, HoverProviderCapability, + ImplementationProviderCapability, OneOf, RenameOptions, SaveOptions, SelectionRangeProviderCapability, SemanticTokensFullOptions, SemanticTokensLegend, SemanticTokensOptions, ServerCapabilities, SignatureHelpOptions, TextDocumentSyncCapability, TextDocumentSyncKind, TextDocumentSyncOptions, TypeDefinitionProviderCapability, @@ -30,7 +31,7 @@ pub fn server_capabilities(config: &Config) -> ServerCapabilities { resolve_provider: completions_resolve_provider(&config.caps), trigger_characters: Some(vec![":".to_string(), ".".to_string(), "'".to_string()]), all_commit_characters: None, - completion_item: None, + completion_item: completion_item(&config.caps), work_done_progress_options: WorkDoneProgressOptions { work_done_progress: None }, }), signature_help_provider: Some(SignatureHelpOptions { @@ -127,6 +128,19 @@ pub fn server_capabilities(config: &Config) -> ServerCapabilities { } } +pub(crate) fn completion_item( + caps: &ClientCapabilities, +) -> Option { + let label_details_support = caps + .text_document + .as_ref() + .and_then(|it| it.completion.as_ref()) + .and_then(|it| it.completion_item.as_ref()) + .and_then(|it| it.label_details_support)?; + + Some(CompletionOptionsCompletionItem { label_details_support: Some(label_details_support) }) +} + fn completions_resolve_provider(client_caps: &ClientCapabilities) -> Option { if completion_item_edit_resolve(client_caps) { Some(true) diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index e71513034c5c..ca86c5ea0454 100644 --- a/crates/rust-analyzer/src/config.rs +++ b/crates/rust-analyzer/src/config.rs @@ -25,7 +25,7 @@ use serde::{de::DeserializeOwned, Deserialize}; use vfs::AbsPathBuf; use crate::{ - caps::completion_item_edit_resolve, + caps::{completion_item, completion_item_edit_resolve}, diagnostics::DiagnosticsMapConfig, line_index::OffsetEncoding, lsp_ext::supports_utf8, @@ -772,6 +772,10 @@ impl Config { .snippet_support?, false )), + label_details: match completion_item(&self.caps) { + Some(it) => it.label_details_support.unwrap_or(false), + _ => false, + }, } } pub fn assist(&self) -> AssistConfig { diff --git a/crates/rust-analyzer/src/integrated_benchmarks.rs b/crates/rust-analyzer/src/integrated_benchmarks.rs index 036cfe157b44..fca0f956f08e 100644 --- a/crates/rust-analyzer/src/integrated_benchmarks.rs +++ b/crates/rust-analyzer/src/integrated_benchmarks.rs @@ -144,6 +144,7 @@ fn integrated_completion_benchmark() { group: true, skip_glob_imports: true, }, + label_details: false, }; let position = FilePosition { file_id, offset: TextSize::try_from(completion_offset).unwrap() }; @@ -180,6 +181,7 @@ fn integrated_completion_benchmark() { group: true, skip_glob_imports: true, }, + label_details: false, }; let position = FilePosition { file_id, offset: TextSize::try_from(completion_offset).unwrap() }; diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs index 8dcfff5c71fd..f1f864b4bb97 100644 --- a/crates/rust-analyzer/src/to_proto.rs +++ b/crates/rust-analyzer/src/to_proto.rs @@ -13,6 +13,7 @@ use ide::{ SourceChange, StructureNodeKind, SymbolKind, TextEdit, TextRange, TextSize, }; use itertools::Itertools; +use lsp_types::CompletionItemLabelDetails; use serde_json::to_value; use vfs::AbsPath; @@ -254,6 +255,11 @@ fn completion_item( ..Default::default() }; + if config.completion().label_details { + lsp_item.label_details = + Some(CompletionItemLabelDetails { detail: None, description: lsp_item.detail.clone() }); + } + set_score(&mut lsp_item, max_relevance, item.relevance()); if item.deprecated() { diff --git a/editors/code/package-lock.json b/editors/code/package-lock.json index 3970f4ebb351..4caab8da1849 100644 --- a/editors/code/package-lock.json +++ b/editors/code/package-lock.json @@ -13,7 +13,7 @@ "d3-graphviz": "^4.0.0", "https-proxy-agent": "^5.0.0", "node-fetch": "^2.6.1", - "vscode-languageclient": "^7.1.0-next.5" + "vscode-languageclient": "^8.0.0-next.2" }, "devDependencies": { "@types/glob": "^7.1.4", @@ -3753,39 +3753,39 @@ } }, "node_modules/vscode-jsonrpc": { - "version": "7.0.0-next.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-7.0.0-next.1.tgz", - "integrity": "sha512-dEmliPZGbSyIcEeKRGzosCy7y7zsc8FXg1l5BBOGgMUbemlo3vUnsa2GFqpILJwJvlbvkRcF2QASNwIlKe9J7g==", + "version": "8.0.0-next.2", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.0-next.2.tgz", + "integrity": "sha512-gxUyTBAjmwGkiHW/UaRScre2s4i98P8M7gnc3VB4DrVQUm3vQ0idi2cN9nbkfcjATx+uEt8C22j+MLN/8UzsJA==", "engines": { "node": ">=8.0.0 || >=10.0.0" } }, "node_modules/vscode-languageclient": { - "version": "7.1.0-next.5", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.1.0-next.5.tgz", - "integrity": "sha512-TpzpAhpdCNJHaLzptFRs54xsU6xTmaiVPCse0W0rRB5jJBPjOBKilrFPMMm/sJA0y8Yxa9sOvZaNu6WPg3dYAw==", + "version": "8.0.0-next.2", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.0-next.2.tgz", + "integrity": "sha512-ZmWnfZCwxV/FAci9jVMBnhwtdt9qkItXKqlmAU69pBSBgcr0fRrjEHOnzWG7BcuhxE0kti6/Y9bOEIn1L+OoDQ==", "dependencies": { "minimatch": "^3.0.4", "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.17.0-next.6" + "vscode-languageserver-protocol": "3.17.0-next.8" }, "engines": { - "vscode": "^1.53.0" + "vscode": "^1.58.0" } }, "node_modules/vscode-languageserver-protocol": { - "version": "3.17.0-next.6", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.6.tgz", - "integrity": "sha512-f1kGsoOpISB5jSqQNeMDl2446enxVahyux2e5vZap6pu/TC+2UlvPT4DCR0gPph95KOQZweL9zq1SzLoPdqhuA==", + "version": "3.17.0-next.8", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.8.tgz", + "integrity": "sha512-P89vSuJ+FA5JzFmcOoZN13Ig1yd6LsiPOig0O5m5BSGuO/rplQegCd9J0wKpaTy7trf/SYHRoypnbUBdzy14sg==", "dependencies": { - "vscode-jsonrpc": "7.0.0-next.1", - "vscode-languageserver-types": "3.17.0-next.2" + "vscode-jsonrpc": "8.0.0-next.2", + "vscode-languageserver-types": "3.17.0-next.3" } }, "node_modules/vscode-languageserver-types": { - "version": "3.17.0-next.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.2.tgz", - "integrity": "sha512-L5S2kNLCgYJMVWgsZjBaorMM/6+itAfvOyl6Kv1bgFzDNaUKm9HsnUlehjpWPdV5DqnfJhJ5E03Z+/3Mw8ii+Q==" + "version": "3.17.0-next.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.3.tgz", + "integrity": "sha512-VQcXnhKYxUW6OiRMhG++SzmZYMJwusXknJGd+FfdOnS1yHAo734OHyR0e2eEHDlv0/oWc8RZPgx/VKSKyondVg==" }, "node_modules/vscode-test": { "version": "1.5.2", @@ -6818,33 +6818,33 @@ } }, "vscode-jsonrpc": { - "version": "7.0.0-next.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-7.0.0-next.1.tgz", - "integrity": "sha512-dEmliPZGbSyIcEeKRGzosCy7y7zsc8FXg1l5BBOGgMUbemlo3vUnsa2GFqpILJwJvlbvkRcF2QASNwIlKe9J7g==" + "version": "8.0.0-next.2", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.0-next.2.tgz", + "integrity": "sha512-gxUyTBAjmwGkiHW/UaRScre2s4i98P8M7gnc3VB4DrVQUm3vQ0idi2cN9nbkfcjATx+uEt8C22j+MLN/8UzsJA==" }, "vscode-languageclient": { - "version": "7.1.0-next.5", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.1.0-next.5.tgz", - "integrity": "sha512-TpzpAhpdCNJHaLzptFRs54xsU6xTmaiVPCse0W0rRB5jJBPjOBKilrFPMMm/sJA0y8Yxa9sOvZaNu6WPg3dYAw==", + "version": "8.0.0-next.2", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.0-next.2.tgz", + "integrity": "sha512-ZmWnfZCwxV/FAci9jVMBnhwtdt9qkItXKqlmAU69pBSBgcr0fRrjEHOnzWG7BcuhxE0kti6/Y9bOEIn1L+OoDQ==", "requires": { "minimatch": "^3.0.4", "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.17.0-next.6" + "vscode-languageserver-protocol": "3.17.0-next.8" } }, "vscode-languageserver-protocol": { - "version": "3.17.0-next.6", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.6.tgz", - "integrity": "sha512-f1kGsoOpISB5jSqQNeMDl2446enxVahyux2e5vZap6pu/TC+2UlvPT4DCR0gPph95KOQZweL9zq1SzLoPdqhuA==", + "version": "3.17.0-next.8", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.8.tgz", + "integrity": "sha512-P89vSuJ+FA5JzFmcOoZN13Ig1yd6LsiPOig0O5m5BSGuO/rplQegCd9J0wKpaTy7trf/SYHRoypnbUBdzy14sg==", "requires": { - "vscode-jsonrpc": "7.0.0-next.1", - "vscode-languageserver-types": "3.17.0-next.2" + "vscode-jsonrpc": "8.0.0-next.2", + "vscode-languageserver-types": "3.17.0-next.3" } }, "vscode-languageserver-types": { - "version": "3.17.0-next.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.2.tgz", - "integrity": "sha512-L5S2kNLCgYJMVWgsZjBaorMM/6+itAfvOyl6Kv1bgFzDNaUKm9HsnUlehjpWPdV5DqnfJhJ5E03Z+/3Mw8ii+Q==" + "version": "3.17.0-next.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.3.tgz", + "integrity": "sha512-VQcXnhKYxUW6OiRMhG++SzmZYMJwusXknJGd+FfdOnS1yHAo734OHyR0e2eEHDlv0/oWc8RZPgx/VKSKyondVg==" }, "vscode-test": { "version": "1.5.2", diff --git a/editors/code/package.json b/editors/code/package.json index 453abb6b1cf6..33c07e536a59 100644 --- a/editors/code/package.json +++ b/editors/code/package.json @@ -38,7 +38,7 @@ "dependencies": { "https-proxy-agent": "^5.0.0", "node-fetch": "^2.6.1", - "vscode-languageclient": "^7.1.0-next.5", + "vscode-languageclient": "^8.0.0-next.2", "d3": "^7.0.0", "d3-graphviz": "^4.0.0" },