72 votes

Quels outils de refactoring utilisez-vous pour Python ?

J'ai un certain nombre de classes que je souhaite renommer. Certaines d'entre elles ont des noms qui sont petits et ce nom est réutilisé dans d'autres noms de classes, alors que je ne veux pas que ce nom soit changé. La plupart de ces éléments se trouvent dans le code Python, mais nous avons également du code XML qui fait référence à des noms de classes.

La recherche et le remplacement simples ne me permettent pas d'aller plus loin. Dans mon cas, je veux renommer AdminAction en AdminActionPlug et AdminActionLogger en AdminActionLoggerPlug, de sorte que la recherche-remplacement du premier renverrait également au second, à tort.

Quelqu'un a-t-il de l'expérience avec les outils de refactorisation Python ? Des points bonus s'ils peuvent aussi corriger les noms de classes dans les documents XML.

58voto

Thomas Vander Stichele Points 16872

En attendant, j'ai essayé deux outils qui ont une sorte d'intégration avec vim.

Le premier est Corde une bibliothèque de refactoring en python qui est livrée avec un plug-in Vim (et emacs). Je l'ai essayé pour quelques renommages, et cela a fonctionné comme prévu. Il m'a permis de prévisualiser le refactoring sous forme de diff, ce qui est agréable. C'est un peu axé sur le texte, mais cela me convient, il faut juste plus de temps pour l'apprendre.

Le second est Réparateur de bicyclettes ce qui, je suppose, fait gagner des points sur le plan du nom. Se branche également sur vim et emacs. Je n'ai pas encore beaucoup joué avec, mais je me souviens l'avoir essayé il y a longtemps.

Je n'ai pas encore assez joué avec les deux, ni essayé d'autres types de refactoring, mais je vais faire un peu plus de hacking avec eux.

2 votes

Un jour, un Grand Dieu viendra du ciel, et il nous donnera un outil de refactorisation basé sur Dev Express C# Code Rush pour d'autres langages. Quand ce jour viendra, Ctrl+Plick sera le raccourci le plus utilisé sur

5 votes

R

5voto

Michael Kent Points 830

WingIDE 4.0 (WingIDE est mon IDE de choix en python) supportera quelques refactorings, mais je viens d’essayer la dernière version bêta, beta6, et… il reste encore du travail à faire. La méthode Retract fonctionne bien, mais pas Rename Symbol.

Mise à jour: La version 4.0 a corrigé tous les outils de refactoring. Ils fonctionnent très bien maintenant.

4voto

przemo_li Points 264

Votre IDE peut prendre en charge les refactorings ! Vérifiez Eric, Eclipse, WingIDE ont des outils intégrés pour les refactorings (Rename y compris). Et ce sont des refactorings très sûrs - si quelque chose se passe mal, l'IDE ne fera pas de ref.

Pensez également à ajouter quelques tests unitaires pour vous assurer que votre code n'a pas souffert lors des remaniements.

-3voto

DBP Points 3

Vous pouvez utiliser sed pour effectuer cette opération. L'astuce consiste à se rappeler que les expressions régulières peuvent reconnaître les frontières entre les mots. Cela fonctionne sur toutes les plateformes à condition d'avoir les outils, ce qui sous Windows est Cygwin, Mac OS peut nécessiter l'installation des outils de développement, je n'en suis pas sûr, et Linux l'a déjà dans sa boîte. Donc grep, xargs, et sed devraient faire l'affaire, après 12 heures de lecture de pages de manuel et d'essais et d'erreurs ;)

0 votes

Avec un peu de chance, puisqu'il propose la même chose (trouver et remplacer) que la réponse la moins votée.

-18voto

Turambar Points 971

La plupart des éditeurs proposent l'option de recherche "mot entier". Il s'agit généralement d'une case à cocher dans la boîte de dialogue de recherche, qui permet de faire correspondre le terme recherché uniquement s'il contient des espaces en début et en fin de texte, des points et la plupart des autres délimiteurs. Cela fonctionnera probablement dans votre cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X