Domanda

Ho un sacco di classi che voglio rinominare.Alcuni di loro hanno nomi piccoli e quel nome viene riutilizzato nei nomi di altre classi, dove non voglio che il nome venga cambiato.La maggior parte di questo risiede nel codice Python, ma abbiamo anche del codice XML che fa riferimento ai nomi delle classi.

La semplice ricerca e sostituzione mi porta solo finora.Nel mio caso, voglio rinominare AdminAction in AdminActionPlug e AdminActionLogger in AdminActionLoggerPlug, in modo che la ricerca e sostituzione del primo colpisca erroneamente anche il secondo.

Qualcuno ha esperienza con gli strumenti di refactoring Python?Punti bonus se riescono a correggere anche i nomi delle classi nei documenti XML.

È stato utile?

Soluzione

Nel frattempo, ho provato due strumenti che hanno una sorta di integrazione con vim.

Il primo è Corda, una libreria di refactoring Python fornita con un plug-in Vim (ed emacs).L'ho provato per alcune ridenominazioni e ha sicuramente funzionato come previsto.Mi ha permesso di visualizzare in anteprima il refactoring come diff, il che è carino.È un po' basato sul testo, ma per me va bene, richiede solo più tempo per imparare.

Il secondo è Uomo della riparazione di biciclette che immagino vinca punti sul nome.Si collega anche a vim ed emacs.Non ci ho ancora giocato molto, ma ricordo di averlo provato molto tempo fa.

Non ho ancora giocato abbastanza con entrambi, né provato più tipi di refactoring, ma li utilizzerò ancora un po'.

Altri suggerimenti

Lo consiglio vivamente PyCharm - non solo per i refactoring.Da quando la prima risposta di PyCharm è stata pubblicata qui alcuni anni fa, il supporto per il refactoring in PyCharm è migliorato in modo significativo.

Refactoring Python disponibili in PyCharm (ultimo controllo il 27/07/2016 in PyCharm 2016.2)

  • Cambia firma
  • Converti in pacchetto/modulo Python
  • copia
  • Estrai refactoring
  • In linea
  • Inverti booleano
  • Crea una funzione di primo livello
  • Spostare i refactoring
  • Spingere i membri verso il basso
  • Tira su i membri
  • Rinominare i refactoring
  • Eliminazione sicura

Refactoring XML (ho controllato nel menu contestuale in un file XML):

  • Rinominare
  • Mossa
  • copia
  • Estrai la sottoquery come CTE
  • In linea

Refactoring Javascript:

  • Estrai il parametro in JavaScript
  • Cambia firma in JavaScript
  • Estrai variabile in JavaScript

WingIDE 4.0 (WingIDE è il mio IDE Python preferito) supporterà alcuni refactoring, ma ho appena provato l'ultima beta, beta6 e...c'è ancora del lavoro da fare.Il metodo Ritira funziona bene, ma Rinomina simbolo no.

Aggiornamento:La versione 4.0 ha corretto tutti gli strumenti di refactoring.Funzionano alla grande adesso.

Il tuo IDE può supportare i refactoring!!Controlla Eric, Eclipse, WingIDE hanno strumenti integrati per il refactoring (Rinomina inclusa).E questi sono refactoring molto sicuri: se qualcosa può andare storto, l'IDE non farà ref.

Considera anche l'aggiunta di alcuni unit test per garantire che il tuo codice non abbia subito danni durante i refactoring.

PyCharm hanno alcune funzionalità di refactoring.

REFACTORING PYTHON

Rinominare il refactoring consente di eseguire modifiche globali al codice in modo sicuro e immediato.Le modifiche locali all'interno di un file vengono eseguite sul posto.I refactoring funzionano in semplici progetti Python e Django.

Utilizzo Introdurre Variabile/Campo/Costante E Locale in linea per migliorare la struttura del codice all'interno di un metodo, Metodo di estrazione per spezzare i metodi più lunghi, Estrai la superclasse, Flessioni, Tirare giù E Mossa per spostare i metodi e le classi.

darei un'occhiata Giocatore di bowling (https://pybowler.io).

È più adatto per l'uso direttamente dalla riga di comando rispetto a Rope e incoraggia lo scripting (script una tantum).

Puoi usare sed per eseguire questa operazione.Il trucco sta nel ricordare che le espressioni regolari possono riconoscere i confini delle parole.Funziona su tutte le piattaforme a condizione che tu abbia gli strumenti, che su Windows è Cygwin, Mac OS potrebbe richiedere l'installazione degli strumenti di sviluppo, non ne sono sicuro, e Linux lo ha pronto all'uso.Quindi grep, xargs e sed dovrebbero fare il trucco, dopo 12 ore di lettura di pagine man e tentativi ed errori;)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top