Je suis surtout intéressé par les changements automatiques de C++ et de méthode/nom de classe/signature.
Je le fais souvent et j’attends donc d’autres réponses.
Les seules astuces que je connaisse sont vraiment basiques. Voici mes meilleurs amis dans Emacs lors du refactoring de code:
M-x query-replace
Cela vous permet d'effectuer une recherche globale et de la remplacer. Cela se fera énormément lorsque vous déplacerez des méthodes et des données fréquemment utilisées vers d'autres classes ou espaces de noms.
C-x 3
Cela vous donne un affichage avec deux tampons côte à côte. Vous pouvez ensuite charger différents fichiers et déplacer votre curseur de l'un à l'autre avec C-x o
. C'est assez basique, mais je le mentionne à cause de la puissance du prochain ...
C-x (
(type any amount of stuff and/or emacs commands here)
C-x )
Voici comment vous définissez une macro dans emacs. Chaque fois que vous vous retrouvez dans l'obligation de répéter la même chose à un tas de code (et que c'est trop complexe pour une requête de remplacement), c'est une bouée de sauvetage. Si vous vous trompez, vous pouvez appuyer sur C-g
pour arrêter la définition de la macro, puis annuler (C-_
) jusqu'à ce que vous soyez revenu à votre point de départ. Les clés pour appeler la macro sont C-x e
. Si vous voulez le faire plusieurs fois, vous pouvez appuyer sur Esc
et taper un nombre en premier. Exemple: Esc 100 C-x e
tentera d’appeler votre macro 100 fois.
(Remarque: Sous Windows, vous pouvez obtenir «Meta» en appuyant sur la touche Échap ou en maintenant Alt).
В последних версиях Emacs (24) Semantic способен на это.
Si vous pouvez programmer dans elisp, vous pouvez rechercher une combinaison de cedet + srecode à partir de bibliothèques CEDET - elle fournit tous les instruments pour cette tâche - recherche des appelants de fonctions, signature, etc. Mais vous devez créer vous-même un outil réfractaire , en utilisant ces instruments
Car quelque part entre les outils de refactoring et les expressions rationnelles simples, depuis Emacs 22, vous pouvez incorporer des expressions elisp arbitraires dans votre texte de remplacement, ce qui vous permet d’effectuer une manipulation de texte incroyablement puissante. Steve Yegge a écrit un bon article à ce sujet il y a quelque temps.
Avec le ccls
ou cquery
, qui fournit le "protocole de serveur de langue" (lsp), vous pouvez refactoriser les noms avec:
M-x lsp-rename
Alternative: srefactor
utilise le framework de mode sémantique emacs: https://github.com/tuhdo/semantic-refactor/blob/master/srefactor-demos/demos.org
Vous pouvez l'obtenir avec M-x package-install auprès de MELPA ou sur https://github.com/tuhdo/semantic-refactor/ .
Un de mes amis jouait avec xrefactory et m'a dit que cela fonctionnait plutôt bien. Ce n'est pas bon marché cependant.
Construire des symboles cscope.
cherchez le symbole que vous voulez refactoriser.
entrez dans la fenêtre cscope et lancez une macro après avoir placé le curseur à la première occurrence
vous devez juste c-x c-e maintenant
Je suis tout à fait d'accord pour dire que trouver et remplacer du travail est parfait. Cependant, cedet a une fonctionnalité vraiment sympa: "semantic-symref-list".
Avec le curseur sur une méthode, exécutez cette commande. Un tampon répertoriant tous les emplacements de votre code faisant référence à cette balise vous sera présenté.
Vous pouvez toujours utiliser des astuces de recherche et remplacement, ce qui confirmera que vous avez modifié toutes les références.
J'utilise cquery pour ma complétion C++, qui utilise Microsoft LSP pour la communication IDE <-> Tool. Le serveur cquery satisfait les demandes du protocole LSP à l'aide d'un backend clang.
lsp-emacs est le paquetage situé entre emacs et le backend cquery (cquery-emacs) qui expose une fonction lsp-rename
. En tant que système d’achèvement, cquery a été très fiable et rapide, il est vivement recommandé.
Essayez, suivez le guide de démarrage du cquery github: https://github.com/cquery-project/cquery/wiki/Emacs
Une fois que vous avez installé cquery:
lsp-rename
Vous devriez probablement parcourir tous les tampons modifiés et vérifier ce qui a été fait après le refactoring avec n'importe quel outil/langage.