diff options
| author | Lukas Wirth <lukastw97@gmail.com> | 2022-02-01 13:32:09 +0100 |
|---|---|---|
| committer | Lukas Wirth <lukastw97@gmail.com> | 2022-02-01 13:35:34 +0100 |
| commit | dbd5a70ea3b806c94fcbb37bb68decf63a9fe968 (patch) | |
| tree | e622cec88fb39c0cfd9a718382d45dd162ae318e | |
| parent | fcdced115e3b101ed168b175fa63a2a07c1e839c (diff) | |
| download | rust-dbd5a70ea3b806c94fcbb37bb68decf63a9fe968.tar.gz rust-dbd5a70ea3b806c94fcbb37bb68decf63a9fe968.zip | |
minor: Add some debug traces for cfg fetching
| -rw-r--r-- | crates/project_model/src/cfg_flag.rs | 15 | ||||
| -rw-r--r-- | crates/project_model/src/rustc_cfg.rs | 54 |
2 files changed, 43 insertions, 26 deletions
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 @@ impl Extend<CfgFlag> for CfgOptions { } } } + +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::<CfgFlag>().map(|it| it.to_string())) + .collect::<Vec<_>>() + ); + 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<String> { - 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) } |
