about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2025-03-16 14:56:36 +0100
committerLukas Wirth <lukastw97@gmail.com>2025-03-16 15:19:25 +0100
commita51070ba88bb846fae253bf905a98654804dc62c (patch)
treeb570af1d443d3f3c5084a5240aeb668b65323a24
parent98f346f46a5405cdd96e7fb497c8623588a69401 (diff)
downloadrust-a51070ba88bb846fae253bf905a98654804dc62c.tar.gz
rust-a51070ba88bb846fae253bf905a98654804dc62c.zip
minor: Remove unnecessary allocations in `function::params_display`
-rw-r--r--src/tools/rust-analyzer/crates/ide-completion/src/render/function.rs32
1 files changed, 16 insertions, 16 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-completion/src/render/function.rs b/src/tools/rust-analyzer/crates/ide-completion/src/render/function.rs
index e013fe4cb7f..2fe517fa8cd 100644
--- a/src/tools/rust-analyzer/crates/ide-completion/src/render/function.rs
+++ b/src/tools/rust-analyzer/crates/ide-completion/src/render/function.rs
@@ -320,7 +320,9 @@ fn detail(ctx: &CompletionContext<'_>, func: hir::Function) -> String {
         format_to!(detail, "unsafe ");
     }
 
-    format_to!(detail, "fn({})", params_display(ctx, func));
+    detail.push_str("fn(");
+    params_display(ctx, &mut detail, func);
+    detail.push(')');
     if !ret_ty.is_unit() {
         format_to!(detail, " -> {}", ret_ty.display(ctx.db, ctx.display_target));
     }
@@ -342,31 +344,29 @@ fn detail_full(ctx: &CompletionContext<'_>, func: hir::Function) -> String {
     detail
 }
 
-fn params_display(ctx: &CompletionContext<'_>, func: hir::Function) -> String {
-    let mut params = if let Some(self_param) = func.self_param(ctx.db) {
+fn params_display(ctx: &CompletionContext<'_>, detail: &mut String, func: hir::Function) {
+    if let Some(self_param) = func.self_param(ctx.db) {
+        format_to!(detail, "{}", self_param.display(ctx.db, ctx.display_target));
         let assoc_fn_params = func.assoc_fn_params(ctx.db);
         let params = assoc_fn_params
             .iter()
             .skip(1) // skip the self param because we are manually handling that
             .map(|p| p.ty().display(ctx.db, ctx.display_target));
-        format!(
-            "{}{}",
-            self_param.display(ctx.db, ctx.display_target),
-            params.format_with("", |display, f| {
-                f(&", ")?;
-                f(&display)
-            })
-        )
+        for param in params {
+            format_to!(detail, ", {}", param);
+        }
     } else {
         let assoc_fn_params = func.assoc_fn_params(ctx.db);
-        assoc_fn_params.iter().map(|p| p.ty().display(ctx.db, ctx.display_target)).join(", ")
-    };
+        format_to!(
+            detail,
+            "{}",
+            assoc_fn_params.iter().map(|p| p.ty().display(ctx.db, ctx.display_target)).format(", ")
+        );
+    }
 
     if func.is_varargs(ctx.db) {
-        params.push_str(", ...");
+        detail.push_str(", ...");
     }
-
-    params
 }
 
 fn params(