Est-ce que quelqu'un connaît un outil de refactoring complet pour C ++ qui fonctionne de manière fiable avec de grandes bases de code (environ 100 000 lignes)?
J'ai essayé tout ce que je pouvais trouver encore et encore au cours des dernières années: SlickEdit, Eclipse CDT. Ils n'étaient pas du tout utilisables.
Résumé : j'ai pris le temps et évalué «Visual Assist X» ainsi que «Refactor for C ++». Les deux ont des caractéristiques impressionnantes, mais les deux sont également loin d'être parfaits. Extraire un gros bloc de code n'est généralement pas satisfaisant sans modifications manuelles - et ne paie donc pas.
"Visual Assist X" a des fonctionnalités intéressantes telles qu'une autocomplétition beaucoup plus complète, etc. Mais cela entraîne tellement de scintillement et ralentit beaucoup à certains moments.
À mon avis, la réponse est donc: "Non, il n'y a pas d'outil de refactoring prêt pour la production pour C ++"
MISE À JOUR Mars 2015 En ce qui concerne la réponse hdoghmens aujourd'hui, j'ai essayé Resharper pour C ++. Son lien https://www.jetbrains.com/resharper/ ne dit rien sur C ++. Mais j'ai trouvé Resharper C ++ qui a été annoncé il y a plus d'un an ici:
https://www.jetbrains.com/resharper/features/cpp.html
Je l'ai essayé avec VC2010 en utilisant une base de code de 20 Mo.
Test 1: Méthode d'extraction: entraîne une exception Resharper. Aucun code source modifié.
Test 2: méthode d'extraction avec une source différente: fonctionne bien
Test 3: Modifier la signature de la fonction extraite: entraîne un code C ++ cassé:
bool myclass::do_work123(<unknown long Color>int& Filled*&, long, int&)
C'est peut-être pourquoi C ++ n'est pas répertorié sur la page principale.
A mon avis, la réponse à cette question est toujours "NON" .
la source
Réponses:
Je trouve Visual Assist X avec Visual Studio très utile. Un autre choix est Refactor pour C ++ .
la source
Visual Assist et Visual Studio facilitent grandement la gestion des bases de code volumineuses. L'assistance visuelle permet de suivre la manière dont une classe ou un membre est utilisé et est plus efficace pour le renommer sans faux positifs que rechercher et remplacer.
la source
Je m'attends à ce que clang changera considérablement le paysage des outils de refactoring C ++ au cours des prochaines années. Il s'agit d'un compilateur modulaire open source qui expose une API pour l'analyse et l'analyse sémantique du code C ++. Les IDE et autres outils pourront utiliser cette API plutôt que de faire le difficile travail d'écrire leur propre analyseur et analyseur sémantique.
Google a déjà créé un outil de refactoring à grande échelle en utilisant clang .
la source
Mozilla a son propre outil de refactoring nommé Pork ( Wiki , Developer Wiki ). Voici le blog du développeur derrière Pork. D'après ce que j'ai lu, Pork a été utilisé avec succès dans des refactorisations chez Mozilla.
Pork devrait vous aider si vous venez de * nix land, pour Visual Studio, je recommande également Visual Assist.
la source
Notre boîte à outils de réingénierie logicielle DMS est un moteur de transformation conçu pour effectuer des transformations complexes sur de grands corps de code, y compris C ++. Il a été utilisé pour apporter des modifications fiables sur des systèmes de millions de lignes de code. Il fonctionne à l'aide d'analyseurs et de transformateurs de langages précis au compilateur.
Il dispose d'un analyseur C ++ complet avec résolution de nom et de type, construit des AST de code, peut appliquer des transformations procédurales ou source-à-source (avec la syntaxe de surface C ++) pour réviser ces arbres et régénérer la sortie compilable avec les commentaires préservés. (Edit: 7/1/2011: fait maintenant C ++ 1X dans la mesure où nous comprenons la norme :)
Il a été utilisé sur des projets de réingénierie à grande échelle, y compris la refonte de composants C ++ et des traductions 100% entièrement automatisées entre les langues. Vous pouvez en savoir plus sur le site Web.
DMS est également utilisé pour créer des outils d'analyse de source arbitraires. Les exemples incluent la détection de clone, la couverture de test, la différence intelligente (comparaison des structures de code source et des opérations d'édition abstraites plutôt que des lignes avec simple insertion et suppression), etc.
Ce qu'il n'est pas (actuellement) est un outil de refactoring interactif. Nous pensons que pour bien faire la plupart des refactorisations, vous avez besoin d'un contrôle approfondi et d'analyses de flux de données. DMS a des machines génériques pour prendre en charge cela, et cette machine est implémentée pour C, COBOL et Java à ce stade, le C ++ étant le suivant. C'est un travail difficile. Vous ne verrez pas beaucoup d'outils de refactoring C ++ sérieux de qui que ce soit tant que ce genre de problème n'a pas été bien résolu. Vous avez d'abord besoin d'un analyseur C ++ complet: -}
EDIT 7/5/2011: On dirait que nous allons faire un tour à la version interactive. Nous avons remporté un SBIR de phase I du ministère de l'Énergie pour étudier comment y parvenir. Voir http://science.energy.gov/sbir/awards-and-general-stats/fy-2011/phase-i-by-state/?p=1#tx (recherchez les conceptions sémantiques sous "Texas"). Ne vous attendez pas à un résultat pressé; ce n'est que le début d'un programme pluriannuel en 3 phases pour accéder à un outil.
EDIT 8/11/2011: Premiers progrès ... nous gérons maintenant toutes les directives C ++ 0x et OpenMP.
EDIT 1/4/2012: Effectue une analyse complète du flux de contrôle du code C ++.
EDIT 15/09/2014: Maintenant, avez bien en main l'analyseur / moteur de transformation frontal C ++ 14. Renomme même de manière assez fiable à ce stade: -}
la source
Si vous utilisez emacs, essayez Xrefactory . Il prend en charge l'extraction de méthodes, le changement de nom des classes / fonctions / variables et d'insertion / suppression / déplacement de paramètres.Il dispose également d'un moteur de complétion de code très bon / rapide.
la source
Actuellement, je ne peux recommander aucun outil de refactoring pour C ++, certainement pas pour les grandes bases de code de 100k lignes et plus. J'espérais que cela changera, comme l'OP, et j'espère qu'un jour il y aura quelque chose. Je crains que le langage lui-même doive changer de manière significative avant de voir de très bons outils.
btw, SlickEdit a-t-il abandonné ses fonctionnalités de refactoring?
la source
Je recommande d'essayer les rtags si vous utilisez emacs et que vous ne l'avez pas encore essayé (il existe également un package pour vim disponible). Il s'agit d'une application client / serveur basée sur clang qui indexe le code C / C ++, avec ces fonctionnalités incluses:
J'ai décidé de l'essayer après avoir regardé cette conférence qui a présenté les rtags (et emacs) pour moi.
(Je dois dire que je suis allé jusque-là seulement après que mon QtCreator n'a pas réussi à renommer certains symboles correctement, ce qui est un obstacle pour mon utilisation de cet excellent IDE pour le moment)
Outre ce qui est pris en charge par les rtags, j'ai également besoin de fonctionnalités supplémentaires, notamment:
Pour ceux-ci, je recommande d'utiliser un package sémantique-refactor pour emacs ( je ne sais pas s'il existe des alternatives pour vim)
En général, les outils basés sur le clang semblent très prometteurs. Si vous êtes intéressé par plus d'informations sur les outils clang pour la refactorisation C ++, y compris pour les projets avec une base de code importante, il y a quelques excellentes discussions de Chandler Carruth.
la source
La boîte à outils de rengineering logiciel DMS fait cela , je pense. Il s'agit d'un moteur de transformation de code, conçu pour une grande échelle et qui gère le C ++. Je n'ai aucune idée de l'élégance de la sortie.
la source
Il faut sûrement mentionner Klocwork comme une suite de refactoring de code commercial. Cela semble très prometteur lorsque vous parcourez la vidéo de démonstration.
la source
Le problème, ce sont les modèles C ++. Depuis 2019, je ne connais aucun outil de refactoring prenant en charge les modèles C ++. J'ai essayé VS2019, VisualAssist, Clion, QtCreator.
Prenons l'exemple:
Si j'exécute Rename Refactoring sur
foo::print
,bar::print
doit également être renommé automatiquement. Parce qu'ils sont liés parcall_print
des instanciations de modèle de fonction.la source
Si vous utilisez Visual C ++ (Express Edition est gratuite), vous pouvez utiliser Visual Assist à partir de www.wholetomato.com (lien vers les fonctionnalités de refactoring C ++).
Il a une période d'essai de 30 jours et nous avons trouvé qu'il était plus rapide et plus complet que l'intellisense intégré dans le produit Visual C ++ lui-même.
la source
Si vous cherchez à réorganiser votre base de code: MOOSE. Mais c'est une grande collection d'outils d'analyse et de réingénierie, pas un éditeur.
la source
Il existe maintenant une extension de refactoring C ++ pour Visual Studio 2013 de Microsoft: http://visualstudiogallery.msdn.microsoft.com/164904b2-3b47-417f-9b6b-fdd35757d194
la source
Resharper Ultimate est définitivement la voie à suivre. Bonheur garanti :)
En version bêta à partir de mars 2015.
la source
CLion semble très prometteur.
Avertissement: je ne l'ai pas encore essayé car je dois convertir mes projets au format CMake pour pouvoir l'utiliser.
la source
Je vous recommande d'essayer Lattix . Il vous permet d'analyser de grandes bases de code C / C ++ pour découvrir l'architecture, identifier les dépendances problématiques et repenser le code pour améliorer la modularité et réduire la dette technique. Lattix fournit également un certain nombre d'algorithmes pour aider dans le processus de refactoring. Ces algorithmes vous aident à comprendre comment déplacer des éléments d'une partie de la hiérarchie à une autre, interrompre les cycles et déplacer les sous-systèmes afin d'améliorer le couplage et la cohésion des sous-systèmes. Voici les résultats de Lattix analysant le noyau Android (1,6 million de LOC de C / C ++). Divulgation complète: je travaille pour Lattix
la source
Désolé de ne trouver cette question que si tard. Mes étudiants et assistants travaillent sur le refactoring C ++ depuis environ 2006. La plupart des infrastructures de refactoring des CDT ont été construites par mon équipe à l'IFS institute of software. depuis quelques années, nous fournissons à Cevelop notre version de CDT avec un support pour les refactorisations de modernisation de code C ++, etc. Gratuit disponible sur https://cevelop.com
la source
J'ai trouvé le plugin suivant pour Visual Studio 2013: Refactoring Visual C ++ par Microsoft.
C'est juste un simple outil de changement de nom, mais il fonctionne parfaitement. Il ajoute le menu contextuel suivant après un clic droit sur un symbole:
la source