diff --git a/crates/ra_ide/src/completion/completion_item.rs b/crates/ra_ide/src/completion/completion_item.rs index 61867c0ffdb..19bbb251703 100644 --- a/crates/ra_ide/src/completion/completion_item.rs +++ b/crates/ra_ide/src/completion/completion_item.rs @@ -47,6 +47,10 @@ pub struct CompletionItem { /// Whether this item is marked as deprecated deprecated: bool, + + /// If completing a function call, ask the editor to show parameter popup + /// after completion. + trigger_call_info: bool, } // We use custom debug for CompletionItem to make `insta`'s diffs more readable. @@ -139,6 +143,7 @@ impl CompletionItem { kind: None, text_edit: None, deprecated: None, + trigger_call_info: None, } } /// What user sees in pop-up in the UI. @@ -177,6 +182,10 @@ impl CompletionItem { pub fn deprecated(&self) -> bool { self.deprecated } + + pub fn trigger_call_info(&self) -> bool { + self.trigger_call_info + } } /// A helper to make `CompletionItem`s. @@ -193,6 +202,7 @@ pub(crate) struct Builder { kind: Option, text_edit: Option, deprecated: Option, + trigger_call_info: Option, } impl Builder { @@ -221,6 +231,7 @@ impl Builder { kind: self.kind, completion_kind: self.completion_kind, deprecated: self.deprecated.unwrap_or(false), + trigger_call_info: self.trigger_call_info.unwrap_or(false), } } pub(crate) fn lookup_by(mut self, lookup: impl Into) -> Builder { @@ -271,6 +282,10 @@ impl Builder { self.deprecated = Some(deprecated); self } + pub(crate) fn trigger_call_info(mut self) -> Builder { + self.trigger_call_info = Some(true); + self + } } impl<'a> Into for Builder { diff --git a/crates/ra_ide/src/completion/presentation.rs b/crates/ra_ide/src/completion/presentation.rs index 841d36c8f87..d6196a5cedc 100644 --- a/crates/ra_ide/src/completion/presentation.rs +++ b/crates/ra_ide/src/completion/presentation.rs @@ -221,6 +221,7 @@ impl Completions { let (snippet, label) = if params.is_empty() || has_self_param && params.len() == 1 { (format!("{}()$0", name), format!("{}()", name)) } else { + builder = builder.trigger_call_info(); let snippet = if ctx .db .feature_flags diff --git a/crates/rust-analyzer/src/conv.rs b/crates/rust-analyzer/src/conv.rs index eeeb33e8f97..fe3b588e4a9 100644 --- a/crates/rust-analyzer/src/conv.rs +++ b/crates/rust-analyzer/src/conv.rs @@ -150,6 +150,16 @@ impl ConvWith<(&LineIndex, LineEndings)> for CompletionItem { additional_text_edits: Some(additional_text_edits), documentation: self.documentation().map(|it| it.conv()), deprecated: Some(self.deprecated()), + command: if self.trigger_call_info() { + let cmd = lsp_types::Command { + title: "triggerParameterHints".into(), + command: "editor.action.triggerParameterHints".into(), + arguments: None, + }; + Some(cmd) + } else { + None + }, ..Default::default() };