diff --git a/crates/ide/src/completion/complete_qualified_path.rs b/crates/ide/src/completion/complete_qualified_path.rs index 79de5079278..00e89f0fdf2 100644 --- a/crates/ide/src/completion/complete_qualified_path.rs +++ b/crates/ide/src/completion/complete_qualified_path.rs @@ -730,4 +730,26 @@ fn f() {} expect![[""]], ); } + + #[test] + fn completes_function() { + check( + r#" +fn foo( + a: i32, + b: i32 +) { + +} + +fn main() { + fo<|> +} +"#, + expect![[r#" + fn foo(…) fn foo(a: i32, b: i32) + fn main() fn main() + "#]], + ); + } } diff --git a/crates/ide/src/display.rs b/crates/ide/src/display.rs index 41b5bdc490c..2484dbbf12b 100644 --- a/crates/ide/src/display.rs +++ b/crates/ide/src/display.rs @@ -41,7 +41,14 @@ pub(crate) fn function_declaration(node: &ast::Fn) -> String { format_to!(buf, "{}", type_params); } if let Some(param_list) = node.param_list() { - format_to!(buf, "{}", param_list); + let params: Vec = param_list + .self_param() + .into_iter() + .map(|self_param| self_param.to_string()) + .chain(param_list.params().map(|param| param.to_string())) + .collect(); + // Useful to inline parameters + format_to!(buf, "({})", params.join(", ")); } if let Some(ret_type) = node.ret_type() { if ret_type.ty().is_some() {