2016-01-14 14 views
5

Sono nuovo di Eclipse e sto usando la versione Versione: Mars.1 di rilascio (4.5.1)Eclipse - utilizzando il nome del file convenzioni di refactoring php-Classes

Sto usando lo strumento di refactoring degli "strumenti di sviluppo PHP 3.6 "plugin per rinominare es classi.

I nostri nomi di file di classe seguono la semplice convenzione PSR-0 che un carattere di sottolineatura rappresenta una sottodirectory.

Così ad es. classe Class_Something si trova in Classe/Something.php

Se cambio titolo il Class_Something classe per Class_Something2 sarebbe bello se il file sarebbe stato spostato automaticamente alla classe/Something2.php

Qualcuno sa se è possibile ridefinire automaticamente non solo il nome e i riferimenti della classe ma anche il nome del file?

Grazie in anticipo per il vostro aiuto!

Ben

+1

non credo che ci sia un plugin specifico che può raggiungere le vostre aspettative, è necessario sviluppare una consuetudine routine che è possibile avviare manualmente da Eclipse per eseguire questo tipo di refactoring. –

risposta

4

soluzione a mano che sembra un plugin Eclipse

In primo luogo, scaricare e installare PHP Parser da: php-parser-github un semplice esempio vi mostrerà che è possibile ottenere il nome della classe da un dato codice sorgente

Esempio di codice sorgente

require 'vendor/autoload.php'; 
use PhpParser\ParserFactory; 

$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7); 
try { 
    $stmts = $parser->parse('<?php class MyClass_SubDir {private $member;}'); 
    var_dump($stmts); 
} 
catch (Error $e) { 
    echo 'Parse Error: ', $e->getMessage(); 
} 
.210

L'esecuzione da linea di comando // uscita

array(1) { 
    [0]=> 
    object(PhpParser\Node\Stmt\Class_)#8 (6) { 
    ["type"]=> 
    int(0) 
    ["extends"]=> 
    NULL 
    ["implements"]=> 
    array(0) { 
    } 
    ["name"]=> 
    string(14) "MyClass_SubDir" 
    ["stmts"]=> 
    array(1) { 
     [0]=> 
     object(PhpParser\Node\Stmt\Property)#7 (3) { 
     ... 
} 

e come potete vedere, siamo in grado di ottenere tutte le classi che sono definiti nel generatore di corrente

--object(PhpParser\Node\Stmt\Class_ 
| 
|___ name : MyClass_SubDir 

Gli obiettivi qui ci sono

  • estrarre il nome della directory da un nome classe, per farlo è possibile utilizzare `regex` o` explode`
  • Spostare il file corrente alla directory desiderata, è possibile utilizzare la funzione `rename`

Salvare il codice php da qualche parte ... eclipse_plugin.php per esempio ..

Il passo successivo è quello di creare un file batch che verrà collegato con Eclipse

Creare un file da bagno che riceverà 2 argomenti da Eclipse

  • ** $ 1 **: posizione container - il percorso assoluto del file selezionato in Eclipse
  • ** $ 2 **: risorsa posizione - il percorso assoluto e il nome del file selezionato in Eclipse (avremo bisogno di soli $ 2 :-))

Nel file batch messo

php eclipse_plugin.php $1 $2 

Nota: php deve essere nelle variabili d'ambiente PATH PHP troverà i suoi argomenti in $argv[0] e $argv[1]

Configurazione Eclipse

  • andare Esegui strumenti esterni> Configurazione strumenti esterni> fai clic su Sezione programmi> Premi su Nuova configurazione di avvio
  • nella Tab principale, specificare il percorso del file batch personalizzato
  • anche specificare la directory di lavoro
  • nella sezione Argomenti, mettere questi argomenti $ {container_loc} $ {resource_loc}

Fatto!, ora quando si rinomina la classe in Eclipse, è sufficiente fare clic sul pulsante Esegui :)

HTH

+0

Che cos'è la cronologia e la cache di svn? I file spostati verranno probabilmente rilevati come nuovi, no? –

+0

@code_angel buona domanda :) e la risposta è semplice: juste chiama 'svn move' in PHP script che viene eseguito dal file batch :) –

+0

Wow, grazie mille per quella grande risposta, mi ha aiutato molto! – Ben

Problemi correlati