about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2024-05-26 09:11:55 +0000
committerbors <bors@rust-lang.org>2024-05-26 09:11:55 +0000
commitf7ca8a6d66a021b6748108c7c0cf8cce4d78b534 (patch)
treeeaed29f2e3f3d0f6e00e106669d9481aab749791
parentbd9cc02d1073537ca50f6d2ff8802b4baf5fcd45 (diff)
parentafa8dfc51faa9304e03cb79c84c7e99bd7cf2f42 (diff)
downloadrust-f7ca8a6d66a021b6748108c7c0cf8cce4d78b534.tar.gz
rust-f7ca8a6d66a021b6748108c7c0cf8cce4d78b534.zip
Auto merge of #17296 - mathew-horner:no-clone-target, r=Veykril
Avoid clone when constructing runnable label.

I stumbled across this when reading this code. This seems like an unnecessary allocation (though likely small?)
-rw-r--r--src/tools/rust-analyzer/crates/ide/src/runnables.rs2
-rw-r--r--src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/to_proto.rs4
2 files changed, 3 insertions, 3 deletions
diff --git a/src/tools/rust-analyzer/crates/ide/src/runnables.rs b/src/tools/rust-analyzer/crates/ide/src/runnables.rs
index 64ffa591017..2feea09840f 100644
--- a/src/tools/rust-analyzer/crates/ide/src/runnables.rs
+++ b/src/tools/rust-analyzer/crates/ide/src/runnables.rs
@@ -79,7 +79,7 @@ impl RunnableKind {
 
 impl Runnable {
     // test package::module::testname
-    pub fn label(&self, target: Option<String>) -> String {
+    pub fn label(&self, target: Option<&str>) -> String {
         match &self.kind {
             RunnableKind::Test { test_id, .. } => format!("test {test_id}"),
             RunnableKind::TestMod { path } => format!("test-mod {path}"),
diff --git a/src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/to_proto.rs b/src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/to_proto.rs
index 1d7062c9897..86368c9eea8 100644
--- a/src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/to_proto.rs
+++ b/src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/to_proto.rs
@@ -1364,10 +1364,10 @@ pub(crate) fn runnable(
         ide::RunnableKind::Bin { .. } => workspace_root.clone().map(|it| it.into()),
         _ => spec.as_ref().map(|it| it.cargo_toml.parent().into()),
     };
-    let target = spec.as_ref().map(|s| s.target.clone());
+    let target = spec.as_ref().map(|s| s.target.as_str());
+    let label = runnable.label(target);
     let (cargo_args, executable_args) =
         CargoTargetSpec::runnable_args(snap, spec, &runnable.kind, &runnable.cfg);
-    let label = runnable.label(target);
     let location = location_link(snap, None, runnable.nav)?;
 
     Ok(lsp_ext::Runnable {