[pve-devel] [RFC common 4/9] cli: refactor print_bash_completion

Dominik Csapak d.csapak at proxmox.com
Tue Dec 5 08:56:14 CET 2017


Reviewed-by: Dominik Csapak <d.csapak at proxmox.com>

On 11/06/2017 02:54 PM, Thomas Lamprecht wrote:
> move variables nearer to where they actually used.
> drop program name early from argv array
> drop unnecessary variables
> ---
>   src/PVE/CLIHandler.pm | 39 +++++++++++++++------------------------
>   1 file changed, 15 insertions(+), 24 deletions(-)
> 
> diff --git a/src/PVE/CLIHandler.pm b/src/PVE/CLIHandler.pm
> index ab1440c..311cc69 100644
> --- a/src/PVE/CLIHandler.pm
> +++ b/src/PVE/CLIHandler.pm
> @@ -197,34 +197,28 @@ my $print_bash_completion = sub {
>       print STDERR "\nCMDLINE: $ENV{COMP_LINE}\n" if $debug;
>   
>       my $args = PVE::Tools::split_args($cmdline);
> -    my $pos = scalar(@$args) - 2;
> -    $pos += 1 if $cmdline =~ m/\s+$/;
> -
> -    print STDERR "CMDLINE:$pos:$cmdline\n" if $debug;
> -
> -    return if $pos < 0;
> -
> +    shift @$args; # no need for program name
>       my $print_result = sub {
>   	foreach my $p (@_) {
>   	    print "$p\n" if $p =~ m/^$cur/;
>   	}
>       };
>   
> -    my $cmd;
> -    if ($simple_cmd) {
> -	$cmd = $simple_cmd;
> -    } else {
> -	if ($pos == 0) {
> -	    &$print_result(keys %$cmddef);
> +    my ($cmd, $def) = ($simple_cmd, $cmddef);
> +    if (!$simple_cmd) {
> +	if (!scalar(@$args)) {
> +	    &$print_result(keys %$def);
>   	    return;
>   	}
> -	$cmd = $args->[1];
> +	$cmd = $args->[0];
>       }
> -
> -    my $def = $cmddef->{$cmd};
> +    $def = $def->{$cmddef};
>       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 = {};
>   
> @@ -237,12 +231,9 @@ my $print_bash_completion = sub {
>       map { $skip_param->{$_} = 1; } @$arg_param;
>       map { $skip_param->{$_} = 1; } keys %$uri_param;
>   
> -    my $fpcount = scalar(@$arg_param);
> -
>       my $info = $class->map_method_by_name($name);
>   
> -    my $schema = $info->{parameters};
> -    my $prop = $schema->{properties};
> +    my $prop = $info->{parameters}->{properties};
>   
>       my $print_parameter_completion = sub {
>   	my ($pname) = @_;
> @@ -261,9 +252,9 @@ my $print_bash_completion = sub {
>       };
>   
>       # positional arguments
> -    $pos += 1 if $simple_cmd;
> -    if ($fpcount && $pos <= $fpcount) {
> -	my $pname = $arg_param->[$pos -1];
> +    $pos++ if $simple_cmd;
> +    if ($pos < scalar(@$arg_param)) {
> +	my $pname = $arg_param->[$pos];
>   	&$print_parameter_completion($pname);
>   	return;
>       }
> 





More information about the pve-devel mailing list