Ticket #531: extract_subroutine.patch

File extract_subroutine.patch, 2.0 KB (added by rhebus, 5 years ago)
  • Padre/Makefile.PL

     
    4343requires       'DBD::SQLite'              => '1.10'; 
    4444requires       'DBI'                      => '1.58'; 
    4545requires       'Devel::Dumpvar'           => '0.04'; 
     46requires       'Devel::Refactor'          => '0.05'; 
    4647requires       'Digest::MD5'              => 0; 
    4748requires       'Encode'                   => '2.26'; 
    4849requires       'File::Basename'           => 0; 
  • Padre/lib/Padre/Wx/Menu/Perl.pm

     
    8181        }, 
    8282    ); 
    8383 
     84    $self->{extract_subroutine} = $self->add_menu_item( 
     85        $self, 
     86        name       => 'perl.extract_subroutine', 
     87        label      => Wx::gettext('Extract Subroutine'), 
     88        menu_event => sub { 
     89            my $doc    = $_[0]->current->document; 
     90            my $editor = $doc->editor; 
     91            my $code   = $editor->GetSelectedText(); 
     92            require Padre::Wx::History::TextEntryDialog; 
     93            my $dialog = Padre::Wx::History::TextEntryDialog->new( 
     94                $_[0], 
     95                Wx::gettext("New Subroutine Name"), 
     96                Wx::gettext("Please enter a name for the new subroutine"), 
     97                '$foo', 
     98            ); 
     99            return if $dialog->ShowModal == Wx::wxID_CANCEL; 
     100            my $newname = $dialog->GetValue; 
     101            $dialog->Destroy; 
     102            return unless defined $newname; 
     103 
     104            require Devel::Refactor; 
     105            my $refactory = Devel::Refactor->new; 
     106            my ( $new_sub_call, $new_code ) = $refactory->extract_subroutine( $newname, $code, 1 ); 
     107            $editor->BeginUndoAction(); # do the edit atomically 
     108            $editor->ReplaceSelection($new_sub_call); 
     109            $editor->DocumentEnd();     # TODO: find a better place to put the new subroutine 
     110            $editor->AddText($new_code); 
     111            $editor->EndUndoAction(); 
     112        }, 
     113    ); 
     114 
    84115    $self->{introduce_temporary} = $self->add_menu_item( 
    85116        $self, 
    86117        name       => 'perl.introduce_temporary',