App-perlimports
view release on metacpan or search on metacpan
lib/App/perlimports/CLI.pm view on Meta::CPAN
[ 'version', 'Print installed version', { shortcircuit => 1 } ],
[
'log-level|l=s', 'Print messages to STDERR',
],
[
'log-filename=s', 'Log messages to file rather than STDERR',
],
[ 'help', 'Print usage message and exit', { shortcircuit => 1 } ],
[
'verbose-help', 'Print usage message and documentation ',
{ shortcircuit => 1 }
],
);
return { opts => $opt, usage => $usage, };
}
sub _build_config {
my $self = shift;
my %config;
if ( !$self->_opts->no_config_file && $self->_config_file ) {
%config = %{ $self->_read_config_file };
# The Bool type provided by Types::Standard doesn't seem to like
# JSON::PP::Boolean
for my $key ( keys %config ) {
my $maybe_bool = $config{$key};
my $ref = ref $maybe_bool;
next unless $ref;
if ( $ref eq 'JSON::PP::Boolean'
|| $ref eq 'Types::Serializer::Boolean' ) {
$config{$key} = $$maybe_bool ? 1 : 0;
}
}
}
my @config_options = qw(
cache
ignore_modules_filename
ignore_modules_pattern
indent
log_filename
log_level
never_export_modules_filename
pad_brackets
padding
preserve_duplicates
preserve_unused
tidy_whitespace
);
my @config_option_lists
= ( 'ignore_modules', 'libs', 'never_export_modules' );
my %args = map { $_ => $self->_opts->$_ }
grep { defined $self->_opts->$_ } @config_options;
for my $list (@config_option_lists) {
my $val = $self->_opts->$list;
if ( defined $val ) {
$args{$list} = [ split m{,}, $val ];
}
}
return App::perlimports::Config->new( %config, %args );
}
sub _build_config_file {
my $self = shift;
if ( $self->_opts->config_file ) {
if ( !-e $self->_opts->config_file ) {
die $self->_opts->config_file . ' not found';
}
return $self->_opts->config_file;
}
my @filenames = ( 'perlimports.toml', '.perlimports.toml', );
for my $name (@filenames) {
return $name if -e $name;
}
require File::XDG;
my $xdg_config = File::XDG->new( name => 'perlimports', api => 1 );
my $file = $xdg_config->config_home->child( $filenames[0] );
return -e $file ? "$file" : q{};
}
sub _read_config_file {
my $self = shift;
require TOML::Tiny;
my $config = TOML::Tiny::from_toml( path( $self->_config_file )->slurp );
return $config || {};
}
## no critic (Subroutines::ProhibitExcessComplexity)
sub run {
my $self = shift;
my $opts = $self->_opts;
( print $VERSION, "\n" ) && return 0 if $opts->version;
( print $self->_usage->text ) && return 0 if $opts->help;
if ( $opts->verbose_help ) {
require Pod::Usage; ## no perlimports
my $fh = \*STDOUT;
Pod::Usage::pod2usage(
(
{
-exitval => 'NOEXIT',
-message => $self->_usage->text,
-output => $fh,
}
)
);
return 0;
}
if ( $opts->create_config_file ) {
( run in 0.868 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )