about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/tools/rust-analyzer/crates/hir-def/src/body/pretty.rs18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/tools/rust-analyzer/crates/hir-def/src/body/pretty.rs b/src/tools/rust-analyzer/crates/hir-def/src/body/pretty.rs
index cbb5ca887f4..9aff712f4ce 100644
--- a/src/tools/rust-analyzer/crates/hir-def/src/body/pretty.rs
+++ b/src/tools/rust-analyzer/crates/hir-def/src/body/pretty.rs
@@ -48,22 +48,36 @@ pub(super) fn print_body_hir(db: &dyn DefDatabase, body: &Body, owner: DefWithBo
     let mut p = Printer { db, body, buf: header, indent_level: 0, needs_indent: false };
     if let DefWithBodyId::FunctionId(it) = owner {
         p.buf.push('(');
-        let params = &db.function_data(it).params;
-        let mut params = params.iter();
+        let function_data = &db.function_data(it);
+        let (mut params, ret_type) = (function_data.params.iter(), &function_data.ret_type);
         if let Some(self_param) = body.self_param {
             p.print_binding(self_param);
             p.buf.push(':');
+            p.buf.push(' ');
             if let Some(ty) = params.next() {
                 p.print_type_ref(ty);
+                p.buf.push(',');
+                p.buf.push(' ');
             }
         }
         body.params.iter().zip(params).for_each(|(&param, ty)| {
             p.print_pat(param);
             p.buf.push(':');
+            p.buf.push(' ');
             p.print_type_ref(ty);
+            p.buf.push(',');
+            p.buf.push(' ');
         });
+        // remove the last ", " in param list
+        p.buf.truncate(p.buf.len() - 2);
         p.buf.push(')');
         p.buf.push(' ');
+        // return type
+        p.buf.push('-');
+        p.buf.push('>');
+        p.buf.push(' ');
+        p.print_type_ref(ret_type);
+        p.buf.push(' ');
     }
     p.print_expr(body.body_expr);
     if matches!(owner, DefWithBodyId::StaticId(_) | DefWithBodyId::ConstId(_)) {