App-GenPericmdCompleterScript

 view release on metacpan or  search on metacpan

lib/App/GenPericmdCompleterScript.pm  view on Meta::CPAN

            '    );', "\n",
            "}\n\n",

            "# display result\n",
            'if    ($shell eq "bash") { print Complete::Bash::format_completion($compres, {word=>$words->[$cword]}) }', "\n",
            'elsif ($shell eq "tcsh") { print Complete::Tcsh::format_completion($compres) }', "\n",
        );

        $code = join "", @res;
    } # END GENERATE CODE

    # pack the modules
    my $packed_code;
    {
        require App::depak;
        require File::Slurper;
        require File::Temp;

        my (undef, $tmp_unpacked_path) = File::Temp::tempfile();
        my (undef, $tmp_packed_path)   = File::Temp::tempfile();

        File::Slurper::write_text($tmp_unpacked_path, $code);

        my %depakargs = (
            include_prereq => [sort keys %used_modules],
            input_file     => $tmp_unpacked_path,
            output_file    => $tmp_packed_path,
            overwrite      => 1,
            trace_method   => 'none',
            pack_method    => 'datapack',
            code_after_shebang => "## no critic: TestingAndDebugging::RequireUseStrict\n", # currently datapack code does not use strict
        );
        if ($args{strip}) {
            $depakargs{stripper} = 1;
            $depakargs{stripper_pod}     = 1;
            $depakargs{stripper_comment} = 1;
            $depakargs{stripper_ws}      = 1;
            $depakargs{stripper_maintain_linum} = 0;
            $depakargs{stripper_log}     = 0;
        } else {
            $depakargs{stripper} = 0;
        }
        my $res = App::depak::depak(%depakargs);
        return $res unless $res->[0] == 200;

        $packed_code = File::Slurper::read_text($tmp_packed_path);
    }

    if ($output_file ne '-') {
        log_trace("Outputing result to %s ...", $output_file);
        if ((-f $output_file) && !$args{overwrite}) {
            return [409, "Output file '$output_file' already exists (please use --overwrite if you want to override)"];
        }
        open my($fh), ">", $output_file
            or return [500, "Can't open '$output_file' for writing: $!"];

        print $fh $packed_code;
        close $fh
            or return [500, "Can't write '$output_file': $!"];

        chmod 0755, $output_file or do {
            log_warn("Can't 'chmod 0755, $output_file': $!");
        };

        my $output_name = $output_file;
        $output_name =~ s!.+[\\/]!!;

        $packed_code = "";
    }

    [200, "OK", $packed_code, {
    }];
}

1;
# ABSTRACT: Generate Perinci::CmdLine completer script

__END__

=pod

=encoding UTF-8

=head1 NAME

App::GenPericmdCompleterScript - Generate Perinci::CmdLine completer script

=head1 VERSION

This document describes version 0.126 of App::GenPericmdCompleterScript (from Perl distribution App-GenPericmdCompleterScript), released on 2023-07-11.

=head1 FUNCTIONS


=head2 gen_pericmd_completer_script

Usage:

 gen_pericmd_completer_script(%args) -> [$status_code, $reason, $payload, \%result_meta]

Generate Perinci::CmdLine completer script.

This function is not exported by default, but exportable.

Arguments ('*' denotes required arguments):

=over 4

=item * B<completion> => I<code>

(No description)

=item * B<default_subcommand> => I<str>

(No description)

=item * B<exclude_package_functions_match> => I<re>

Exclude package functions matching this pattern.

=item * B<get_subcommand_from_arg> => I<int> (default: 1)



( run in 0.794 second using v1.01-cache-2.11-cpan-524268b4103 )