diff --git a/crates/project_model/src/cargo_workspace.rs b/crates/project_model/src/cargo_workspace.rs index 739f29b014..13ff20c8c6 100644 --- a/crates/project_model/src/cargo_workspace.rs +++ b/crates/project_model/src/cargo_workspace.rs @@ -251,6 +251,7 @@ struct PackageMetadata { impl CargoWorkspace { pub fn fetch_metadata( cargo_toml: &ManifestPath, + current_dir: &AbsPath, config: &CargoConfig, progress: &dyn Fn(String), ) -> Result { @@ -275,7 +276,7 @@ impl CargoWorkspace { meta.features(CargoOpt::SomeFeatures(config.features.clone())); } } - meta.current_dir(cargo_toml.parent().as_os_str()); + meta.current_dir(current_dir.as_os_str()); if let Some(target) = target { meta.other_options(vec![String::from("--filter-platform"), target]); diff --git a/crates/project_model/src/workspace.rs b/crates/project_model/src/workspace.rs index cb79ce08ba..339fdfcc9b 100644 --- a/crates/project_model/src/workspace.rs +++ b/crates/project_model/src/workspace.rs @@ -160,14 +160,19 @@ impl ProjectWorkspace { cmd })?; - let meta = CargoWorkspace::fetch_metadata(&cargo_toml, config, progress) - .with_context(|| { - format!( - "Failed to read Cargo metadata from Cargo.toml file {}, {}", - cargo_toml.display(), - cargo_version - ) - })?; + let meta = CargoWorkspace::fetch_metadata( + &cargo_toml, + cargo_toml.parent(), + config, + progress, + ) + .with_context(|| { + format!( + "Failed to read Cargo metadata from Cargo.toml file {}, {}", + cargo_toml.display(), + cargo_version + ) + })?; let cargo = CargoWorkspace::new(meta); let sysroot = if config.no_sysroot { @@ -189,10 +194,15 @@ impl ProjectWorkspace { let rustc = match rustc_dir { Some(rustc_dir) => Some({ - let meta = CargoWorkspace::fetch_metadata(&rustc_dir, config, progress) - .with_context(|| { - "Failed to read Cargo metadata for Rust sources".to_string() - })?; + let meta = CargoWorkspace::fetch_metadata( + &rustc_dir, + cargo_toml.parent(), + config, + progress, + ) + .with_context(|| { + "Failed to read Cargo metadata for Rust sources".to_string() + })?; CargoWorkspace::new(meta) }), None => None,