Come posso effettuare il refactoring di un progetto in emacs (cambiare il nome del metodo ovunque)?


15

Voglio riscrivere parti di un progetto opensource. Ciò include i metodi di ridenominazione. Come posso farlo in modo efficiente in emacs nell'intero progetto?

Preferirei non usare hack come la ricerca e la sostituzione in ogni buffer.


1
Quale lingua?
phils,

Hai visto ag / grep + wgrep + cerca / sostituisci? In questo non si aprono buffer individualmente. Correlati: emacs.stackexchange.com/a/243/115
Kaushal Modi

Pitone. Mi rendo conto che la mia domanda non era la migliore, scusa.
The Unfun Cat,

Poiché questa domanda è stata posta in cima (nel caso in cui qualcuno si imbatti in questo da Google), c'è una libreria di pitone dedicata per il refactoring chiamata Rope. È più intelligente delle altre soluzioni offerte in quanto tiene conto del contesto. È implementato in Emacs in un pacchetto chiamato ropemacs.
jcaw,

@TheUnfunCat puoi aggiungere più contesto alla tua domanda? A partire da ora è piuttosto vago e aggiungere che si desidera farlo in un progetto Python chiarirebbe un sacco di cose.
DoMiNeLa10

Risposte:


14

Ora uso helm-agper trovare tutte le istanze del nome della funzione (ricerche in tutti i file, inclusi i sottodir, non solo nei buffer aperti), quindi uso C-c C-eun buffer che elenca tutte le corrispondenze e lì cambio il nome della funzione. Quando ho finito, premo C-c C-c (helm-ag--edit-commit)per memorizzare le modifiche a tutti i file aperti.

Questo può sembrare confuso, ma per favore vedi https://github.com/ShingoFukuyama/helm-swoop

Quando lo grugnisci piangerai lacrime di gioia per l'esistenza di tale meravigliosa funzionalità.


1
Mi ha fatto scorrere una lacrima sulla guancia.
Mihai,

1
letteralmente avevo le lacrime agli occhi quando eseguivo questo flusso di lavoro per la prima volta, non scherzavo
Paul,

Ottima soluzione!
frana il

6

Dal momento che non hai specificato la lingua, è difficile dare risposte migliori di "Cerca e sostituisci".

Usando wgrep

Se vuoi semplicemente sostituire (in modo interattivo) tutte le istanze di un simbolo con un altro, wgrep è la soluzione migliore. Ti permette di modificare interattivamente il buffer dei risultati grep.

  1. Fare M-x package-install RET wgrep.
  2. Corri M-x rgrep. Ti farà alcune semplici domande e quindi eseguirà una ricerca ricorsiva per il termine di ricerca all'interno della directory che hai individuato.
  3. Passa al buffer dei risultati ed esegui M-x wgrep-change-to-wgrep-mode. Questo buffer è ora modificabile. Eventuali modifiche apportate qui si rifletteranno nei file stessi.
  4. Eseguire a replace-regexpo a query-replace-regexpin questo buffer per eseguire il refactoring.
  5. Termina le modifiche con M-x wgrep-save-all-bufferse M-x wgrep-finish-edit.


3

È possibile utilizzare counsel-rgseguito da C-c C-oper ottenere un elenco di tutti i candidati in un buffer. Premere wper modificarli con wgrep. Consiglio ieditper rinominare i simboli. Premi C-c C-cper confermare.

dipendenze:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.