Mojo-PrettyTidy
view release on metacpan or search on metacpan
bin/mojo-prettytidy view on Meta::CPAN
'outdir=s' => sub ( $name, $val ) {
$opt{outdir} = $val;
$opt_source{outdir} = 'cli';
},
'perl!' => sub ( $name, $val ) {
$opt{perl} = $val ? 1 : 0;
$opt_source{perl} = 'cli';
},
'prefix|pre=s' => sub ( $name, $val ) {
$opt{prefix} = $val;
$opt_source{prefix} = 'cli';
},
'show-options|V+' => \$opt{show_options},
'stdin' => sub {
$opt{stdin} = 1;
$opt_source{stdin} = 'cli';
},
'version|v' => sub {
$opt{version} = 1;
$opt_source{version} = 'cli';
},
'write|w' => sub {
$opt{write} = 1;
$opt_source{write} = 'cli';
},
) or pod2usage( 2 );
if ( $opt{help} ) {
my $manual = _manual_path()
or die "Could not find Manual.pod\n";
my $section = _pod_section( _slurp( $manual ), 'COMMAND-LINE OPTIONS' )
or die "Could not find COMMAND-LINE OPTIONS in $manual\n";
_print_pod_text( $section );
exit 0;
}
if ( $opt{man} ) {
my $manual = _manual_path()
or die "Could not find Manual.pod\n";
_print_pod_text( _slurp( $manual ) );
exit 0;
}
if ( $opt{version} ) {
print "mojo-prettytidy $Mojo::PrettyTidy::VERSION\n";
exit 0;
}
my @inputs = @ARGV;
my $cfg = {};
my @files = _collect_input_files( @inputs );
if ( $opt_source{config} eq 'cli' ) {
$cfg = _load_config_file( $opt{config} );
_validate_config( $cfg, $opt{config} );
} else {
my $config_path = _find_default_config_file();
if ( length $config_path ) {
$opt{config} = $config_path;
$opt_source{config} = 'auto';
$cfg = _load_config_file( $config_path );
_validate_config( $cfg, $config_path );
}
}
for my $name (
qw(attributes columns indent_width javascript outdir perl prefix
tab_width) )
{
next unless exists $cfg->{$name};
next unless $opt_source{$name} eq 'default';
$opt{$name} = $cfg->{$name};
$opt_source{$name} = 'config';
}
_show_options( \%opt, \%opt_source, \%default_opt, \@inputs )
if $opt{show_options};
pod2usage( "--backup requires --write\n" )
if $opt{backup} && !$opt{write};
pod2usage( "--backup-ext requires --write\n" )
if defined( $opt{backup_ext} )
&& $opt{backup_ext} ne '.bak'
&& !$opt{write};
pod2usage( "--check requires a single input file\n" )
if $opt{check} && _has_directory_input( @inputs );
pod2usage( "--diff requires a single input file\n" )
if $opt{diff} && _has_directory_input( @inputs );
pod2usage( "--diff cannot be combined with --write\n" )
if $opt{diff} && $opt{write};
pod2usage( "--diff cannot be combined with --stdin\n" )
if $opt{diff} && $opt{stdin};
pod2usage( "--output cannot be combined with --check\n" )
if $opt{output} && $opt{check};
pod2usage( "--output cannot be combined with --diff\n" )
if $opt{output} && $opt{diff};
pod2usage( "--output cannot be combined with --write\n" )
if $opt{output} && $opt{write};
pod2usage( "--write cannot be combined with --prefix\n" )
if $opt{write} && length $opt{prefix};
pod2usage( "--write cannot be combined with --outdir\n" )
if $opt{write} && length $opt{outdir};
pod2usage( "--stdin cannot be combined with --write\n" )
if $opt{stdin} && $opt{write};
pod2usage( "--stdin cannot be combined with --backup\n" )
if $opt{stdin} && $opt{backup};
pod2usage( "--stdin cannot be combined with file or directory inputs\n" )
if $opt{stdin} && @inputs;
bin/mojo-prettytidy view on Meta::CPAN
return length $outdir
? File::Spec->catfile( $outdir, $name )
: File::Spec->catfile( $dir, $name );
}
sub _show_options ( $opt, $source, $defaults, $inputs ) {
my $show_all = ( $opt->{show_options} || 0 ) >= 2 ? 1 : 0;
print "mojo-prettytidy effective options:\n";
for my $name ( sort keys %$opt ) {
my $value = defined $opt->{$name} ? $opt->{$name} : '';
my $from = $source->{$name} // 'unknown';
if ( !$show_all ) {
my $default = defined $defaults->{$name} ? $defaults->{$name} : '';
next
if $value eq ''
&& $from eq 'default';
next
if !$value
&& $value eq $default
&& $from eq 'default';
}
my $label = $name;
$label =~ s/_/-/g;
printf " %-14s => %-30s [%s]\n", $label, $value, $from;
}
if ( $show_all || @$inputs ) {
printf " %-14s => %-30s [%s]\n", 'input-count', scalar( @$inputs ),
'input';
for my $i ( 0 .. $#$inputs ) {
printf " %-14s => %-30s [%s]\n", "input[$i]", $inputs->[$i], 'input';
}
}
return;
}
sub _slurp ( $path ) {
open my $fh, '<', $path or die "Cannot open '$path' for reading: $!";
local $/;
my $content = <$fh>;
close $fh;
return $content;
}
sub _spew ( $path, $content ) {
open my $fh, '>', $path or die "Cannot open '$path' for writing: $!";
print {$fh} $content or die "Cannot write '$path': $!";
close $fh or die "Cannot close '$path': $!";
}
sub _validate_config ( $cfg, $path ) {
my %allowed = map { $_ => 1 } qw(
attributes
columns
indent_width
javascript
outdir
prefix
perl
tab_width
);
for my $k ( keys %$cfg ) {
die "Unknown config key '$k' in '$path'\n"
unless $allowed{$k};
}
}
__END__
( run in 1.713 second using v1.01-cache-2.11-cpan-0b5f733616e )