Frage

Ich habe eine Reihe von Klassen, die ich umbenennen möchte.Einige von ihnen haben kleine Namen und dieser Name wird in anderen Klassennamen wiederverwendet, wobei ich nicht möchte, dass dieser Name geändert wird.Das meiste davon steckt im Python-Code, aber wir haben auch XML-Code, der auf Klassennamen verweist.

Einfaches Suchen und Ersetzen bringt mich bisher nur weiter.In meinem Fall möchte ich „AdminAction“ in „AdminActionPlug“ und „AdminActionLogger“ in „AdminActionLoggerPlug“ umbenennen, sodass die Such- und Ersetzungsfunktion des ersten fälschlicherweise auch den zweiten Treffer treffen würde.

Hat jemand Erfahrung mit Python-Refactoring-Tools?Bonuspunkte, wenn sie auch Klassennamen in den XML-Dokumenten korrigieren können.

War es hilfreich?

Lösung

In der Zwischenzeit habe ich zwei Tools ausprobiert, die irgendwie in vim integriert sind.

Das erste ist Seil, eine Python-Refactoring-Bibliothek, die mit einem Vim- (und Emacs-)Plug-in geliefert wird.Ich habe es für ein paar Umbenennungen ausprobiert und das hat definitiv wie erwartet funktioniert.Dadurch konnte ich das Refactoring als Diff in der Vorschau anzeigen, was sehr schön ist.Es ist ein bisschen textlastig, aber für mich ist das in Ordnung, es dauert nur länger, es zu lernen.

Das zweite ist Fahrradreparaturmann was meiner Meinung nach Punkte für den Namen bringt.Lässt sich auch an vim und emacs anschließen.Ich habe noch nicht viel damit gespielt, aber ich erinnere mich, dass ich es vor langer Zeit ausprobiert habe.

Ich habe noch nicht genug mit beiden gespielt oder weitere Arten von Refactoring ausprobiert, aber ich werde noch ein paar Hacks damit machen.

Andere Tipps

Ich würde es wärmstens empfehlen PyCharm - nicht nur für Refactorings.Seit die erste PyCharm-Antwort vor einigen Jahren hier veröffentlicht wurde, hat sich die Refactoring-Unterstützung in PyCharm erheblich verbessert.

Python-Refactorings in PyCharm verfügbar (zuletzt überprüft am 27.07.2016 in PyCharm 2016.2)

  • Signatur ändern
  • In ein Python-Paket/Modul konvertieren
  • Kopieren
  • Refactorings extrahieren
  • Im Einklang
  • Booleschen Wert umkehren
  • Machen Sie eine Top-Level-Funktion
  • Refactorings verschieben
  • Drücken Sie die Mitglieder nach unten
  • Ziehen Sie die Mitglieder nach oben
  • Refactorings umbenennen
  • Sicheres Löschen

XML-Refactorings (ich habe im Kontextmenü in einer XML-Datei nachgesehen):

  • Umbenennen
  • Bewegen
  • Kopieren
  • Unterabfrage als CTE extrahieren
  • Im Einklang

Javascript-Refactorings:

  • Parameter in JavaScript extrahieren
  • Signatur in JavaScript ändern
  • Variable in JavaScript extrahieren

WingIDE 4.0 (WingIDE ist meine bevorzugte Python-IDE) wird einige Refaktorierungen unterstützen, aber ich habe gerade die neueste Beta, Beta6, ausprobiert und ...es gibt noch viel zu tun.Die Retract-Methode funktioniert gut, Rename Symbol jedoch nicht.

Aktualisieren:In der Version 4.0 wurden alle Refactoring-Tools behoben.Sie funktionieren jetzt großartig.

Ihre IDE kann Refactorings unterstützen!!Überprüfen Sie, ob Eric, Eclipse und WingIDE über integrierte Tools für Refactorings verfügen (einschließlich Umbenennen).Und das sind sehr sichere Refactorings – wenn etwas schief gehen kann, führt die IDE kein Ref durch.

Erwägen Sie auch das Hinzufügen einiger Komponententests, um sicherzustellen, dass Ihr Code während der Umgestaltungen nicht beeinträchtigt wird.

PyCharm verfügen über einige Refactoring-Funktionen.

PYTHON-REFACTORING

Umbenennen Refactoring ermöglicht die sichere und sofortige Durchführung globaler Codeänderungen.Lokale Änderungen innerhalb einer Datei werden direkt durchgeführt.Refactorings funktionieren in einfachen Python- und Django-Projekten.

Verwenden Variable/Feld/Konstante einführen Und Inline-Lokal zur Verbesserung der Codestruktur innerhalb einer Methode, Extraktionsmethode um längere Methoden aufzubrechen, Superklasse extrahieren, Hochdrücken, Nach unten ziehen Und Bewegen um die Methoden und Klassen zu verschieben.

Ich würde einen Blick darauf werfen Bowler (https://pybowler.io).

Es eignet sich besser für die Verwendung direkt über die Befehlszeile als Rope und fördert die Skripterstellung (einmalige Skripts).

Sie können dazu sed verwenden.Der Trick besteht darin, sich daran zu erinnern, dass reguläre Ausdrücke Wortgrenzen erkennen können.Dies funktioniert auf allen Plattformen, vorausgesetzt, Sie erhalten die Tools. Unter Windows ist dies Cygwin. Bei Mac OS ist möglicherweise die Installation der Entwicklungstools erforderlich, ich bin mir nicht sicher, und bei Linux ist dies sofort einsatzbereit.Also sollten grep, xargs und sed ausreichen, nach 12 Stunden Lesen von Manpages und Ausprobieren ;)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top