Merge #10542
10542: Use workspace cargo to fetch rust source's metadata r=lnicola a=Alexendoo Previously the detected cargo is the global one, as it uses the directory of the rust source which doesn't pick up the local override This fixes the case in clippy where the local rust toolchain is a recent nightly that has a 2021 edition Cargo.toml. The global (stable) cargo returns an error attempting to parse it Fixes #10445 Co-authored-by: Alex Macleod <alex@macleod.io>
This commit is contained in:
commit
3c468ab2fc
@ -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<cargo_metadata::Metadata> {
|
||||
@ -275,7 +276,7 @@ pub fn fetch_metadata(
|
||||
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]);
|
||||
|
@ -160,7 +160,12 @@ pub fn load(
|
||||
cmd
|
||||
})?;
|
||||
|
||||
let meta = CargoWorkspace::fetch_metadata(&cargo_toml, config, progress)
|
||||
let meta = CargoWorkspace::fetch_metadata(
|
||||
&cargo_toml,
|
||||
cargo_toml.parent(),
|
||||
config,
|
||||
progress,
|
||||
)
|
||||
.with_context(|| {
|
||||
format!(
|
||||
"Failed to read Cargo metadata from Cargo.toml file {}, {}",
|
||||
@ -189,7 +194,12 @@ pub fn load(
|
||||
|
||||
let rustc = match rustc_dir {
|
||||
Some(rustc_dir) => Some({
|
||||
let meta = CargoWorkspace::fetch_metadata(&rustc_dir, config, progress)
|
||||
let meta = CargoWorkspace::fetch_metadata(
|
||||
&rustc_dir,
|
||||
cargo_toml.parent(),
|
||||
config,
|
||||
progress,
|
||||
)
|
||||
.with_context(|| {
|
||||
"Failed to read Cargo metadata for Rust sources".to_string()
|
||||
})?;
|
||||
|
Loading…
Reference in New Issue
Block a user