Comment refactoriser un projet dans emacs (changer le nom de la méthode partout)?

15

Je veux réécrire des parties d'un projet open source. Cela inclut le changement de nom des méthodes. Comment puis-je le faire efficacement dans emacs sur l'ensemble du projet?

Je préfère ne pas utiliser de hacks tels que la recherche et le remplacement dans chaque tampon.

Le chat unfun
la source
1
Quelle langue?
phils
Avez-vous regardé ag / grep + wgrep + rechercher / remplacer? Vous n'ouvrez pas les tampons individuellement dans cela. Connexe: emacs.stackexchange.com/a/243/115
Kaushal Modi
Python. Je réalise que ma question n'était pas la meilleure, désolé.
The Unfun Cat
Comme cette question a été repoussée au sommet (au cas où quelqu'un tomberait dessus sur Google), il existe une bibliothèque python dédiée à la refactorisation appelée Rope. Il est plus intelligent que les autres solutions proposées car il prend en compte le contexte. Il est implémenté dans Emacs dans un package appelé ropemacs.
jcaw
@TheUnfunCat pouvez-vous ajouter plus de contexte à votre question? Pour l'instant, c'est assez vague, et ajouter que vous voulez le faire dans un projet python clarifierait beaucoup de choses.
DoMiNeLa10

Réponses:

14

J'utilise maintenant helm-agpour trouver toutes les instances du nom de la fonction (recherches dans tous les fichiers, y compris les sous-répertoires, pas seulement dans les tampons ouverts), puis j'utilise C-c C-epour entrer un tampon qui répertorie toutes les correspondances et là, je change le nom de la fonction. Lorsque j'ai terminé, j'appuie sur C-c C-c (helm-ag--edit-commit)pour enregistrer les modifications dans tous les fichiers ouverts.

Cela peut sembler déroutant, mais veuillez consulter https://github.com/ShingoFukuyama/helm-swoop

Lorsque vous le serrez, vous pleurerez de larmes de joie qu'une telle merveilleuse fonctionnalité existe.

Le chat unfun
la source
1
Il a coulé ma joue.
mihai
1
j'avais littéralement les larmes aux yeux lors de l'exécution de ce flux de travail pour la première fois, sans blague
Paul
Excellente solution!
fraxture
6

Puisque vous n'avez pas spécifié la langue, il est difficile de donner de meilleures réponses que «Rechercher et remplacer».

Utilisation de wgrep

Si vous voulez simplement (interactivement) remplacer toutes les instances d'un symbole par un autre, wgrep est votre meilleur choix. Il vous permet de modifier de manière interactive le tampon de résultats grep.

  1. Faites M-x package-install RET wgrep.
  2. Courez M-x rgrep. Il vous posera quelques questions faciles, puis effectuera une recherche récursive du terme de recherche dans le répertoire que vous avez spécifié.
  3. Passez au tampon de résultats et faites M-x wgrep-change-to-wgrep-mode. Ce tampon est désormais modifiable. Toutes les modifications que vous apportez ici seront reflétées dans les fichiers eux-mêmes.
  4. Exécutez a replace-regexpou a query-replace-regexpdans ce tampon pour effectuer le refactoring.
  5. Terminez vos modifications avec M-x wgrep-save-all-bufferset M-x wgrep-finish-edit.
Malabarba
la source
3

Vous pouvez utiliser counsel-rgsuivi de C-c C-opour obtenir une liste de tous les candidats dans un tampon. Appuyez sur wpour les modifier avec wgrep. Je recommande ieditpour renommer les symboles. Appuyez sur C-c C-cpour valider.

Dépendances:

abo-abo
la source