Skip to content

Commit b0041b4

Browse files
committed
refactor: Use pattern matching for the TargetSpec value
1 parent ad51a17 commit b0041b4

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
@@ -1347,27 +1347,54 @@ pub(crate) fn runnable(
13471347
runnable: Runnable,
13481348
) -> Cancellable<lsp_ext::Runnable> {
13491349
let config = snap.config.runnables();
1350-
let spec = CargoTargetSpec::for_file(snap, runnable.nav.file_id)?;
1351-
let workspace_root = spec.as_ref().map(|it| it.workspace_root.clone());
1352-
let target = spec.as_ref().map(|s| s.target.clone());
1353-
let (cargo_args, executable_args) =
1354-
CargoTargetSpec::runnable_args(snap, spec, &runnable.kind, &runnable.cfg);
1355-
let label = runnable.label(target);
1356-
let location = location_link(snap, None, runnable.nav)?;
1357-
1358-
Ok(lsp_ext::Runnable {
1359-
label,
1360-
location: Some(location),
1361-
kind: lsp_ext::RunnableKind::Cargo,
1362-
args: lsp_ext::CargoRunnable {
1363-
workspace_root: workspace_root.map(|it| it.into()),
1364-
override_cargo: config.override_cargo,
1365-
cargo_args,
1366-
cargo_extra_args: config.cargo_extra_args,
1367-
executable_args,
1368-
expect_test: None,
1369-
},
1370-
})
1350+
let target_spec = CargoTargetSpec::for_file(snap, runnable.nav.file_id)?;
1351+
1352+
match target_spec {
1353+
Some(spec) => {
1354+
let workspace_root = spec.workspace_root.clone();
1355+
let target = spec.target.clone();
1356+
1357+
let (cargo_args, executable_args) =
1358+
CargoTargetSpec::runnable_args(snap, Some(spec), &runnable.kind, &runnable.cfg);
1359+
1360+
let label = runnable.label(Some(target));
1361+
let location = location_link(snap, None, runnable.nav)?;
1362+
1363+
Ok(lsp_ext::Runnable {
1364+
label,
1365+
location: Some(location),
1366+
kind: lsp_ext::RunnableKind::Cargo,
1367+
args: lsp_ext::CargoRunnable {
1368+
workspace_root: Some(workspace_root.into()),
1369+
override_cargo: config.override_cargo,
1370+
cargo_args,
1371+
cargo_extra_args: config.cargo_extra_args,
1372+
executable_args,
1373+
expect_test: None,
1374+
},
1375+
})
1376+
}
1377+
None => {
1378+
let (cargo_args, executable_args) =
1379+
CargoTargetSpec::runnable_args(snap, None, &runnable.kind, &runnable.cfg);
1380+
let label = runnable.label(None);
1381+
let location = location_link(snap, None, runnable.nav)?;
1382+
1383+
Ok(lsp_ext::Runnable {
1384+
label,
1385+
location: Some(location),
1386+
kind: lsp_ext::RunnableKind::Cargo,
1387+
args: lsp_ext::CargoRunnable {
1388+
workspace_root: None,
1389+
override_cargo: config.override_cargo,
1390+
cargo_args,
1391+
cargo_extra_args: config.cargo_extra_args,
1392+
executable_args,
1393+
expect_test: None,
1394+
},
1395+
})
1396+
}
1397+
}
13711398
}
13721399

13731400
pub(crate) fn code_lens(

0 commit comments

Comments
 (0)