Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/render/function.rs')
| -rw-r--r-- | crates/ide-completion/src/render/function.rs | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/crates/ide-completion/src/render/function.rs b/crates/ide-completion/src/render/function.rs index 37486e4d93..4a8a5d5c77 100644 --- a/crates/ide-completion/src/render/function.rs +++ b/crates/ide-completion/src/render/function.rs @@ -50,9 +50,12 @@ fn render( let name = local_name.unwrap_or_else(|| func.name(db)); - let call = match &func_kind { - FuncKind::Method(_, Some(receiver)) => format!("{}.{}", receiver, &name).into(), - _ => name.to_smol_str(), + let (call, escaped_call) = match &func_kind { + FuncKind::Method(_, Some(receiver)) => ( + format!("{}.{}", receiver, &name).into(), + format!("{}.{}", receiver.escaped(), name.escaped()).into(), + ), + _ => (name.to_smol_str(), name.escaped().to_smol_str()), }; let mut item = CompletionItem::new( if func.self_param(db).is_some() { @@ -115,7 +118,15 @@ fn render( if let Some((self_param, params)) = params(ctx.completion, func, &func_kind, has_dot_receiver) { - add_call_parens(&mut item, completion, cap, call, self_param, params); + add_call_parens( + &mut item, + completion, + cap, + call, + escaped_call, + self_param, + params, + ); } } } @@ -142,13 +153,14 @@ pub(super) fn add_call_parens<'b>( ctx: &CompletionContext, cap: SnippetCap, name: SmolStr, + escaped_name: SmolStr, self_param: Option<hir::SelfParam>, params: Vec<hir::Param>, ) -> &'b mut Builder { cov_mark::hit!(inserts_parens_for_function_calls); let (snippet, label_suffix) = if self_param.is_none() && params.is_empty() { - (format!("{}()$0", name), "()") + (format!("{}()$0", escaped_name), "()") } else { builder.trigger_call_info(); let snippet = if let Some(CallableSnippets::FillArguments) = ctx.config.callable { @@ -179,19 +191,19 @@ pub(super) fn add_call_parens<'b>( Some(self_param) => { format!( "{}(${{1:{}}}{}{})$0", - name, + escaped_name, self_param.display(ctx.db), if params.is_empty() { "" } else { ", " }, function_params_snippet ) } None => { - format!("{}({})$0", name, function_params_snippet) + format!("{}({})$0", escaped_name, function_params_snippet) } } } else { cov_mark::hit!(suppress_arg_snippets); - format!("{}($0)", name) + format!("{}($0)", escaped_name) }; (snippet, "(…)") |