Code-CutNPaste
view release on metacpan or search on metacpan
lib/Code/CutNPaste.pm view on Meta::CPAN
package Code::CutNPaste;
use 5.006;
use autodie;
use Benchmark qw(timediff timestr);
use Try::Tiny;
use Capture::Tiny qw(capture);
use Carp;
use File::Find::Rule;
use File::HomeDir;
use File::Slurp;
use File::Spec::Functions qw(catfile catdir);
use Getopt::Long;
use Moo;
use Parallel::ForkManager;
use Term::ProgressBar;
use aliased 'Code::CutNPaste::Duplicate';
use aliased 'Code::CutNPaste::Duplicate::Item';
has 'renamed_vars' => ( is => 'ro' );
has 'renamed_subs' => ( is => 'ro' );
has 'verbose' => ( is => 'ro' );
has 'window' => ( is => 'rwp', default => sub {5} );
has 'jobs' => ( is => 'ro', default => sub {1} );
has 'show_warnings' => ( is => 'ro' );
has 'noutf8' => ( is => 'ro' );
has 'threshold' => (
is => 'rwp',
default => sub {.75},
isa => sub {
no warnings 'uninitialized';
my $threshold = 0 + shift;
if ( $threshold < 0 or $threshold > 1 ) {
croak("threshold must be between 0 and 1, inclusive");
}
},
);
has 'dirs' => (
is => 'ro',
default => sub {'lib'},
coerce => sub {
my $dirs = shift;
unless ( ref $dirs ) {
$dirs = [$dirs];
}
return $dirs;
},
isa => sub {
my $dirs = shift;
for my $dir (@$dirs) {
unless ( -d $dir ) {
croak("Cannot find directory '$dir'");
}
}
},
);
has 'files' => (
is => 'ro',
default => sub { [] },
isa => sub {
my $files = shift;
unless ( 'ARRAY' eq ref $files ) {
croak("Argument to files must be an array reference of files");
}
for my $file (@$files) {
( run in 1.106 second using v1.01-cache-2.11-cpan-39bf76dae61 )