diff --git a/compiler/rustc_lint/src/context/diagnostics/check_cfg.rs b/compiler/rustc_lint/src/context/diagnostics/check_cfg.rs index 72cb1dac9388b..a839423995ded 100644 --- a/compiler/rustc_lint/src/context/diagnostics/check_cfg.rs +++ b/compiler/rustc_lint/src/context/diagnostics/check_cfg.rs @@ -41,6 +41,15 @@ fn check_cfg_expected_note( note } +fn to_check_cfg_arg(name: Symbol, value: Option<(Symbol, Span)>, with_quotes: bool) -> String { + if let Some((value, _value_span)) = value { + let pre = if with_quotes { "\\" } else { "" }; + format!("cfg({name}, values({pre}\"{value}{pre}\"))") + } else { + format!("cfg({name})") + } +} + pub(super) fn unexpected_cfg_name( sess: &Session, diag: &mut Diag<'_, ()>, @@ -155,21 +164,17 @@ pub(super) fn unexpected_cfg_name( } } - let inst = if let Some((value, _value_span)) = value { - let pre = if is_from_cargo { "\\" } else { "" }; - format!("cfg({name}, values({pre}\"{value}{pre}\"))") - } else { - format!("cfg({name})") - }; + let inst = |with_quotes| to_check_cfg_arg(name, value, with_quotes); if is_from_cargo { if !is_feature_cfg { diag.help(format!("consider using a Cargo feature instead")); - diag.help(format!("or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint:\n [lints.rust]\n unexpected_cfgs = {{ level = \"warn\", check-cfg = [\"{inst}\"] }}")); - diag.help(format!("or consider adding `println!(\"cargo::rustc-check-cfg={inst}\");` to the top of the `build.rs`")); + diag.help(format!("or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint:\n [lints.rust]\n unexpected_cfgs = {{ level = \"warn\", check-cfg = ['{}'] }}", inst(/*with_quotes:*/ false))); + diag.help(format!("or consider adding `println!(\"cargo::rustc-check-cfg={}\");` to the top of the `build.rs`", inst(/*with_quotes:*/ true))); } } else { - diag.help(format!("to expect this configuration use `--check-cfg={inst}`")); + let inst = inst(/*with_quotes:*/ false); + diag.help(format!("to expect this configuration use `--check-cfg={inst}`",)); } diag.note("see for more information about checking conditional configuration"); } @@ -252,12 +257,7 @@ pub(super) fn unexpected_cfg_value( // do it if they want, but should not encourage them. let is_cfg_a_well_know_name = sess.psess.check_config.well_known_names.contains(&name); - let inst = if let Some((value, _value_span)) = value { - let pre = if is_from_cargo { "\\" } else { "" }; - format!("cfg({name}, values({pre}\"{value}{pre}\"))") - } else { - format!("cfg({name})") - }; + let inst = |with_quotes| to_check_cfg_arg(name, value, with_quotes); if is_from_cargo { if name == sym::feature { @@ -268,12 +268,13 @@ pub(super) fn unexpected_cfg_value( } } else if !is_cfg_a_well_know_name { diag.help(format!("consider using a Cargo feature instead")); - diag.help(format!("or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint:\n [lints.rust]\n unexpected_cfgs = {{ level = \"warn\", check-cfg = [\"{inst}\"] }}")); - diag.help(format!("or consider adding `println!(\"cargo::rustc-check-cfg={inst}\");` to the top of the `build.rs`")); + diag.help(format!("or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint:\n [lints.rust]\n unexpected_cfgs = {{ level = \"warn\", check-cfg = ['{}'] }}", inst(/*with_quotes:*/ false))); + diag.help(format!("or consider adding `println!(\"cargo::rustc-check-cfg={}\");` to the top of the `build.rs`", inst(/*with_quotes:*/ true))); } } else { if !is_cfg_a_well_know_name { - diag.help(format!("to expect this configuration use `--check-cfg={inst}`")); + let inst = inst(/*with_quotes:*/ false); + diag.help(format!("to expect this configuration use `--check-cfg={inst}`",)); } } diag.note("see for more information about checking conditional configuration"); diff --git a/tests/ui/check-cfg/cargo-feature.none.stderr b/tests/ui/check-cfg/cargo-feature.none.stderr index 8523274d32978..79a1a3b1c2030 100644 --- a/tests/ui/check-cfg/cargo-feature.none.stderr +++ b/tests/ui/check-cfg/cargo-feature.none.stderr @@ -29,7 +29,7 @@ LL | #[cfg(tokio_unstable)] = help: consider using a Cargo feature instead = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint: [lints.rust] - unexpected_cfgs = { level = "warn", check-cfg = ["cfg(tokio_unstable)"] } + unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tokio_unstable)'] } = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(tokio_unstable)");` to the top of the `build.rs` = note: see for more information about checking conditional configuration @@ -42,7 +42,7 @@ LL | #[cfg(CONFIG_NVME = "m")] = help: consider using a Cargo feature instead = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint: [lints.rust] - unexpected_cfgs = { level = "warn", check-cfg = ["cfg(CONFIG_NVME, values(\"m\"))"] } + unexpected_cfgs = { level = "warn", check-cfg = ['cfg(CONFIG_NVME, values("m"))'] } = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(CONFIG_NVME, values(\"m\"))");` to the top of the `build.rs` = note: see for more information about checking conditional configuration diff --git a/tests/ui/check-cfg/cargo-feature.some.stderr b/tests/ui/check-cfg/cargo-feature.some.stderr index 67aab27fc6e2a..01d69e947b239 100644 --- a/tests/ui/check-cfg/cargo-feature.some.stderr +++ b/tests/ui/check-cfg/cargo-feature.some.stderr @@ -29,7 +29,7 @@ LL | #[cfg(tokio_unstable)] = help: consider using a Cargo feature instead = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint: [lints.rust] - unexpected_cfgs = { level = "warn", check-cfg = ["cfg(tokio_unstable)"] } + unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tokio_unstable)'] } = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(tokio_unstable)");` to the top of the `build.rs` = note: see for more information about checking conditional configuration @@ -45,7 +45,7 @@ LL | #[cfg(CONFIG_NVME = "m")] = help: consider using a Cargo feature instead = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint: [lints.rust] - unexpected_cfgs = { level = "warn", check-cfg = ["cfg(CONFIG_NVME, values(\"m\"))"] } + unexpected_cfgs = { level = "warn", check-cfg = ['cfg(CONFIG_NVME, values("m"))'] } = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(CONFIG_NVME, values(\"m\"))");` to the top of the `build.rs` = note: see for more information about checking conditional configuration diff --git a/tests/ui/check-cfg/diagnotics.cargo.stderr b/tests/ui/check-cfg/diagnotics.cargo.stderr index 79a4a30d091b4..bfd7bc0e5cde0 100644 --- a/tests/ui/check-cfg/diagnotics.cargo.stderr +++ b/tests/ui/check-cfg/diagnotics.cargo.stderr @@ -42,7 +42,7 @@ LL | #[cfg(no_value)] = help: consider using a Cargo feature instead = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint: [lints.rust] - unexpected_cfgs = { level = "warn", check-cfg = ["cfg(no_value)"] } + unexpected_cfgs = { level = "warn", check-cfg = ['cfg(no_value)'] } = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(no_value)");` to the top of the `build.rs` = note: see for more information about checking conditional configuration @@ -55,7 +55,7 @@ LL | #[cfg(no_value = "foo")] = help: consider using a Cargo feature instead = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint: [lints.rust] - unexpected_cfgs = { level = "warn", check-cfg = ["cfg(no_value, values(\"foo\"))"] } + unexpected_cfgs = { level = "warn", check-cfg = ['cfg(no_value, values("foo"))'] } = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(no_value, values(\"foo\"))");` to the top of the `build.rs` = note: see for more information about checking conditional configuration help: there is a config with a similar name and no value @@ -75,7 +75,7 @@ LL | #[cfg(no_values = "bar")] = help: consider using a Cargo feature instead = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint: [lints.rust] - unexpected_cfgs = { level = "warn", check-cfg = ["cfg(no_values, values(\"bar\"))"] } + unexpected_cfgs = { level = "warn", check-cfg = ['cfg(no_values, values("bar"))'] } = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(no_values, values(\"bar\"))");` to the top of the `build.rs` = note: see for more information about checking conditional configuration