mirror of
https://github.com/clap-rs/clap
synced 2024-12-13 14:22:34 +00:00
fix(builder): Fully recurse when building
Besides addressing the panic from assuming things were built when they weren't, this should fix some completion issues for some people. Fixes #3669
This commit is contained in:
parent
c6849e2ebd
commit
0ecb6f4869
8 changed files with 23 additions and 27 deletions
|
@ -73,7 +73,7 @@ _my-app() {
|
|||
return 0
|
||||
;;
|
||||
my__app__some_cmd__help)
|
||||
opts="-h -V --help --version <SUBCOMMAND>..."
|
||||
opts="<SUBCOMMAND>..."
|
||||
if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
|
||||
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
||||
return 0
|
||||
|
|
|
@ -53,10 +53,6 @@ set edit:completion:arg-completer[my-app] = {|@words|
|
|||
cand --version 'Print version information'
|
||||
}
|
||||
&'my-app;some_cmd;help'= {
|
||||
cand -h 'Print help information'
|
||||
cand --help 'Print help information'
|
||||
cand -V 'Print version information'
|
||||
cand --version 'Print version information'
|
||||
}
|
||||
&'my-app;help'= {
|
||||
}
|
||||
|
|
|
@ -14,5 +14,3 @@ complete -c my-app -n "__fish_seen_subcommand_from some_cmd; and not __fish_seen
|
|||
complete -c my-app -n "__fish_seen_subcommand_from some_cmd; and __fish_seen_subcommand_from sub_cmd" -l config -d 'the other case to test' -r -f -a "{Lest quotes aren/'t escaped. }"
|
||||
complete -c my-app -n "__fish_seen_subcommand_from some_cmd; and __fish_seen_subcommand_from sub_cmd" -s h -l help -d 'Print help information'
|
||||
complete -c my-app -n "__fish_seen_subcommand_from some_cmd; and __fish_seen_subcommand_from sub_cmd" -s V -l version -d 'Print version information'
|
||||
complete -c my-app -n "__fish_seen_subcommand_from some_cmd; and __fish_seen_subcommand_from help" -s h -l help -d 'Print help information'
|
||||
complete -c my-app -n "__fish_seen_subcommand_from some_cmd; and __fish_seen_subcommand_from help" -s V -l version -d 'Print version information'
|
||||
|
|
|
@ -60,10 +60,6 @@ Register-ArgumentCompleter -Native -CommandName 'my-app' -ScriptBlock {
|
|||
break
|
||||
}
|
||||
'my-app;some_cmd;help' {
|
||||
[CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Print help information')
|
||||
[CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Print help information')
|
||||
[CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Print version information')
|
||||
[CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Print version information')
|
||||
break
|
||||
}
|
||||
'my-app;help' {
|
||||
|
|
|
@ -70,10 +70,6 @@ _arguments "${_arguments_options[@]}" /
|
|||
;;
|
||||
(help)
|
||||
_arguments "${_arguments_options[@]}" /
|
||||
'-h[Print help information]' /
|
||||
'--help[Print help information]' /
|
||||
'-V[Print version information]' /
|
||||
'--version[Print version information]' /
|
||||
'*::subcommand -- The subcommand whose help message to display:' /
|
||||
&& ret=0
|
||||
;;
|
||||
|
|
|
@ -56,16 +56,6 @@ const completion: Fig.Spec = {
|
|||
{
|
||||
name: "help",
|
||||
description: "Print this message or the help of the given subcommand(s)",
|
||||
options: [
|
||||
{
|
||||
name: ["-h", "--help"],
|
||||
description: "Print help information",
|
||||
},
|
||||
{
|
||||
name: ["-V", "--version"],
|
||||
description: "Print version information",
|
||||
},
|
||||
],
|
||||
args: {
|
||||
name: "subcommand",
|
||||
isOptional: true,
|
||||
|
|
|
@ -4008,11 +4008,15 @@ impl<'help> App<'help> {
|
|||
/// 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_recursive();
|
||||
self._build_bin_names_internal();
|
||||
}
|
||||
|
||||
pub(crate) fn _build_recursive(&mut self) {
|
||||
self._build_self();
|
||||
for subcmd in self.get_subcommands_mut() {
|
||||
subcmd._build_self();
|
||||
subcmd._build_recursive();
|
||||
}
|
||||
self._build_bin_names_internal();
|
||||
}
|
||||
|
||||
pub(crate) fn _build_self(&mut self) {
|
||||
|
|
|
@ -408,3 +408,19 @@ fn mut_arg_all() {
|
|||
cmd = cmd.mut_arg(arg_name, |arg| arg.hide_possible_values(true));
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn issue_3669_command_build_recurses() {
|
||||
let mut cmd = Command::new("ctest").subcommand(
|
||||
Command::new("subcmd").subcommand(
|
||||
Command::new("multi")
|
||||
.about("tests subcommands")
|
||||
.author("Kevin K. <kbknapp@gmail.com>")
|
||||
.version("0.1")
|
||||
.arg(clap::arg!(
|
||||
<FLAG> "tests flags"
|
||||
)),
|
||||
),
|
||||
);
|
||||
cmd.build();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue