diff --git a/crates/hir/src/display.rs b/crates/hir/src/display.rs index d411b9d71b1..b7ea42236ee 100644 --- a/crates/hir/src/display.rs +++ b/crates/hir/src/display.rs @@ -86,6 +86,11 @@ impl HirDisplay for Function { // The former will ignore lifetime arguments currently. type_ref.hir_fmt(f)?; } + + if data.is_varargs() { + write!(f, ", ...")?; + } + write!(f, ")")?; // `FunctionData::ret_type` will be `::core::future::Future` for async fns. diff --git a/crates/ide/src/hover/tests.rs b/crates/ide/src/hover/tests.rs index 9d516fdd6fc..e7fad48080d 100644 --- a/crates/ide/src/hover/tests.rs +++ b/crates/ide/src/hover/tests.rs @@ -1757,6 +1757,30 @@ fn foo() { let bar = Bar; bar.fo$0o(); } ); } +#[test] +fn test_hover_variadic_function() { + check( + r#" +extern "C" { + pub fn foo(bar: i32, ...) -> i32; +} + +fn main() { let foo_test = unsafe { fo$0o(1, 2, 3); } } +"#, + expect![[r#" + *foo* + + ```rust + test + ``` + + ```rust + pub unsafe fn foo(bar: i32, ...) -> i32 + ``` + "#]], + ); +} + #[test] fn test_hover_trait_has_impl_action() { check_actions(