From 95a2755aa80aaf9119e172f6b2a61eeb04653eba Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 6 Mar 2020 18:32:40 +0100 Subject: Concise mode for parameter hints This works around VS Code bug where it tries to cram everything in a tiny popup, and brings experience closer to Intellij. --- crates/ra_ide_db/src/feature_flags.rs | 1 + crates/rust-analyzer/src/conv.rs | 29 ++++++++++++++------------ crates/rust-analyzer/src/main_loop/handlers.rs | 8 +++++-- 3 files changed, 23 insertions(+), 15 deletions(-) (limited to 'crates') diff --git a/crates/ra_ide_db/src/feature_flags.rs b/crates/ra_ide_db/src/feature_flags.rs index d9c9d6cd2..74a3a1cd9 100644 --- a/crates/ra_ide_db/src/feature_flags.rs +++ b/crates/ra_ide_db/src/feature_flags.rs @@ -56,6 +56,7 @@ impl Default for FeatureFlags { ("completion.insertion.add-call-parenthesis", true), ("completion.insertion.add-argument-sippets", true), ("completion.enable-postfix", true), + ("call-info.full", true), ("notifications.workspace-loaded", true), ("notifications.cargo-toml-not-found", true), ]) diff --git a/crates/rust-analyzer/src/conv.rs b/crates/rust-analyzer/src/conv.rs index fe3b588e4..a2d68c344 100644 --- a/crates/rust-analyzer/src/conv.rs +++ b/crates/rust-analyzer/src/conv.rs @@ -3,10 +3,10 @@ use lsp_types::{ self, CreateFile, DiagnosticSeverity, DocumentChangeOperation, DocumentChanges, Documentation, - Location, LocationLink, MarkupContent, MarkupKind, Position, Range, RenameFile, ResourceOp, - SemanticTokenModifier, SemanticTokenType, SymbolKind, TextDocumentEdit, TextDocumentIdentifier, - TextDocumentItem, TextDocumentPositionParams, Url, VersionedTextDocumentIdentifier, - WorkspaceEdit, + Location, LocationLink, MarkupContent, MarkupKind, ParameterInformation, ParameterLabel, + Position, Range, RenameFile, ResourceOp, SemanticTokenModifier, SemanticTokenType, + SignatureInformation, SymbolKind, TextDocumentEdit, TextDocumentIdentifier, TextDocumentItem, + TextDocumentPositionParams, Url, VersionedTextDocumentIdentifier, WorkspaceEdit, }; use ra_ide::{ translate_offset_with_edit, CompletionItem, CompletionItemKind, FileId, FilePosition, @@ -220,17 +220,20 @@ impl Conv for ra_ide::Documentation { } } -impl Conv for ra_ide::FunctionSignature { +impl ConvWith for ra_ide::FunctionSignature { type Output = lsp_types::SignatureInformation; - fn conv(self) -> Self::Output { - use lsp_types::{ParameterInformation, ParameterLabel, SignatureInformation}; - - let label = self.to_string(); - - let documentation = self.doc.map(|it| it.conv()); + fn conv_with(self, concise: bool) -> Self::Output { + let (label, documentation, params) = if concise { + let mut params = self.parameters; + if self.has_self_param { + params.remove(0); + } + (params.join(", "), None, params) + } else { + (self.to_string(), self.doc.map(|it| it.conv()), self.parameters) + }; - let parameters: Vec = self - .parameters + let parameters: Vec = params .into_iter() .map(|param| ParameterInformation { label: ParameterLabel::Simple(param), diff --git a/crates/rust-analyzer/src/main_loop/handlers.rs b/crates/rust-analyzer/src/main_loop/handlers.rs index b5db1fd38..b498c90c9 100644 --- a/crates/rust-analyzer/src/main_loop/handlers.rs +++ b/crates/rust-analyzer/src/main_loop/handlers.rs @@ -459,8 +459,12 @@ pub fn handle_signature_help( let _p = profile("handle_signature_help"); let position = params.try_conv_with(&world)?; if let Some(call_info) = world.analysis().call_info(position)? { - let active_parameter = call_info.active_parameter.map(|it| it as i64); - let sig_info = call_info.signature.conv(); + let concise = !world.analysis().feature_flags().get("call-info.full"); + let mut active_parameter = call_info.active_parameter.map(|it| it as i64); + if concise && call_info.signature.has_self_param { + active_parameter = active_parameter.map(|it| it.saturating_sub(1)); + } + let sig_info = call_info.signature.conv_with(concise); Ok(Some(req::SignatureHelp { signatures: vec![sig_info], -- cgit v1.2.3 From 80909f7698edd972e7bb7e3b255c9a12d78cd9a6 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 6 Mar 2020 18:38:56 +0100 Subject: Don't creat public APIs with typos --- crates/ra_ide/src/completion/presentation.rs | 2 +- crates/ra_ide_db/src/feature_flags.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'crates') diff --git a/crates/ra_ide/src/completion/presentation.rs b/crates/ra_ide/src/completion/presentation.rs index d6196a5ce..aada4d025 100644 --- a/crates/ra_ide/src/completion/presentation.rs +++ b/crates/ra_ide/src/completion/presentation.rs @@ -225,7 +225,7 @@ impl Completions { let snippet = if ctx .db .feature_flags - .get("completion.insertion.add-argument-sippets") + .get("completion.insertion.add-argument-snippets") { let to_skip = if has_self_param { 1 } else { 0 }; let function_params_snippet = join( diff --git a/crates/ra_ide_db/src/feature_flags.rs b/crates/ra_ide_db/src/feature_flags.rs index 74a3a1cd9..968415072 100644 --- a/crates/ra_ide_db/src/feature_flags.rs +++ b/crates/ra_ide_db/src/feature_flags.rs @@ -54,7 +54,7 @@ impl Default for FeatureFlags { FeatureFlags::new(&[ ("lsp.diagnostics", true), ("completion.insertion.add-call-parenthesis", true), - ("completion.insertion.add-argument-sippets", true), + ("completion.insertion.add-argument-snippets", true), ("completion.enable-postfix", true), ("call-info.full", true), ("notifications.workspace-loaded", true), -- cgit v1.2.3