mirror of
https://github.com/clap-rs/clap
synced 2024-12-13 06:12:40 +00:00
feat(clap): Publicly expose Command::build
`Command::_build_all` started as an internal function for `clap_complete` as a stopgap until #2911. Overtime, we've been finding more cases where this function needs to be called, so now we're going to fully embrace it until #2911 so people aren't scrared off by the hidden implementation from using it. This was inspired by #3602 Comptibility: Though this adds a deprecation which we general reserve for minor or major versions, this is enough of a corner case that I'm fine doing this in a patch release.
This commit is contained in:
parent
eddc04cbcc
commit
8f182067e3
9 changed files with 24 additions and 12 deletions
|
@ -236,7 +236,7 @@ where
|
||||||
G: Generator,
|
G: Generator,
|
||||||
S: Into<String>,
|
S: Into<String>,
|
||||||
{
|
{
|
||||||
cmd._build_all();
|
cmd.build();
|
||||||
|
|
||||||
gen.generate(cmd, buf)
|
gen.generate(cmd, buf)
|
||||||
}
|
}
|
||||||
|
|
|
@ -151,14 +151,14 @@ mod tests {
|
||||||
fn built() -> Command<'static> {
|
fn built() -> Command<'static> {
|
||||||
let mut cmd = common_app();
|
let mut cmd = common_app();
|
||||||
|
|
||||||
cmd._build_all();
|
cmd.build();
|
||||||
cmd
|
cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
fn built_with_version() -> Command<'static> {
|
fn built_with_version() -> Command<'static> {
|
||||||
let mut cmd = common_app().version("3.0");
|
let mut cmd = common_app().version("3.0");
|
||||||
|
|
||||||
cmd._build_all();
|
cmd.build();
|
||||||
cmd
|
cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ pub struct Man<'a> {
|
||||||
impl<'a> Man<'a> {
|
impl<'a> Man<'a> {
|
||||||
/// Create a new manual page.
|
/// Create a new manual page.
|
||||||
pub fn new(mut cmd: clap::Command<'a>) -> Self {
|
pub fn new(mut cmd: clap::Command<'a>) -> Self {
|
||||||
cmd._build_all();
|
cmd.build();
|
||||||
let title = cmd.get_name().to_owned();
|
let title = cmd.get_name().to_owned();
|
||||||
let section = "1".to_owned();
|
let section = "1".to_owned();
|
||||||
let date = "".to_owned();
|
let date = "".to_owned();
|
||||||
|
|
|
@ -3984,9 +3984,17 @@ impl<'help> App<'help> {
|
||||||
Ok(matcher.into_inner())
|
Ok(matcher.into_inner())
|
||||||
}
|
}
|
||||||
|
|
||||||
// used in clap_complete (https://github.com/clap-rs/clap_complete)
|
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
|
#[deprecated(since = "3.1.10", note = "Replaced with `Command::build`")]
|
||||||
pub fn _build_all(&mut self) {
|
pub fn _build_all(&mut self) {
|
||||||
|
self.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Prepare for introspecting on all included [`Command`]s
|
||||||
|
///
|
||||||
|
/// Call this on the top-level [`Command`] when done building and before reading state for
|
||||||
|
/// cases like completions, custom help output, etc.
|
||||||
|
pub fn build(&mut self) {
|
||||||
self._build();
|
self._build();
|
||||||
for subcmd in self.get_subcommands_mut() {
|
for subcmd in self.get_subcommands_mut() {
|
||||||
subcmd._build();
|
subcmd._build();
|
||||||
|
@ -4047,9 +4055,13 @@ impl<'help> App<'help> {
|
||||||
Some(sc)
|
Some(sc)
|
||||||
}
|
}
|
||||||
|
|
||||||
// used in clap_complete (https://github.com/clap-rs/clap_complete)
|
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
|
#[deprecated(since = "3.1.10", note = "Replaced with `Command::build`")]
|
||||||
pub fn _build(&mut self) {
|
pub fn _build(&mut self) {
|
||||||
|
self._build_self()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn _build_self(&mut self) {
|
||||||
debug!("App::_build");
|
debug!("App::_build");
|
||||||
if !self.settings.is_set(AppSettings::Built) {
|
if !self.settings.is_set(AppSettings::Built) {
|
||||||
// Make sure all the globally set flags apply to us as well
|
// Make sure all the globally set flags apply to us as well
|
||||||
|
|
|
@ -39,7 +39,7 @@ fn issue_2090() {
|
||||||
let mut cmd = Command::new("cmd")
|
let mut cmd = Command::new("cmd")
|
||||||
.disable_version_flag(true)
|
.disable_version_flag(true)
|
||||||
.subcommand(Command::new("sub"));
|
.subcommand(Command::new("sub"));
|
||||||
cmd._build();
|
cmd._build_self();
|
||||||
|
|
||||||
assert!(cmd
|
assert!(cmd
|
||||||
.get_subcommands()
|
.get_subcommands()
|
||||||
|
|
|
@ -51,7 +51,7 @@ where
|
||||||
None => subcommands
|
None => subcommands
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter_map(|subcommand| {
|
.filter_map(|subcommand| {
|
||||||
subcommand._build();
|
subcommand._build_self();
|
||||||
|
|
||||||
let longs = subcommand.get_keymap().keys().filter_map(|a| {
|
let longs = subcommand.get_keymap().keys().filter_map(|a| {
|
||||||
if let KeyType::Long(v) = a {
|
if let KeyType::Long(v) = a {
|
||||||
|
|
|
@ -636,7 +636,7 @@ impl<'help, 'cmd> Parser<'help, 'cmd> {
|
||||||
}
|
}
|
||||||
.clone();
|
.clone();
|
||||||
|
|
||||||
sc._build();
|
sc._build_self();
|
||||||
bin_name.push(' ');
|
bin_name.push(' ');
|
||||||
bin_name.push_str(sc.get_name());
|
bin_name.push_str(sc.get_name());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1176,7 +1176,7 @@ fn color_is_global() {
|
||||||
let mut cmd = Command::new("myprog")
|
let mut cmd = Command::new("myprog")
|
||||||
.color(clap::ColorChoice::Never)
|
.color(clap::ColorChoice::Never)
|
||||||
.subcommand(Command::new("foo"));
|
.subcommand(Command::new("foo"));
|
||||||
cmd._build_all();
|
cmd.build();
|
||||||
assert_eq!(cmd.get_color(), clap::ColorChoice::Never);
|
assert_eq!(cmd.get_color(), clap::ColorChoice::Never);
|
||||||
|
|
||||||
let sub = cmd.get_subcommands().collect::<Vec<_>>()[0];
|
let sub = cmd.get_subcommands().collect::<Vec<_>>()[0];
|
||||||
|
|
|
@ -2872,7 +2872,7 @@ fn disable_help_flag_affects_help_subcommand() {
|
||||||
let mut cmd = Command::new("test_app")
|
let mut cmd = Command::new("test_app")
|
||||||
.disable_help_flag(true)
|
.disable_help_flag(true)
|
||||||
.subcommand(Command::new("test").about("Subcommand"));
|
.subcommand(Command::new("test").about("Subcommand"));
|
||||||
cmd._build_all();
|
cmd.build();
|
||||||
|
|
||||||
let args = cmd
|
let args = cmd
|
||||||
.find_subcommand("help")
|
.find_subcommand("help")
|
||||||
|
@ -2918,7 +2918,7 @@ fn help_without_short() {
|
||||||
.arg(arg!(-h --hex <NUM>))
|
.arg(arg!(-h --hex <NUM>))
|
||||||
.arg(arg!(--help));
|
.arg(arg!(--help));
|
||||||
|
|
||||||
cmd._build_all();
|
cmd.build();
|
||||||
let help = cmd.get_arguments().find(|a| a.get_id() == "help").unwrap();
|
let help = cmd.get_arguments().find(|a| a.get_id() == "help").unwrap();
|
||||||
assert_eq!(help.get_short(), None);
|
assert_eq!(help.get_short(), None);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue