Skip to content

Commit d83b267

Browse files
committed
Add cwd to CargoRunnable
1 parent 6259991 commit d83b267

File tree

3 files changed

+14
-0
lines changed

3 files changed

+14
-0
lines changed

src/tools/rust-analyzer/crates/rust-analyzer/src/handlers/request.rs

+7
Original file line numberDiff line numberDiff line change
@@ -860,6 +860,11 @@ pub(crate) fn handle_runnables(
860860
if cmd == "run" && spec.target_kind != TargetKind::Bin {
861861
continue;
862862
}
863+
let cwd = if cmd != "test" || spec.target_kind == TargetKind::Bin {
864+
spec.workspace_root.clone()
865+
} else {
866+
spec.cargo_toml.parent().to_path_buf()
867+
};
863868
let mut cargo_args =
864869
vec![cmd.to_owned(), "--package".to_owned(), spec.package.clone()];
865870
let all_targets = cmd != "run" && !is_crate_no_std;
@@ -876,6 +881,7 @@ pub(crate) fn handle_runnables(
876881
kind: lsp_ext::RunnableKind::Cargo,
877882
args: lsp_ext::CargoRunnable {
878883
workspace_root: Some(spec.workspace_root.clone().into()),
884+
cwd: Some(cwd.into()),
879885
override_cargo: config.override_cargo.clone(),
880886
cargo_args,
881887
cargo_extra_args: config.cargo_extra_args.clone(),
@@ -893,6 +899,7 @@ pub(crate) fn handle_runnables(
893899
kind: lsp_ext::RunnableKind::Cargo,
894900
args: lsp_ext::CargoRunnable {
895901
workspace_root: None,
902+
cwd: None,
896903
override_cargo: config.override_cargo,
897904
cargo_args: vec!["check".to_owned(), "--workspace".to_owned()],
898905
cargo_extra_args: config.cargo_extra_args,

src/tools/rust-analyzer/crates/rust-analyzer/src/lsp/ext.rs

+2
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,8 @@ pub struct CargoRunnable {
441441
pub override_cargo: Option<String>,
442442
#[serde(skip_serializing_if = "Option::is_none")]
443443
pub workspace_root: Option<PathBuf>,
444+
#[serde(skip_serializing_if = "Option::is_none")]
445+
pub cwd: Option<PathBuf>,
444446
// command, --package and --lib stuff
445447
pub cargo_args: Vec<String>,
446448
// user-specified additional cargo args, like `--release`.

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

+5
Original file line numberDiff line numberDiff line change
@@ -1360,6 +1360,10 @@ pub(crate) fn runnable(
13601360
let config = snap.config.runnables();
13611361
let spec = CargoTargetSpec::for_file(snap, runnable.nav.file_id)?;
13621362
let workspace_root = spec.as_ref().map(|it| it.workspace_root.clone());
1363+
let cwd = match runnable.kind {
1364+
ide::RunnableKind::Bin { .. } => workspace_root.clone().map(|it| it.into()),
1365+
_ => spec.as_ref().map(|it| it.cargo_toml.parent().into()),
1366+
};
13631367
let target = spec.as_ref().map(|s| s.target.clone());
13641368
let (cargo_args, executable_args) =
13651369
CargoTargetSpec::runnable_args(snap, spec, &runnable.kind, &runnable.cfg);
@@ -1372,6 +1376,7 @@ pub(crate) fn runnable(
13721376
kind: lsp_ext::RunnableKind::Cargo,
13731377
args: lsp_ext::CargoRunnable {
13741378
workspace_root: workspace_root.map(|it| it.into()),
1379+
cwd,
13751380
override_cargo: config.override_cargo,
13761381
cargo_args,
13771382
cargo_extra_args: config.cargo_extra_args,

0 commit comments

Comments
 (0)