Skip to content

Commit 27502d5

Browse files
committed
refactor: Use pattern matching for the TargetSpec value
1 parent 3107301 commit 27502d5

File tree

1 file changed

+48
-21
lines changed

1 file changed

+48
-21
lines changed

crates/rust-analyzer/src/lsp/to_proto.rs

Lines changed: 48 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1344,27 +1344,54 @@ pub(crate) fn runnable(
13441344
runnable: Runnable,
13451345
) -> Cancellable<lsp_ext::Runnable> {
13461346
let config = snap.config.runnables();
1347-
let spec = CargoTargetSpec::for_file(snap, runnable.nav.file_id)?;
1348-
let workspace_root = spec.as_ref().map(|it| it.workspace_root.clone());
1349-
let target = spec.as_ref().map(|s| s.target.clone());
1350-
let (cargo_args, executable_args) =
1351-
CargoTargetSpec::runnable_args(snap, spec, &runnable.kind, &runnable.cfg);
1352-
let label = runnable.label(target);
1353-
let location = location_link(snap, None, runnable.nav)?;
1354-
1355-
Ok(lsp_ext::Runnable {
1356-
label,
1357-
location: Some(location),
1358-
kind: lsp_ext::RunnableKind::Cargo,
1359-
args: lsp_ext::CargoRunnable {
1360-
workspace_root: workspace_root.map(|it| it.into()),
1361-
override_cargo: config.override_cargo,
1362-
cargo_args,
1363-
cargo_extra_args: config.cargo_extra_args,
1364-
executable_args,
1365-
expect_test: None,
1366-
},
1367-
})
1347+
let target_spec = CargoTargetSpec::for_file(snap, runnable.nav.file_id)?;
1348+
1349+
match target_spec {
1350+
Some(spec) => {
1351+
let workspace_root = spec.workspace_root.clone();
1352+
let target = spec.target.clone();
1353+
1354+
let (cargo_args, executable_args) =
1355+
CargoTargetSpec::runnable_args(snap, Some(spec), &runnable.kind, &runnable.cfg);
1356+
1357+
let label = runnable.label(Some(target));
1358+
let location = location_link(snap, None, runnable.nav)?;
1359+
1360+
Ok(lsp_ext::Runnable {
1361+
label,
1362+
location: Some(location),
1363+
kind: lsp_ext::RunnableKind::Cargo,
1364+
args: lsp_ext::CargoRunnable {
1365+
workspace_root: Some(workspace_root.into()),
1366+
override_cargo: config.override_cargo,
1367+
cargo_args,
1368+
cargo_extra_args: config.cargo_extra_args,
1369+
executable_args,
1370+
expect_test: None,
1371+
},
1372+
})
1373+
}
1374+
None => {
1375+
let (cargo_args, executable_args) =
1376+
CargoTargetSpec::runnable_args(snap, None, &runnable.kind, &runnable.cfg);
1377+
let label = runnable.label(None);
1378+
let location = location_link(snap, None, runnable.nav)?;
1379+
1380+
Ok(lsp_ext::Runnable {
1381+
label,
1382+
location: Some(location),
1383+
kind: lsp_ext::RunnableKind::Cargo,
1384+
args: lsp_ext::CargoRunnable {
1385+
workspace_root: None,
1386+
override_cargo: config.override_cargo,
1387+
cargo_args,
1388+
cargo_extra_args: config.cargo_extra_args,
1389+
executable_args,
1390+
expect_test: None,
1391+
},
1392+
})
1393+
}
1394+
}
13681395
}
13691396

13701397
pub(crate) fn code_lens(

0 commit comments

Comments
 (0)