From f16bdcc821cf49db202f53675cbc0a27af525633 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 9 Dec 2021 09:03:54 -0600 Subject: [PATCH] fix!: Limit Setting FromStrs to YAML These exist pretty much just for YAML (#3087). If anyone else is building on these, it has a limited shelf-life anyways because of #2717. BREAKING CHANGE: `FromStr` for settings requires the `yaml` feature. --- src/build/app/settings.rs | 9 ++++++--- src/build/arg/settings.rs | 9 ++++++--- src/macros.rs | 2 ++ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/build/app/settings.rs b/src/build/app/settings.rs index 5367c5b3b53..91479831c37 100644 --- a/src/build/app/settings.rs +++ b/src/build/app/settings.rs @@ -1,5 +1,7 @@ // Std -use std::{ops::BitOr, str::FromStr}; +use std::ops::BitOr; +#[cfg(feature = "yaml")] +use std::str::FromStr; // Third party use bitflags::bitflags; @@ -1158,11 +1160,12 @@ impl_settings! { AppSettings, AppFlags, #[cfg(test)] mod test { - use super::AppSettings; - #[allow(clippy::cognitive_complexity)] #[test] + #[cfg(feature = "yaml")] fn app_settings_fromstr() { + use super::AppSettings; + assert_eq!( "disablehelpflag".parse::().unwrap(), AppSettings::DisableHelpFlag diff --git a/src/build/arg/settings.rs b/src/build/arg/settings.rs index 1dd0ecf2cd6..af6712e24e5 100644 --- a/src/build/arg/settings.rs +++ b/src/build/arg/settings.rs @@ -1,5 +1,7 @@ // Std -use std::{ops::BitOr, str::FromStr}; +use std::ops::BitOr; +#[cfg(feature = "yaml")] +use std::str::FromStr; // Third party use bitflags::bitflags; @@ -157,10 +159,11 @@ impl_settings! { ArgSettings, ArgFlags, #[cfg(test)] mod test { - use super::ArgSettings; - #[test] + #[cfg(feature = "yaml")] fn arg_settings_fromstr() { + use super::ArgSettings; + assert_eq!( "allowhyphenvalues".parse::().unwrap(), ArgSettings::AllowHyphenValues diff --git a/src/macros.rs b/src/macros.rs index 01bed5b45a9..bc3a1013be8 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -879,6 +879,8 @@ macro_rules! impl_settings { } } + /// Deprecated in [Issue #3087](https://github.com/clap-rs/clap/issues/3087), maybe [`clap::Parser`][crate::Parser] would fit your use case? + #[cfg(feature = "yaml")] impl FromStr for $settings { type Err = String; fn from_str(s: &str) -> Result::Err> {