Rinomina il refactoring delle variabili locali


10

Esiste uno strumento di refactoring elisp in grado di rinominare le variabili locali e gli argomenti delle funzioni? Vorrei poter girare:

(defun my-func (s r)
  ...
  (use s .. r))

in:

(defun my-func (string replacement)
  ...
  (use string .. replacement))

usando un metodo che sa come trovare riferimenti a variabili. Sto bene se non è super-igienico.


4
Più cursori possono modificare tutte le istanze di un simbolo nel defun corrente.
Malabarba,

Vedi anche iedit.
InHarmsWay


4
Non tutto il codice è nostro. Alcuni codici sono vecchi.
Gracjan Polak,

2
Di solito regexp sostituisci nella regione \ bSYM \ b ...
BRPocock

Risposte:


2

TL; DR: erefactor-rename-symbol-in-buffer

Stai cercando una funzione di ridenominazione lessicale intelligente - una che rinomina le variabili in base al loro ambito, non solo una stupida ricerca e sostituzione. Pacchetti come questo esistono in molte lingue ma al momento della scrittura (aprile 2019), in realtà non ci sono molte opzioni per Emacs Lisp. Il erefactorpacchetto è l'unico che conosco.

erefactor-rename-symbol-in-bufferè la funzione che desideri. È un comando di ricerca e sostituzione intelligente che sostituirà i simboli nell'ambito corrente (inclusi i documenti). Il limite di questo comando è che non cercherà al di fuori del buffer corrente. È intelligente, ma non perfetto. Ti chiederà di confermare ogni evento per garantire che il risultato finale sia sanitario.

L'altra funzione di rinomina è erefactor-rename-symbol-in-package. Questo non funziona allo stesso modo - funziona solo su simboli globali. Si basa sul fatto che il pacchetto sia impostato correttamente, con un sistema di raggruppamento e un prefisso, e ha bisogno che la variabile corrisponda al prefisso del pacchetto. Non è molto robusto: fallirà se non hai impostato le cose come previsto da questa funzione. Penso che se stai rinominando un simbolo globale, puoi anche usare un ingenuo trovare e sostituire poiché i simboli globali in Elisp non hanno uno spazio dei nomi. I vantaggi della comprensione lessicale sono minimi. Questo comando è troppo fragile per il compromesso. Suggerirei solo di usare projectile-replace.

Erefactor ha una serie di altri comandi Elisp che potresti trovare utili. Un elenco (incompleto) è disponibile nel file Leggimi .

Non è descritto nella pagina GitHub ma erefactorè disponibile su MELPA ( M-x package-install RET erefactor). La pagina MELPA è disponibile qui .

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.