about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAndy Russell <arussell123@gmail.com>2022-03-04 16:24:13 -0500
committerAndy Russell <arussell123@gmail.com>2022-03-04 16:44:31 -0500
commit49fab593ad7d91e82ec9b4a5642ec736045a365c (patch)
treeed2cd3c5658354a819b7bc88a7770630134885ea
parent908c17bfa6a55fc78bb9255e02bd53eebf0386dd (diff)
downloadrust-49fab593ad7d91e82ec9b4a5642ec736045a365c.tar.gz
rust-49fab593ad7d91e82ec9b4a5642ec736045a365c.zip
show variadic args in hover function signature
-rw-r--r--crates/hir/src/display.rs5
-rw-r--r--crates/ide/src/hover/tests.rs24
2 files changed, 29 insertions, 0 deletions
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<Output = ...>` 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
@@ -1758,6 +1758,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(
         r#"trait foo$0() {}"#,