wiki:PadrePluginFix

Version 25 (modified by azawawi, 3 years ago) (diff)

--

<-plug-ins

Padre::Plugin::Fix

Usage


Uses PPI to identify and transform stuff from form A to B.

sub a {
}

die "hello world";

sub b {
}
  • From ticket:1200, Replace one or all occurrences of indirect notations such as this:
new Something("bla");

should become

Something->new("bla");
  • Over selection text range, provide the ability to quote it and choose qq{} or q{}
  • Negate if block form with unless and vice versa
if(defined $fh) {
  say "File is open";
} else {
  say "File is not open!";
}

should become

unless(defined $fh) {
  say "File is not open!";
} else {
  say "File is open";
}
  • Transform if single statement into postfix form and vice versa:
if(defined $fh) {
  print "File is open";
} 

should become

print "File is open" if defined $fh;
  • Add forgotten else clause to if block
  • Transform qq{string} where string does not contain escape sequences into q{string} or 'string'
  • if use v5.10; or greater is used, then print "something\n" can be transformed into say "something"
  • Transform my $param1 = shift into my ($param1) = @_; and vice versa
  • if-elsif-else transformation into given-when. Please see Switch statements
if($type eq 'a') {
} elsif($type eq 'b') {
} else {
}

should become

given($type) {
when ('a') { }
when ('b') { }
default    { }
}
  • Add Padre::Document::Perl::Beginner checks and convert them to PPI

No image "PadrePluginFix.png" attached to PadrePluginFix


Tester

  • assuming modern perl
    #!/usr/bin/env perl
    
    use 5.014;
    use strict;
    use warnings;
    
    use Carp;
    
    # Turn on $OUTPUT_AUTOFLUSH
    $| = 1;
    use feature 'unicode_strings';
    
    #1, the following " -> ' try for your self
    open ( my $filehandle, "<:utf8", "test.bin") or die $!;
    
    #2, food for thought only
    #before open ( my $filehandle, "<:utf8", "test.bin") or die $!;
    #after use Carp;
    #after my $filehandle = undef;
    #after open ( $filehandle, '<:encoding(UTF-8)', 'test.bin') or croak $!;
    
    my $word = readline $filehandle;
    
    #3, food for thought only
    #before print "word = $word\n";
    #after say 'word ='.$word;
    
    #4, food for thought only, an evil null if =~ fails
    #before my ($untainted) = $word =~ /^(\w+)$/;
    #after my $untainted = undef;
    #after $untainted = $word =~ /^(\w+)$/;
    
    say "untainted = $untainted";
    
    if ($untainted) {
        # It passed the regex, so it is "safe".
        system "echo $untainted";
    }
    
    1;
    
    __END__
    

TODO

  • Fix ticket:829
  • Fix ticket:992
  • Fix ticket:1200
  • Fix ticket:502
  • Move beginner checks from Padre here:
    Padre::Document::Perl::Beginner
    
  • Move ::QuickFix from Padre here:
    Padre::QuickFix
    Padre::Document::Perl::QuickFix
    Padre::Document::Perl::QuickFix::StrictWarnings
    Padre::Document::Perl::QuickFix::IncludeModule
    

Resources

__END__

<-plug-ins