From: bors[bot] <26634292+bors[bot]@users.noreply.github.com> Date: Tue, 1 Feb 2022 12:35:52 +0000 (+0000) Subject: Merge #11391 X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=5ee21fee9c503e68c059433d72be06c18fe3a663;hp=9b88956bd574b9c1d180cb5851f349c5af809d23;p=rust.git Merge #11391 11391: minor: Add some debug traces for cfg fetching r=Veykril a=Veykril bors r+ Co-authored-by: Lukas Wirth --- diff --git a/crates/project_model/src/cfg_flag.rs b/crates/project_model/src/cfg_flag.rs index bfdfd458fbf..f3dd8f51333 100644 --- a/crates/project_model/src/cfg_flag.rs +++ b/crates/project_model/src/cfg_flag.rs @@ -1,7 +1,7 @@ //! Parsing of CfgFlags as command line arguments, as in //! //! rustc main.rs --cfg foo --cfg 'feature="bar"' -use std::str::FromStr; +use std::{fmt, str::FromStr}; use cfg::CfgOptions; @@ -48,3 +48,16 @@ fn extend>(&mut self, iter: T) { } } } + +impl fmt::Display for CfgFlag { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + CfgFlag::Atom(atom) => f.write_str(atom), + CfgFlag::KeyValue { key, value } => { + f.write_str(key)?; + f.write_str("=")?; + f.write_str(value) + } + } + } +} diff --git a/crates/project_model/src/rustc_cfg.rs b/crates/project_model/src/rustc_cfg.rs index 669aea0cd13..17e244d0649 100644 --- a/crates/project_model/src/rustc_cfg.rs +++ b/crates/project_model/src/rustc_cfg.rs @@ -19,38 +19,42 @@ pub(crate) fn get(cargo_toml: Option<&ManifestPath>, target: Option<&str>) -> Ve } match get_rust_cfgs(cargo_toml, target) { - Ok(rustc_cfgs) => res.extend(rustc_cfgs.lines().map(|it| it.parse().unwrap())), - Err(e) => tracing::error!("failed to get rustc cfgs: {:#}", e), + Ok(rustc_cfgs) => { + tracing::debug!( + "rustc cfgs found: {:?}", + rustc_cfgs + .lines() + .map(|it| it.parse::().map(|it| it.to_string())) + .collect::>() + ); + res.extend(rustc_cfgs.lines().filter_map(|it| it.parse().ok())); + } + Err(e) => tracing::error!("failed to get rustc cfgs: {e:?}"), } res } fn get_rust_cfgs(cargo_toml: Option<&ManifestPath>, target: Option<&str>) -> Result { - let cargo_rust_cfgs = match cargo_toml { - Some(cargo_toml) => { - let mut cargo_config = Command::new(toolchain::cargo()); - cargo_config - .current_dir(cargo_toml.parent()) - .args(&["-Z", "unstable-options", "rustc", "--print", "cfg"]) - .env("RUSTC_BOOTSTRAP", "1"); - if let Some(target) = target { - cargo_config.args(&["--target", target]); - } - utf8_stdout(cargo_config).ok() + if let Some(cargo_toml) = cargo_toml { + let mut cargo_config = Command::new(toolchain::cargo()); + cargo_config + .current_dir(cargo_toml.parent()) + .args(&["-Z", "unstable-options", "rustc", "--print", "cfg"]) + .env("RUSTC_BOOTSTRAP", "1"); + if let Some(target) = target { + cargo_config.args(&["--target", target]); } - None => None, - }; - match cargo_rust_cfgs { - Some(stdout) => Ok(stdout), - None => { - // using unstable cargo features failed, fall back to using plain rustc - let mut cmd = Command::new(toolchain::rustc()); - cmd.args(&["--print", "cfg", "-O"]); - if let Some(target) = target { - cmd.args(&["--target", target]); - } - utf8_stdout(cmd) + match utf8_stdout(cargo_config) { + Ok(it) => return Ok(it), + Err(e) => tracing::debug!("{e:?}: falling back to querying rustc for cfgs"), } } + // using unstable cargo features failed, fall back to using plain rustc + let mut cmd = Command::new(toolchain::rustc()); + cmd.args(&["--print", "cfg", "-O"]); + if let Some(target) = target { + cmd.args(&["--target", target]); + } + utf8_stdout(cmd) }