Vim PHP Refactoring: Extract Method Funktion

Mit Vim PHP refaktorisieren? Kein Problem mit folgender Funktion, das im Visual Mode markierten Code auslagert. Das Skript ist noch nicht ganz perfekt, aber schon mal eine ganz gute Basis. Im Laufe der nächsten Woche arbeite ich weiter daran. Die Basis für die Funktion ist eine C#-Variante von Klaus Horsten.

Einsatzbeispiel

Du möchtest im folgenden Code Zeile 6-8 in eine eigene Funktion auslagern:

public function test() {

    /* Code */
    // auszulagernder Code
    $array = array('key' => 'value');
    $testString = '';
    /* Code */

    return $array['key'] . $testString;
}

Refactoring: Extract Method

  1. Markiere die Zeilen 6-8 mit v oder Shift-V
  2. Rufe die Funktion auf (Standardmässig: \em)
  3. Du musst den Namen der neuen Funktion angeben (im Beispiel: testHelper)
  4. Danach kannst du Parameter angeben (im Beispiel: $foo)

Ergebnis

    public function test() {
        /* Code */
        = $this->testHelper($foo);// cursor nach dem Funktionsaufruf
        /* Code */
        return $array['key'] . $testString;
    }

    private function testHelper($foo) {
        $array = array('key' => 'value');
        $testString = '';
        return ;
    }

Die Funktion

Um die Funktion nutzen zu können, musst du nur folgenden Code in deine .vimrc kopieren:

function! ExtractMethod() range
    normal gvd
    exe "normal! ma"
    let name = inputdialog("name of new method")
    let params = inputdialog("parameters separated by ,")
    exe "normal! O$ = $this->" . name . "(" . params . ");"
    ?function
    /{
    %
    exe "normal! O"
    exe "normal! oprivate function " . name ."(" . params . ")"
    exe "normal! mb"
    exe "normal! o\{"
    exe "normal! oreturn ;"
    exe "normal! o\}"
    normal kP
    'b
endfunction

" call function by:
vmap \em :call ExtractMethod()
Tags// , , , ,
comments powered by Disqus