2009-04-24 8 views
10

Lorsque je creuse le code Python existant et que j'écris moi-même du code Python, j'utilise souvent pylint. J'utilise aussi Clone Digger. J'ai récemment commencé à utiliser rope, qui est une bibliothèque pour le refactoring automatisé.Outil Python qui suggère des refactorings

Mais je cherche autre chose que de la corde. Je préférerais un outil qui ne fait que suggérer des refactorisations possibles: nomme le refactoring, en fournit éventuellement une courte description (excellent pour l'apprentissage), met en évidence la section de code et me permet de faire le refactoring moi-même. Existe-t-il un tel outil?

+0

À des fins d'apprentissage, je recommande soit http://www.refactoring.com/ ou le livre par Martin Fowler, je ne connais pas d'outil qui fonctionne exactement comme vous l'avez décrit :( – Ryan

+0

Avez-vous Voici un exemple concret du type d'outil que vous recherchez, qui existe déjà pour Python ou un autre langage de programmation: – bignose

+0

pylint et Clone Digger suggèrent des endroits problématiques en pointant vers des problèmes spécifiques dans le code, mais ils ne suggèrent pas de refactorisation – Anonymous

Répondre

2

Check out homme de réparation de vélos http://bicyclerepair.sourceforge.net/

Qu'est-ce que l'homme de réparation de vélos? Le projet Bicycle Repair Man est une tentative de création d'une fonctionnalité de navigateur de refactoring pour python. Il est présenté sous la forme d'une bibliothèque pouvant être ajoutée aux IDE et aux éditeurs pour fournir des capacités de refactoring. Les liaisons pour Emacs et Vi sont incluses avec le paquet.

Jamais utilisé moi-même, mais j'ai lu à ce sujet. Cela ressemble à ce que vous cherchez.

+2

BicycleRepairMan est comme une corde, mais plus âgé et moins de caractéristiques que la corde, ce n'est pas ce que je cherche, j'ai déjà utilisé le BRM, je ne l'ai pas mentionné dans ma question parce que la corde l'a remplacé – Anonymous

0

NetBeans a une version d'accès anticipée qui supporte Python, et c'est plutôt sympa. Il a quelques outils de refactoring de base que j'ai trouvé utiles. En prime, il fonctionne sous Windows, Linux, Mac OS X et Solaris.

Check it out à: http://www.netbeans.org/features/python/

+1

ne vois rien à la référence que vous donnez qui suggère qu'il fait ce que la question demande: donner des suggestions au programme er quant à * quel * refactorings à effectuer, à quel point spécifique dans leur code. – bignose

1

Je ne sais pas si ce type d'outil existe dans une langue spécifique, bien que le concept a été mentionné dans le livre de refactoring de Martin Fowler (web reference).

Le meilleur outil que je connaisse qui existe actuellement est la complexité cyclomatique. This article implémente un compteur de complexité cyclomatique pour python.

L'autre métrique facile à cibler est la longueur de la méthode/fonction, le nombre d'attributs des objets/classes et le nombre de paramètres pour les fonctions, si je me souviens bien, pylint les a déjà comptés.

+0

La complexité cyclomatique n'est pas un outil, c'est une métrique de code. –

2

Oh Oubliez votre outil, utilisez plutôt TDD et un bon livre comme refactoring pour dessiner des motifs de Kerievsky. Le problème est que le refactoring est un moyen d'améliorer votre code et votre design, mais seulement vous pouvez savoir ce que vous voulez réaliser, aucun outil de refactoring ne peut le faire pour vous. Mon point est que la meilleure façon d'apprendre le refactoring est d'étudier des exemples, de ne pas suivre certains outils stupides/simples, parce qu'ils ne vous apprendront pas de refactoring sophistiqué, ni de refactoring avec du code. . PS Lire Fowler "Refactoring" et Kerievsky "Refactoring pour concevoir des Patterns" ces livres sont à lire lors de l'apprentissage du refactoring. Et ils mentionnent un moyen simple de vérifier si le refactoring est nécessaire (odeurs).

Considérez également TDD comme un bon moyen de vous assurer que vos références sont sûres et ne cassent pas votre code. Beck "Développement axé sur les tests par l'exemple" est un bon livre pour commencer. Et Python ont PyUnit pour TDD.

2

Vous pourriez aimer Pythoscope, un générateur automatique de test d'unité Python, qui est supposé vous aider à amorcer une suite de tests unitaires en exécutant du code de façon dynamique.

Avez-vous également vérifié le module rope.contrib.codeassist? Il est supposé proposer et effectuer automatiquement des refactorings de votre code source pour vous.

Questions connexes