mirror of
https://github.com/clap-rs/clap
synced 2024-12-13 22:32:33 +00:00
feat(complete): Add autocomplete for visible_alias
Let's generate autocompletions for aliased subcommands. $ source before.zsh $ clap-test [TAB] <- gives me "foo bar --" $ clap-test foo [TAB] <- gives me "--my-flag" $ clap-test bar [TAB] <- no reaction $ source after.zsh $ clap-test [TAB] <- gives me "foo bar --" $ clap-test foo [TAB] <- gives me "--my-flag" $ clap-test bar [TAB] <- gives me "--my-flag"
This commit is contained in:
parent
be15bd5d96
commit
5000d58f38
10 changed files with 210 additions and 44 deletions
|
@ -3438,6 +3438,13 @@ impl Command {
|
||||||
&self.name
|
&self.name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get all known names of the cmd (i.e. primary name and visible aliases).
|
||||||
|
pub fn get_name_and_visible_aliases(&self) -> Vec<&str> {
|
||||||
|
let mut names = vec![self.name.as_str()];
|
||||||
|
names.extend(self.get_visible_aliases());
|
||||||
|
names
|
||||||
|
}
|
||||||
|
|
||||||
/// Get the version of the cmd.
|
/// Get the version of the cmd.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn get_version(&self) -> Option<&str> {
|
pub fn get_version(&self) -> Option<&str> {
|
||||||
|
|
|
@ -47,8 +47,15 @@ pub fn subcommands(p: &Command) -> Vec<(String, String)> {
|
||||||
sc.get_name(),
|
sc.get_name(),
|
||||||
sc_bin_name
|
sc_bin_name
|
||||||
);
|
);
|
||||||
|
|
||||||
subcmds.push((sc.get_name().to_string(), sc_bin_name.to_string()));
|
subcmds.push((sc.get_name().to_string(), sc_bin_name.to_string()));
|
||||||
|
|
||||||
|
for alias in sc.get_visible_aliases() {
|
||||||
|
debug!(
|
||||||
|
"subcommands:iter: alias={}, bin_name={}",
|
||||||
|
alias, sc_bin_name
|
||||||
|
);
|
||||||
|
subcmds.push((alias.to_string(), sc_bin_name.to_string()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
subcmds
|
subcmds
|
||||||
|
|
|
@ -67,10 +67,13 @@ fn escape_help<T: ToString>(help: Option<&StyledStr>, data: T) -> String {
|
||||||
fn generate_inner(p: &Command, previous_command_name: &str) -> String {
|
fn generate_inner(p: &Command, previous_command_name: &str) -> String {
|
||||||
debug!("generate_inner");
|
debug!("generate_inner");
|
||||||
|
|
||||||
let command_name = if previous_command_name.is_empty() {
|
let command_names = if previous_command_name.is_empty() {
|
||||||
p.get_bin_name().expect(INTERNAL_ERROR_MSG).to_string()
|
vec![p.get_bin_name().expect(INTERNAL_ERROR_MSG).to_string()]
|
||||||
} else {
|
} else {
|
||||||
format!("{};{}", previous_command_name, &p.get_name())
|
p.get_name_and_visible_aliases()
|
||||||
|
.into_iter()
|
||||||
|
.map(|name| format!("{};{}", previous_command_name, name))
|
||||||
|
.collect()
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut completions = String::new();
|
let mut completions = String::new();
|
||||||
|
@ -113,23 +116,29 @@ fn generate_inner(p: &Command, previous_command_name: &str) -> String {
|
||||||
}
|
}
|
||||||
|
|
||||||
for subcommand in p.get_subcommands() {
|
for subcommand in p.get_subcommands() {
|
||||||
let data = &subcommand.get_name();
|
for name in subcommand.get_name_and_visible_aliases() {
|
||||||
let tooltip = escape_help(subcommand.get_about(), data);
|
let tooltip = escape_help(subcommand.get_about(), name);
|
||||||
|
|
||||||
completions.push_str(&preamble);
|
completions.push_str(&preamble);
|
||||||
completions.push_str(format!("{data} '{tooltip}'").as_str());
|
completions.push_str(format!("{name} '{tooltip}'").as_str());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut subcommands_cases = format!(
|
let mut subcommands_cases = String::new();
|
||||||
r"
|
for command_name in &command_names {
|
||||||
|
subcommands_cases.push_str(&format!(
|
||||||
|
r"
|
||||||
&'{}'= {{{}
|
&'{}'= {{{}
|
||||||
}}",
|
}}",
|
||||||
&command_name, completions
|
&command_name, completions
|
||||||
);
|
));
|
||||||
|
}
|
||||||
|
|
||||||
for subcommand in p.get_subcommands() {
|
for subcommand in p.get_subcommands() {
|
||||||
let subcommand_subcommands_cases = generate_inner(subcommand, &command_name);
|
for command_name in &command_names {
|
||||||
subcommands_cases.push_str(&subcommand_subcommands_cases);
|
let subcommand_subcommands_cases = generate_inner(subcommand, command_name);
|
||||||
|
subcommands_cases.push_str(&subcommand_subcommands_cases);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
subcommands_cases
|
subcommands_cases
|
||||||
|
|
|
@ -75,7 +75,8 @@ fn gen_fish_inner(
|
||||||
.map(|command| format!("__fish_seen_subcommand_from {command}"))
|
.map(|command| format!("__fish_seen_subcommand_from {command}"))
|
||||||
.chain(
|
.chain(
|
||||||
cmd.get_subcommands()
|
cmd.get_subcommands()
|
||||||
.map(|command| format!("not __fish_seen_subcommand_from {command}"))
|
.flat_map(Command::get_name_and_visible_aliases)
|
||||||
|
.map(|name| format!("not __fish_seen_subcommand_from {name}"))
|
||||||
)
|
)
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
.join("; and ")
|
.join("; and ")
|
||||||
|
@ -135,24 +136,28 @@ fn gen_fish_inner(
|
||||||
}
|
}
|
||||||
|
|
||||||
for subcommand in cmd.get_subcommands() {
|
for subcommand in cmd.get_subcommands() {
|
||||||
let mut template = basic_template.clone();
|
for subcommand_name in subcommand.get_name_and_visible_aliases() {
|
||||||
|
let mut template = basic_template.clone();
|
||||||
|
|
||||||
template.push_str(" -f");
|
template.push_str(" -f");
|
||||||
template.push_str(format!(" -a \"{}\"", &subcommand.get_name()).as_str());
|
template.push_str(format!(" -a \"{}\"", subcommand_name).as_str());
|
||||||
|
|
||||||
if let Some(data) = subcommand.get_about() {
|
if let Some(data) = subcommand.get_about() {
|
||||||
template.push_str(format!(" -d '{}'", escape_help(data)).as_str());
|
template.push_str(format!(" -d '{}'", escape_help(data)).as_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer.push_str(template.as_str());
|
||||||
|
buffer.push('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer.push_str(template.as_str());
|
|
||||||
buffer.push('\n');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// generate options of subcommands
|
// generate options of subcommands
|
||||||
for subcommand in cmd.get_subcommands() {
|
for subcommand in cmd.get_subcommands() {
|
||||||
let mut parent_commands: Vec<_> = parent_commands.into();
|
for subcommand_name in subcommand.get_name_and_visible_aliases() {
|
||||||
parent_commands.push(subcommand.get_name());
|
let mut parent_commands: Vec<_> = parent_commands.into();
|
||||||
gen_fish_inner(root_command, &parent_commands, subcommand, buffer);
|
parent_commands.push(subcommand_name);
|
||||||
|
gen_fish_inner(root_command, &parent_commands, subcommand, buffer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -72,10 +72,13 @@ fn escape_help<T: ToString>(help: Option<&StyledStr>, data: T) -> String {
|
||||||
fn generate_inner(p: &Command, previous_command_name: &str) -> String {
|
fn generate_inner(p: &Command, previous_command_name: &str) -> String {
|
||||||
debug!("generate_inner");
|
debug!("generate_inner");
|
||||||
|
|
||||||
let command_name = if previous_command_name.is_empty() {
|
let command_names = if previous_command_name.is_empty() {
|
||||||
p.get_bin_name().expect(INTERNAL_ERROR_MSG).to_string()
|
vec![p.get_bin_name().expect(INTERNAL_ERROR_MSG).to_string()]
|
||||||
} else {
|
} else {
|
||||||
format!("{};{}", previous_command_name, &p.get_name())
|
p.get_name_and_visible_aliases()
|
||||||
|
.into_iter()
|
||||||
|
.map(|name| format!("{};{}", previous_command_name, name))
|
||||||
|
.collect()
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut completions = String::new();
|
let mut completions = String::new();
|
||||||
|
@ -90,27 +93,31 @@ fn generate_inner(p: &Command, previous_command_name: &str) -> String {
|
||||||
}
|
}
|
||||||
|
|
||||||
for subcommand in p.get_subcommands() {
|
for subcommand in p.get_subcommands() {
|
||||||
let data = &subcommand.get_name();
|
for name in subcommand.get_name_and_visible_aliases() {
|
||||||
let tooltip = escape_help(subcommand.get_about(), data);
|
let tooltip = escape_help(subcommand.get_about(), name);
|
||||||
|
completions.push_str(&preamble);
|
||||||
completions.push_str(&preamble);
|
completions.push_str(&format!(
|
||||||
completions.push_str(
|
"'{name}', '{name}', [CompletionResultType]::ParameterValue, '{tooltip}')"
|
||||||
format!("'{data}', '{data}', [CompletionResultType]::ParameterValue, '{tooltip}')")
|
));
|
||||||
.as_str(),
|
}
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut subcommands_cases = format!(
|
let mut subcommands_cases = String::new();
|
||||||
r"
|
for command_name in &command_names {
|
||||||
|
subcommands_cases.push_str(&format!(
|
||||||
|
r"
|
||||||
'{}' {{{}
|
'{}' {{{}
|
||||||
break
|
break
|
||||||
}}",
|
}}",
|
||||||
&command_name, completions
|
command_name, completions
|
||||||
);
|
));
|
||||||
|
}
|
||||||
|
|
||||||
for subcommand in p.get_subcommands() {
|
for subcommand in p.get_subcommands() {
|
||||||
let subcommand_subcommands_cases = generate_inner(subcommand, &command_name);
|
for command_name in &command_names {
|
||||||
subcommands_cases.push_str(&subcommand_subcommands_cases);
|
let subcommand_subcommands_cases = generate_inner(subcommand, command_name);
|
||||||
|
subcommands_cases.push_str(&subcommand_subcommands_cases);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
subcommands_cases
|
subcommands_cases
|
||||||
|
|
|
@ -55,7 +55,7 @@ _my-app() {
|
||||||
|
|
||||||
case "${cmd}" in
|
case "${cmd}" in
|
||||||
my__app)
|
my__app)
|
||||||
opts="-C -c -h -V --conf --config --help --version [file] first second test some_cmd help"
|
opts="-C -c -h -V --conf --config --help --version [file] first second test some_cmd some_cmd_alias help"
|
||||||
if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
|
if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
|
||||||
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
||||||
return 0
|
return 0
|
||||||
|
@ -152,6 +152,20 @@ _my-app() {
|
||||||
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
|
my__app__some_cmd)
|
||||||
|
opts="-h -V --help --version sub_cmd help"
|
||||||
|
if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
|
||||||
|
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
case "${prev}" in
|
||||||
|
*)
|
||||||
|
COMPREPLY=()
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
my__app__some_cmd__help)
|
my__app__some_cmd__help)
|
||||||
opts="sub_cmd help"
|
opts="sub_cmd help"
|
||||||
if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
|
if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
|
||||||
|
|
|
@ -28,6 +28,7 @@ set edit:completion:arg-completer[my-app] = {|@words|
|
||||||
cand --version 'Print version'
|
cand --version 'Print version'
|
||||||
cand test 'tests things'
|
cand test 'tests things'
|
||||||
cand some_cmd 'top level subcommand'
|
cand some_cmd 'top level subcommand'
|
||||||
|
cand some_cmd_alias 'top level subcommand'
|
||||||
cand help 'Print this message or the help of the given subcommand(s)'
|
cand help 'Print this message or the help of the given subcommand(s)'
|
||||||
}
|
}
|
||||||
&'my-app;test'= {
|
&'my-app;test'= {
|
||||||
|
@ -45,6 +46,14 @@ set edit:completion:arg-completer[my-app] = {|@words|
|
||||||
cand sub_cmd 'sub-subcommand'
|
cand sub_cmd 'sub-subcommand'
|
||||||
cand help 'Print this message or the help of the given subcommand(s)'
|
cand help 'Print this message or the help of the given subcommand(s)'
|
||||||
}
|
}
|
||||||
|
&'my-app;some_cmd_alias'= {
|
||||||
|
cand -h 'Print help'
|
||||||
|
cand --help 'Print help'
|
||||||
|
cand -V 'Print version'
|
||||||
|
cand --version 'Print version'
|
||||||
|
cand sub_cmd 'sub-subcommand'
|
||||||
|
cand help 'Print this message or the help of the given subcommand(s)'
|
||||||
|
}
|
||||||
&'my-app;some_cmd;sub_cmd'= {
|
&'my-app;some_cmd;sub_cmd'= {
|
||||||
cand --config 'the other case to test'
|
cand --config 'the other case to test'
|
||||||
cand -h 'Print help (see more with ''--help'')'
|
cand -h 'Print help (see more with ''--help'')'
|
||||||
|
@ -52,6 +61,13 @@ set edit:completion:arg-completer[my-app] = {|@words|
|
||||||
cand -V 'Print version'
|
cand -V 'Print version'
|
||||||
cand --version 'Print version'
|
cand --version 'Print version'
|
||||||
}
|
}
|
||||||
|
&'my-app;some_cmd_alias;sub_cmd'= {
|
||||||
|
cand --config 'the other case to test'
|
||||||
|
cand -h 'Print help (see more with ''--help'')'
|
||||||
|
cand --help 'Print help (see more with ''--help'')'
|
||||||
|
cand -V 'Print version'
|
||||||
|
cand --version 'Print version'
|
||||||
|
}
|
||||||
&'my-app;some_cmd;help'= {
|
&'my-app;some_cmd;help'= {
|
||||||
cand sub_cmd 'sub-subcommand'
|
cand sub_cmd 'sub-subcommand'
|
||||||
cand help 'Print this message or the help of the given subcommand(s)'
|
cand help 'Print this message or the help of the given subcommand(s)'
|
||||||
|
@ -60,6 +76,14 @@ set edit:completion:arg-completer[my-app] = {|@words|
|
||||||
}
|
}
|
||||||
&'my-app;some_cmd;help;help'= {
|
&'my-app;some_cmd;help;help'= {
|
||||||
}
|
}
|
||||||
|
&'my-app;some_cmd_alias;help'= {
|
||||||
|
cand sub_cmd 'sub-subcommand'
|
||||||
|
cand help 'Print this message or the help of the given subcommand(s)'
|
||||||
|
}
|
||||||
|
&'my-app;some_cmd_alias;help;sub_cmd'= {
|
||||||
|
}
|
||||||
|
&'my-app;some_cmd_alias;help;help'= {
|
||||||
|
}
|
||||||
&'my-app;help'= {
|
&'my-app;help'= {
|
||||||
cand test 'tests things'
|
cand test 'tests things'
|
||||||
cand some_cmd 'top level subcommand'
|
cand some_cmd 'top level subcommand'
|
||||||
|
|
|
@ -3,6 +3,7 @@ complete -c my-app -n "__fish_use_subcommand" -s h -l help -d 'Print help'
|
||||||
complete -c my-app -n "__fish_use_subcommand" -s V -l version -d 'Print version'
|
complete -c my-app -n "__fish_use_subcommand" -s V -l version -d 'Print version'
|
||||||
complete -c my-app -n "__fish_use_subcommand" -f -a "test" -d 'tests things'
|
complete -c my-app -n "__fish_use_subcommand" -f -a "test" -d 'tests things'
|
||||||
complete -c my-app -n "__fish_use_subcommand" -f -a "some_cmd" -d 'top level subcommand'
|
complete -c my-app -n "__fish_use_subcommand" -f -a "some_cmd" -d 'top level subcommand'
|
||||||
|
complete -c my-app -n "__fish_use_subcommand" -f -a "some_cmd_alias" -d 'top level subcommand'
|
||||||
complete -c my-app -n "__fish_use_subcommand" -f -a "help" -d 'Print this message or the help of the given subcommand(s)'
|
complete -c my-app -n "__fish_use_subcommand" -f -a "help" -d 'Print this message or the help of the given subcommand(s)'
|
||||||
complete -c my-app -n "__fish_seen_subcommand_from test" -l case -d 'the case to test' -r
|
complete -c my-app -n "__fish_seen_subcommand_from test" -l case -d 'the case to test' -r
|
||||||
complete -c my-app -n "__fish_seen_subcommand_from test" -s h -l help -d 'Print help'
|
complete -c my-app -n "__fish_seen_subcommand_from test" -s h -l help -d 'Print help'
|
||||||
|
@ -16,6 +17,15 @@ complete -c my-app -n "__fish_seen_subcommand_from some_cmd; and __fish_seen_sub
|
||||||
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'
|
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'
|
||||||
complete -c my-app -n "__fish_seen_subcommand_from some_cmd; and __fish_seen_subcommand_from help; and not __fish_seen_subcommand_from sub_cmd; and not __fish_seen_subcommand_from help" -f -a "sub_cmd" -d 'sub-subcommand'
|
complete -c my-app -n "__fish_seen_subcommand_from some_cmd; and __fish_seen_subcommand_from help; and not __fish_seen_subcommand_from sub_cmd; and not __fish_seen_subcommand_from help" -f -a "sub_cmd" -d 'sub-subcommand'
|
||||||
complete -c my-app -n "__fish_seen_subcommand_from some_cmd; and __fish_seen_subcommand_from help; and not __fish_seen_subcommand_from sub_cmd; and not __fish_seen_subcommand_from help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)'
|
complete -c my-app -n "__fish_seen_subcommand_from some_cmd; and __fish_seen_subcommand_from help; and not __fish_seen_subcommand_from sub_cmd; and not __fish_seen_subcommand_from help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)'
|
||||||
|
complete -c my-app -n "__fish_seen_subcommand_from some_cmd_alias; and not __fish_seen_subcommand_from sub_cmd; and not __fish_seen_subcommand_from help" -s h -l help -d 'Print help'
|
||||||
|
complete -c my-app -n "__fish_seen_subcommand_from some_cmd_alias; and not __fish_seen_subcommand_from sub_cmd; and not __fish_seen_subcommand_from help" -s V -l version -d 'Print version'
|
||||||
|
complete -c my-app -n "__fish_seen_subcommand_from some_cmd_alias; and not __fish_seen_subcommand_from sub_cmd; and not __fish_seen_subcommand_from help" -f -a "sub_cmd" -d 'sub-subcommand'
|
||||||
|
complete -c my-app -n "__fish_seen_subcommand_from some_cmd_alias; and not __fish_seen_subcommand_from sub_cmd; and not __fish_seen_subcommand_from help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)'
|
||||||
|
complete -c my-app -n "__fish_seen_subcommand_from some_cmd_alias; and __fish_seen_subcommand_from sub_cmd" -l config -d 'the other case to test' -r -f -a "{Lest quotes\, aren\'t escaped. 'help,with,comma',Second to trigger display of options ''}"
|
||||||
|
complete -c my-app -n "__fish_seen_subcommand_from some_cmd_alias; and __fish_seen_subcommand_from sub_cmd" -s h -l help -d 'Print help (see more with \'--help\')'
|
||||||
|
complete -c my-app -n "__fish_seen_subcommand_from some_cmd_alias; and __fish_seen_subcommand_from sub_cmd" -s V -l version -d 'Print version'
|
||||||
|
complete -c my-app -n "__fish_seen_subcommand_from some_cmd_alias; and __fish_seen_subcommand_from help; and not __fish_seen_subcommand_from sub_cmd; and not __fish_seen_subcommand_from help" -f -a "sub_cmd" -d 'sub-subcommand'
|
||||||
|
complete -c my-app -n "__fish_seen_subcommand_from some_cmd_alias; and __fish_seen_subcommand_from help; and not __fish_seen_subcommand_from sub_cmd; and not __fish_seen_subcommand_from help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)'
|
||||||
complete -c my-app -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from test; and not __fish_seen_subcommand_from some_cmd; and not __fish_seen_subcommand_from help" -f -a "test" -d 'tests things'
|
complete -c my-app -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from test; and not __fish_seen_subcommand_from some_cmd; and not __fish_seen_subcommand_from help" -f -a "test" -d 'tests things'
|
||||||
complete -c my-app -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from test; and not __fish_seen_subcommand_from some_cmd; and not __fish_seen_subcommand_from help" -f -a "some_cmd" -d 'top level subcommand'
|
complete -c my-app -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from test; and not __fish_seen_subcommand_from some_cmd; and not __fish_seen_subcommand_from help" -f -a "some_cmd" -d 'top level subcommand'
|
||||||
complete -c my-app -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from test; and not __fish_seen_subcommand_from some_cmd; and not __fish_seen_subcommand_from help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)'
|
complete -c my-app -n "__fish_seen_subcommand_from help; and not __fish_seen_subcommand_from test; and not __fish_seen_subcommand_from some_cmd; and not __fish_seen_subcommand_from help" -f -a "help" -d 'Print this message or the help of the given subcommand(s)'
|
||||||
|
|
|
@ -31,6 +31,7 @@ Register-ArgumentCompleter -Native -CommandName 'my-app' -ScriptBlock {
|
||||||
[CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Print version')
|
[CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Print version')
|
||||||
[CompletionResult]::new('test', 'test', [CompletionResultType]::ParameterValue, 'tests things')
|
[CompletionResult]::new('test', 'test', [CompletionResultType]::ParameterValue, 'tests things')
|
||||||
[CompletionResult]::new('some_cmd', 'some_cmd', [CompletionResultType]::ParameterValue, 'top level subcommand')
|
[CompletionResult]::new('some_cmd', 'some_cmd', [CompletionResultType]::ParameterValue, 'top level subcommand')
|
||||||
|
[CompletionResult]::new('some_cmd_alias', 'some_cmd_alias', [CompletionResultType]::ParameterValue, 'top level subcommand')
|
||||||
[CompletionResult]::new('help', 'help', [CompletionResultType]::ParameterValue, 'Print this message or the help of the given subcommand(s)')
|
[CompletionResult]::new('help', 'help', [CompletionResultType]::ParameterValue, 'Print this message or the help of the given subcommand(s)')
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -51,6 +52,15 @@ Register-ArgumentCompleter -Native -CommandName 'my-app' -ScriptBlock {
|
||||||
[CompletionResult]::new('help', 'help', [CompletionResultType]::ParameterValue, 'Print this message or the help of the given subcommand(s)')
|
[CompletionResult]::new('help', 'help', [CompletionResultType]::ParameterValue, 'Print this message or the help of the given subcommand(s)')
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
'my-app;some_cmd_alias' {
|
||||||
|
[CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Print help')
|
||||||
|
[CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Print help')
|
||||||
|
[CompletionResult]::new('-V', 'V ', [CompletionResultType]::ParameterName, 'Print version')
|
||||||
|
[CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Print version')
|
||||||
|
[CompletionResult]::new('sub_cmd', 'sub_cmd', [CompletionResultType]::ParameterValue, 'sub-subcommand')
|
||||||
|
[CompletionResult]::new('help', 'help', [CompletionResultType]::ParameterValue, 'Print this message or the help of the given subcommand(s)')
|
||||||
|
break
|
||||||
|
}
|
||||||
'my-app;some_cmd;sub_cmd' {
|
'my-app;some_cmd;sub_cmd' {
|
||||||
[CompletionResult]::new('--config', 'config', [CompletionResultType]::ParameterName, 'the other case to test')
|
[CompletionResult]::new('--config', 'config', [CompletionResultType]::ParameterName, 'the other case to test')
|
||||||
[CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Print help (see more with ''--help'')')
|
[CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Print help (see more with ''--help'')')
|
||||||
|
@ -59,6 +69,14 @@ Register-ArgumentCompleter -Native -CommandName 'my-app' -ScriptBlock {
|
||||||
[CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Print version')
|
[CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Print version')
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
'my-app;some_cmd_alias;sub_cmd' {
|
||||||
|
[CompletionResult]::new('--config', 'config', [CompletionResultType]::ParameterName, 'the other case to test')
|
||||||
|
[CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Print help (see more with ''--help'')')
|
||||||
|
[CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Print help (see more with ''--help'')')
|
||||||
|
[CompletionResult]::new('-V', 'V ', [CompletionResultType]::ParameterName, 'Print version')
|
||||||
|
[CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Print version')
|
||||||
|
break
|
||||||
|
}
|
||||||
'my-app;some_cmd;help' {
|
'my-app;some_cmd;help' {
|
||||||
[CompletionResult]::new('sub_cmd', 'sub_cmd', [CompletionResultType]::ParameterValue, 'sub-subcommand')
|
[CompletionResult]::new('sub_cmd', 'sub_cmd', [CompletionResultType]::ParameterValue, 'sub-subcommand')
|
||||||
[CompletionResult]::new('help', 'help', [CompletionResultType]::ParameterValue, 'Print this message or the help of the given subcommand(s)')
|
[CompletionResult]::new('help', 'help', [CompletionResultType]::ParameterValue, 'Print this message or the help of the given subcommand(s)')
|
||||||
|
@ -70,6 +88,17 @@ Register-ArgumentCompleter -Native -CommandName 'my-app' -ScriptBlock {
|
||||||
'my-app;some_cmd;help;help' {
|
'my-app;some_cmd;help;help' {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
'my-app;some_cmd_alias;help' {
|
||||||
|
[CompletionResult]::new('sub_cmd', 'sub_cmd', [CompletionResultType]::ParameterValue, 'sub-subcommand')
|
||||||
|
[CompletionResult]::new('help', 'help', [CompletionResultType]::ParameterValue, 'Print this message or the help of the given subcommand(s)')
|
||||||
|
break
|
||||||
|
}
|
||||||
|
'my-app;some_cmd_alias;help;sub_cmd' {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
'my-app;some_cmd_alias;help;help' {
|
||||||
|
break
|
||||||
|
}
|
||||||
'my-app;help' {
|
'my-app;help' {
|
||||||
[CompletionResult]::new('test', 'test', [CompletionResultType]::ParameterValue, 'tests things')
|
[CompletionResult]::new('test', 'test', [CompletionResultType]::ParameterValue, 'tests things')
|
||||||
[CompletionResult]::new('some_cmd', 'some_cmd', [CompletionResultType]::ParameterValue, 'top level subcommand')
|
[CompletionResult]::new('some_cmd', 'some_cmd', [CompletionResultType]::ParameterValue, 'top level subcommand')
|
||||||
|
|
|
@ -97,6 +97,60 @@ esac
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
(some_cmd_alias)
|
||||||
|
_arguments "${_arguments_options[@]}" \
|
||||||
|
'-h[Print help]' \
|
||||||
|
'--help[Print help]' \
|
||||||
|
'-V[Print version]' \
|
||||||
|
'--version[Print version]' \
|
||||||
|
":: :_my-app__some_cmd_commands" \
|
||||||
|
"*::: :->some_cmd" \
|
||||||
|
&& ret=0
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
(some_cmd)
|
||||||
|
words=($line[1] "${words[@]}")
|
||||||
|
(( CURRENT += 1 ))
|
||||||
|
curcontext="${curcontext%:*:*}:my-app-some_cmd-command-$line[1]:"
|
||||||
|
case $line[1] in
|
||||||
|
(sub_cmd)
|
||||||
|
_arguments "${_arguments_options[@]}" \
|
||||||
|
'--config=[the other case to test]: :((Lest\ quotes,\ aren'\''t\ escaped.\:"help,with,comma"
|
||||||
|
Second\ to\ trigger\ display\ of\ options\:""))' \
|
||||||
|
'-h[Print help (see more with '\''--help'\'')]' \
|
||||||
|
'--help[Print help (see more with '\''--help'\'')]' \
|
||||||
|
'-V[Print version]' \
|
||||||
|
'--version[Print version]' \
|
||||||
|
&& ret=0
|
||||||
|
;;
|
||||||
|
(help)
|
||||||
|
_arguments "${_arguments_options[@]}" \
|
||||||
|
":: :_my-app__some_cmd__help_commands" \
|
||||||
|
"*::: :->help" \
|
||||||
|
&& ret=0
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
(help)
|
||||||
|
words=($line[1] "${words[@]}")
|
||||||
|
(( CURRENT += 1 ))
|
||||||
|
curcontext="${curcontext%:*:*}:my-app-some_cmd-help-command-$line[1]:"
|
||||||
|
case $line[1] in
|
||||||
|
(sub_cmd)
|
||||||
|
_arguments "${_arguments_options[@]}" \
|
||||||
|
&& ret=0
|
||||||
|
;;
|
||||||
|
(help)
|
||||||
|
_arguments "${_arguments_options[@]}" \
|
||||||
|
&& ret=0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
(help)
|
(help)
|
||||||
_arguments "${_arguments_options[@]}" \
|
_arguments "${_arguments_options[@]}" \
|
||||||
":: :_my-app__help_commands" \
|
":: :_my-app__help_commands" \
|
||||||
|
|
Loading…
Reference in a new issue