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 )