mirror of
https://git.proxmox.com/git/pve-common
synced 2025-07-17 10:21:29 +00:00
cli: refactor print_bash_completion
move variables nearer to where they actually used. drop program name early from argv array drop unnecessary variables Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
b21cf57546
commit
5fa768fc8d
@ -203,34 +203,28 @@ my $print_bash_completion = sub {
|
|||||||
print STDERR "\nCMDLINE: $ENV{COMP_LINE}\n" if $debug;
|
print STDERR "\nCMDLINE: $ENV{COMP_LINE}\n" if $debug;
|
||||||
|
|
||||||
my $args = PVE::Tools::split_args($cmdline);
|
my $args = PVE::Tools::split_args($cmdline);
|
||||||
my $pos = scalar(@$args) - 2;
|
shift @$args; # no need for program name
|
||||||
$pos += 1 if $cmdline =~ m/\s+$/;
|
|
||||||
|
|
||||||
print STDERR "CMDLINE:$pos:$cmdline\n" if $debug;
|
|
||||||
|
|
||||||
return if $pos < 0;
|
|
||||||
|
|
||||||
my $print_result = sub {
|
my $print_result = sub {
|
||||||
foreach my $p (@_) {
|
foreach my $p (@_) {
|
||||||
print "$p\n" if $p =~ m/^$cur/;
|
print "$p\n" if $p =~ m/^$cur/;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
my $cmd;
|
my ($cmd, $def) = ($simple_cmd, $cmddef);
|
||||||
if ($simple_cmd) {
|
if (!$simple_cmd) {
|
||||||
$cmd = $simple_cmd;
|
if (!scalar(@$args)) {
|
||||||
} else {
|
&$print_result(keys %$def);
|
||||||
if ($pos == 0) {
|
|
||||||
&$print_result(keys %$cmddef);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$cmd = $args->[1];
|
$cmd = $args->[0];
|
||||||
}
|
}
|
||||||
|
$def = $def->{$cmd};
|
||||||
my $def = $cmddef->{$cmd};
|
|
||||||
return if !$def;
|
return if !$def;
|
||||||
|
|
||||||
print STDERR "CMDLINE1:$pos:$cmdline\n" if $debug;
|
my $pos = scalar(@$args) - 1;
|
||||||
|
$pos += 1 if $cmdline =~ m/\s+$/;
|
||||||
|
print STDERR "pos: $pos\n" if $debug;
|
||||||
|
return if $pos < 0;
|
||||||
|
|
||||||
my $skip_param = {};
|
my $skip_param = {};
|
||||||
|
|
||||||
@ -243,12 +237,9 @@ my $print_bash_completion = sub {
|
|||||||
map { $skip_param->{$_} = 1; } @$arg_param;
|
map { $skip_param->{$_} = 1; } @$arg_param;
|
||||||
map { $skip_param->{$_} = 1; } keys %$uri_param;
|
map { $skip_param->{$_} = 1; } keys %$uri_param;
|
||||||
|
|
||||||
my $fpcount = scalar(@$arg_param);
|
|
||||||
|
|
||||||
my $info = $class->map_method_by_name($name);
|
my $info = $class->map_method_by_name($name);
|
||||||
|
|
||||||
my $schema = $info->{parameters};
|
my $prop = $info->{parameters}->{properties};
|
||||||
my $prop = $schema->{properties};
|
|
||||||
|
|
||||||
my $print_parameter_completion = sub {
|
my $print_parameter_completion = sub {
|
||||||
my ($pname) = @_;
|
my ($pname) = @_;
|
||||||
@ -267,9 +258,9 @@ my $print_bash_completion = sub {
|
|||||||
};
|
};
|
||||||
|
|
||||||
# positional arguments
|
# positional arguments
|
||||||
$pos += 1 if $simple_cmd;
|
$pos++ if $simple_cmd;
|
||||||
if ($fpcount && $pos <= $fpcount) {
|
if ($pos < scalar(@$arg_param)) {
|
||||||
my $pname = $arg_param->[$pos -1];
|
my $pname = $arg_param->[$pos];
|
||||||
&$print_parameter_completion($pname);
|
&$print_parameter_completion($pname);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user